基本特性¶
约 811 个字 2 张图片 预计阅读时间 3 分钟
概述¶
TCP是一个面向连接的(connection-oriented)、可靠的(reliable)、字节流式(byte stream)传输协议, TCP的这三个特性该怎么理解呢?
-
面向链接:
-
在应用TCP协议进行通信之前双方通常需要通过三次握手来建立TCP连接,连接建立后才能进行正常的数据传输,因此广播和多播不会承载在TCP协议上。
-
但是同时面向连接的特性给TCP带来了复杂的连接管理以及用于检测连接状态的存活检测机制。
-
-
可靠性:由于TCP处于多跳通信的IP层之上,而IP层并不提供可靠的传输,因此在TCP层看来就有四种常见传输错误问题,分别是
-
比特错误(packet bit errors) -- 首先TCP通过超时重传和快速重传两个常见手段来保证数据包的正确传输,也就是说接收端在没有收到数据包或者收到错误的数据包的时候会触发发送端的数据包重传(处理比特错误和丢包)
-
包乱序(packet reordering) -- TCP接收端会缓存接收到的乱序到达数据,重排序后在向应用层提供有序的数据(处理包乱序)
-
包重复(packet duplication)
-
丢包(packet erasure或称为packet drops) -- 也是通过超时重传解决,TCP发送端会维持一个发送"窗口"动态的调整发送速率以适用接收端缓存限制和网络拥塞情况,避免了网络拥塞或者接收端缓存满而大量丢包的问题(降低丢包率)
-
因此可靠性需要TCP协议具有超时与重传管理、窗口管理、流量控制、拥塞控制等功能。
-
-
字节流式:应用层发送的数据会在TCP的发送端缓存起来分片或者打包,到接收端的时候接收端也是直接按照字节流将数据传递给应用层
-
统一分片:例如一个应用层的数据包分成两个TCP包
-
打包:例如两个或者多个应用层的数据包打包成一个TCP数据包
-
TCP帧格式¶
TCP header¶
TCP封装在IP报文中的时候,如下图所示,TCP头紧接着IP头(IPV6有扩展头的时候,则TCP头在扩展头后面),不携带选项(option)的TCP头长为20bytes,携带选项的TCP头最长可到60bytes。

其中不携带选项的TCP头如下图所示(其中阴影部分的四个字段表示了相反方向的数据流信息),其中header length字段由4比特构成,最大为15,单位是32比特(32-bit word),即头长的最大值为15*32 bits = 60bytes,因此上面说携带选项的TCP头长最长为60bytes。

SN序列号¶
参考资料¶
- TCP系列01—概述及协议头格式
- [http连接,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断?](https://blog.csdn.net/weixin_39366864/article/details/104552012
- 如何用10000行代码写TCP/IP协议栈?
- github diy-TCP-IP-protocol
- TCP segment of a reassembled PDU - 小西红柿 - 博客园