
Lesson 40 TCP 协议★★★★★考试重要程度⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐第一部分为什么需要 TCP上一课我们学习了 UDP。UDP快但是它有很多问题。例如发送ABCDE结果收到ABD或者ACBED是不是如果你下载一个文件。少了一个字节。文件还能打开吗不能。所以很多应用必须保证数据一个字节都不能错。这时候就需要TCP。第二部分TCP 是什么★★★★★教材定义TCP 是一种面向连接、可靠传输、面向字节流的传输层协议。★★★★★这一句话整章都围绕它。里面三个关键词。TCP ↓ 面向连接 ↓ 可靠传输 ↓ 面向字节流第三部分TCP——面向连接★★★★★什么叫面向连接例如打电话。是不是第一步要拨号。第二步对方接听。第三步才能聊天。TCP也是一样。发送数据之前必须先建立连接。所以TCP不能直接发送。★★★★★UDP 对比UDP像寄明信片。直接写好。寄。结束。TCP像打电话。先接通。再聊天。第四部分TCP——可靠传输★★★★★这是TCP最重要特点。例如发送ABCDE如果中间C丢了。TCP怎么办答案重发。直到收到。所以TCP保证数据完整。★★★★★第五部分TCP——面向字节流★★★★★这是很多同学最难理解。其实一点都不难。例如一本书100页。TCP不会关心第一页、第二页。它只关心连续的字节。例如123456789...发送1000字节。TCP可以分几次发送。接收端重新拼起来。所以叫面向字节流。考试知道这个概念即可。第六部分TCP 为什么可靠★★★★★很多同学都会问。TCP为什么可靠其实后面几节课全部都是回答这个问题。TCP主要依靠建立连接 ↓ 确认应答ACK ↓ 超时重传 ↓ 序号Sequence Number ↓ 流量控制 ↓ 拥塞控制★★★★★今天先知道有哪些机制。后面一节一节学。第七部分哪些应用使用 TCP★★★★★考试经常问。例如网页HTTP为什么网页不能少内容。HTTPS也是TCP。文件下载FTP必须TCP。因为文件不能少。电子邮件SMTPPOP3IMAP全部TCP。一句口诀要求数据完整就选 TCP。第八部分TCP 首部了解TCP首部至少20 字节。里面以后重点学习源端口 目的端口 序号 确认号 ACK SYN FIN 窗口大小今天认识名字即可。第九部分TCP 和 UDP 全面对比★★★★★这是考试必考题。TCPUDP面向连接无连接可靠传输不可靠面向字节流面向数据报有确认无确认有重传无重传有流量控制无流量控制有拥塞控制无拥塞控制速度较慢速度快⭐⭐⭐⭐⭐建议这一张表直接背。第十部分TCP 工作过程先理解例如浏览网页。浏览器 ↓ TCP建立连接 ↓ 发送HTTP请求 ↓ 服务器回复网页 ↓ TCP关闭连接是不是先连接。再通信。最后断开。这就是TCP。第十一部分本课总结★★★★★TCP │ ├── 传输层协议 ├── 面向连接 ├── 可靠传输 ├── 面向字节流 ├── 首部至少20字节 ├── 建立连接 ├── 确认应答 ├── 超时重传 ├── 流量控制 └── 拥塞控制Lesson 41 TCP 三次握手★★★★★⭐⭐⭐⭐⭐⭐⭐全书最重点之一考试重要程度第一部分什么是三次握手上一课我们学过TCP 是面向连接。那问题来了连接怎么建立答案三次握手Three-way Handshake一句话定义三次握手是 TCP 建立连接的过程用于确认通信双方都具有发送和接收能力。⭐⭐⭐⭐⭐第二部分为什么需要三次握手举一个最容易理解的例子。假设你要给朋友打电话。是不是第一步你说“喂你能听见吗”朋友回答“能我能听见你你能听见我吗”你再回答“能。”到这里双方都确认了电话正式开始。TCP也是一样。第三部分三次握手全过程★★★★★我们用客户端Client和服务器Server来表示双方。客户端 服务器第一次握手SYN客户端发送SYN意思“我想建立连接。”此时客户端证明了自己具有发送能力。服务器收到。流程客户端 ---------------- SYN ---------------- 服务器第二次握手SYN ACK服务器收到以后回复SYN ACK什么意思分成两部分。ACK“你的请求我收到了。”SYN“我也想和你建立连接。”所以服务器同时完成确认收到发起自己的连接请求流程客户端 ------------- SYN ACK ------------ 服务器到这里服务器已经证明能接收能发送第三次握手ACK客户端收到SYN ACK。回复ACK意思“收到你的连接请求也确认了。”流程客户端 ---------------- ACK ---------------- 服务器至此连接建立成功。双方开始传输数据。第四部分为什么叫三次因为一共三次报文交换。① SYN ↓ ② SYNACK ↓ ③ ACK考试喜欢直接问TCP 建立连接需要几次握手答案三次。第五部分SYN、ACK 到底是什么★★★★★很多同学最容易混。其实很简单。SYN全称Synchronize同步表示请求建立连接。口诀SYN 我想连接。ACK全称Acknowledgment确认表示我收到了。口诀ACK 收到了。所以第二次握手SYN ACK就是收到你的请求我也想建立连接。第六部分为什么不能两次握手★★★★★这是考试最喜欢问的简答题假设只有两次。客户端 → SYN 服务器 → SYNACK如果第二次报文在网络中丢失。客户端不知道服务器已经同意。服务器却认为连接已经建立。结果双方状态不同。服务器会一直等待客户端发送数据浪费资源。所以两次握手不能保证双方都确认连接已经建立。第七部分为什么不是四次握手如果第三次ACK 已经告诉服务器“我已经收到你的确认。”那么连接已经建立。如果再来第四次。只是浪费时间。所以三次刚刚好。第八部分三次握手过程中双方状态了解考试偶尔会考。客户端服务器CLOSEDLISTENSYN-SENTLISTENESTABLISHEDESTABLISHED重点记住三次握手结束后双方都进入 ESTABLISHED已建立连接状态。第九部分三次握手流程图★★★★★这是考试画图题一定会画。客户端 服务器 │ │ │ ------- SYN ----------------- │ │ │ │ ---- SYN ACK -------------- │ │ │ │ ------- ACK ----------------- │ │ │ 连接建立成功ESTABLISHED 建议考试时直接画这个图。第十部分为什么 TCP 一定要先建立连接因为TCP 要保证数据可靠顺序正确双方都准备好了如果不建立连接。很多机制例如确认应答序号重传都无法正常工作。第十一部分本课总结★★★★★TCP 三次握手 │ ├── 第一次SYN │ 请求建立连接 │ ├── 第二次SYN ACK │ 收到请求 同意连接 │ ├── 第三次ACK │ 确认收到 │ └── 建立连接成功第十二部分必会画图★★★★★Client Server SYN ---------------------- ---------------- SYNACK ACK ---------------------- Connection Established 这一张图建议默写到会。Lesson 42 TCP 四次挥手★★★★★⭐⭐⭐⭐⭐⭐⭐全书重点考试重要程度第一部分什么是四次挥手上一课三次握手建立连接。这一课四次挥手断开连接。一句话定义TCP 四次挥手是双方有序释放连接的过程。⭐⭐⭐⭐⭐第二部分为什么不能直接断开举个生活例子。你和朋友打电话。是不是不能啪直接挂断一般都是A 我说完了。 ↓ B 好。 ↓ B 我也说完了。 ↓ A 再见。是不是双方都确认没有话要说。TCP也是一样。第三部分FIN 是什么建立连接使用SYN关闭连接使用FINFIN全称Finish结束意思“我没有数据要发送了。”注意★★★★★FIN 不代表立即关闭连接。只是表示我这边发送结束。还能接收数据。这是考试容易考的地方。第四部分四次挥手全过程★★★★★假设客户端主动关闭。服务器被动关闭。第一次挥手客户端发送FIN意思我没有数据发了。流程客户端 ---------------- FIN ---------------- 服务器第二次挥手服务器收到。回复ACK意思收到你可以停止发送了。注意这里只是确认。服务器可能还有数据。所以不会马上关闭。流程客户端 ---------------- ACK ---------------- 服务器第三次挥手服务器数据发送完。发送FIN意思我也没有数据了。流程客户端 ---------------- FIN ---------------- 服务器第四次挥手客户端收到。回复ACK意思收到。连接正式关闭。流程客户端 ---------------- ACK ---------------- 服务器第五部分完整流程图★★★★★客户端 服务器 FIN --------------------------- --------------------------- ACK --------------------------- FIN ACK --------------------------- 连接释放完成 ★★★★★考试一定要会画。第六部分为什么要四次★★★★★这是考试最爱问的问题。为什么建立3 次。关闭4 次原因建立连接第二次SYN ACK可以一起发送。因为服务器收到SYN。立即同意。所以一起。但是关闭连接服务器收到FIN。只能说明客户端不发了。可是服务器还有数据没有发完。所以只能先回复ACK等发送完成。再发送FIN所以必须四次。★★★★★第七部分TIME_WAIT★★★★★这是教材非常喜欢考。第四次ACK发送完。客户端不会立即关闭。而是进入TIME_WAIT为什么两个原因原因1防止最后一个ACK丢失。如果ACK没到。服务器会重新发送FIN。客户端还能回复。原因2等待网络中旧报文全部消失。防止影响下一次连接。★★★★★一句口诀TIME_WAIT 防丢 ACK 防旧报文。第八部分三次握手 VS 四次挥手★★★★★这是考试必考。三次握手四次挥手建立连接释放连接SYNFIN3 次4 次双方准备通信双方结束通信口诀握手建连接挥手断连接。第九部分TCP 生命周期整个 TCP可以理解成建立连接 ↓ 传输数据 ↓ 释放连接也就是三次握手 ↓ 数据通信 ↓ 四次挥手这是 TCP 最完整的生命周期。第十部分本课总结★★★★★TCP 四次挥手 │ ├── 第一次FIN │ 客户端结束发送 │ ├── 第二次ACK │ 服务器确认 │ ├── 第三次FIN │ 服务器结束发送 │ ├── 第四次ACK │ 客户端确认 │ └── TIME_WAIT第十一部分必画图★★★★★Client Server FIN ---------------------- ---------------------- ACK ---------------------- FIN ACK ---------------------- Connection Closed