TCP ( Transmission Control Protocol 传输控制协议) 是一种面向连接的,可靠的传输层通信协议,IEFT定义 RFC 793.
TCP 和 UDP 一起,处于传输层,位于 IP 层之上,应用层之下。IP 层是无连接的,不可靠的协议,那么 TCP 又是怎么可靠传输的呢。
TCP 和 UDP 的区别是我面试的时候很喜欢问的话题。因为这个知识点可以从浅到深,问出很多问题来。从简单的概念上的理解,到很多小细节上,可以问的东西很多。
建立连接需要三次握手。
这个时候,连接就建立了,可以开始传输数据了。
第一次 SYN 报文表示发送方要和接收方建立连接。SYN + ACK 表示接收方同意和发送方建立连接,并且也请求和发送方建立连接,最后的 ACK 表示发送方同意建立连接。
断开连接需要四次握手:
接受方收到 FIN 报文后,ACK 和 FIN 报文可能同时发送,也可能分开发放。分开发送的情况是这样的,你没话说了,我还有话说呢。 第一个 FIN 报文可以由任意一方发起。 第一个 FIN 报文可能随着最后一个数据包一起发送,也就是不一定是单独发送的。
三次握手和四次握手的设计并不是为了可靠传输设计的,而是面向连接设计的。因为 IP 协议是不可靠的,所以当发送方有一坨数据想要发送给接收方的时候,先使用代价比较小的几个报文,先探探路,比如三次握手的第一个 SYN 报文,如果这个报文能正确到达接收方,表示连接是通的,至少目前是通的,如果因为网络拥堵,发送方没有在预定的时间内收到 SYN + ACK 的相应,它会进行一定次数的重发,当超出重发次数后,就认为接收方是不可到达的,就放弃了这次请求,然后告诉应用层。当接收方接收到 SYN 后,发出 SYN + ACK 报文,并且开始准备接受数据,如果发送方一直没有相应一个 ACK 报文的话,它也会重复一定的次数,如果超出了次数,那么表示连接断开了,接受方就需要回收资源了。
四次握手也是类似的设计,当一方发送 FIN 给另一方的时候,接受方就知道发送方不会再发送数据了,可以把接受到的所有数据组装交给应用层了,同时也告诉应用层,数据接收完成了。但是不代表接收方一定要同时发送 FIN 报文,如果还有数据包发送,那么就接着发送,发送完了再发 FIN 报文。
TCP 为了保证可靠传输,做了几个规定。
- EOF -
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。
转载请注明:文章转载自 Binkery 技术博客 [https://binkery.com]
本文标题: TCP 传输控制协议
本文地址: https://binkery.com/archives/531.html