一、引言
TCP协议(Transmission Control Protocol 传输控制协议)不同于UDP协议,它是一个面向连接(一对一)的,可靠(做了差错控制)的字节流(不限长度)服务。TCP的可靠性通过下面方式来控制:
- 将应用数据分割成TCP认为最合适长度的数据块。减少IP层的分片现象的发生。
- 当TCP发送一份数据包后,它启动一个定时器,等待目的端确认收到这份数据包。如果不能及时收到一个确认,将重发该数据包。确定对方收到数据了。
- 当TCP接收端收到一个数据包时候,会发送一份确认数据包。告诉对方已经收到数据了。
- TCP将对它的首部和数据部分做校验和。防止传输中出错。
- TCP会对收到的数据进行排序,按照正确的顺序提交给应用。
- TCP会抛弃重复的数据。
- TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。
二、TCP数据包结构
TCP数据包是封装在IP数据包中的
![](https://img.haomeiwen.com/i301894/21ce8642fb45094c.png)
TCP首部,如果不计算任选字段,通常为20个字节。
![](https://img.haomeiwen.com/i301894/91bbef4c478c8a38.png)
- 每个TCP段都包含源端和目的端的端口号。
- 序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。序号字段包含由这个主机选择的该连接的初始序号ISN(Initial Sequence Number)。
- 既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。
- 首部长度给出首部中32bit(一个字,两个字节)的数目。长度为4bit。需要这个值是因为任选字段的长度是可变的。
- 在TCP首部中有6个标志比特。
- URG:紧急指针( urgent pointer)有效。
- ACK:确认序号有效。
- PSH:接收方应该尽快将这个数据包交给应用层。
- RST:重新建立连接。
- SYN:同步序号用来发起一个连接。只有在三次握手的时候才会有。
- FIN:发送端完成发送任务。只有在结束时候才有。
- 窗口大小:TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。
- 检验和:覆盖了整个的 TCP数据包。
- 紧急指针:当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
- 最常见的可选字段是最长报文大小,又称为 MSS(Maximum Segment Size)。
都看到这里了,要不要扫二维码关注一下微信公众号林湾村龙猫。
![](https://img.haomeiwen.com/i301894/ee631c25c457434a.png)
网友评论