目录
1. TCP协议格式
如图:
① 32位序号:该条TCP数据所携带的起始序号。
② 32位确认序号:期望对方发送数据从哪一个序号开始发送。
③ 4位首部长度:最大是0xF(15),指的是TCP头部的长度。
首部长度 = 4位首部长度(DEC) * 4 ,单位为Byte。
注:DEC:表示十进制的数字。
④ 6个标志位:(6个比特位)
URG
:紧急标志位(直接越过发送缓冲区等待的数据优先传输到网络层,一般配合底下的16位紧急指针使用)ACK
:确认标志位PSH
:发送数据标志位RST
:重置连接标志位(当无法识别对方发来的连接请求时,就会使用RST标志位),换句话说,当连接双方X、Y要断开连接时,X方认为连接已经断开了,Y方却认为连接还没有断开,这个时候,当Y给X发送数据包时,X就会回复带有RST标志位的数据包给YSYN
:发起连接标志位FIN
:断开连接标志位(连接双方有一方想要断开这种连接关系,称为断开)
⑤ 16位窗口大小:告知消息发送方,自己对消息的接收能力时多少,这个值是动态变化的。
⑥ 16位检验和:校验数据在传输过程中是否失真。
⑦ 16位紧急指针:配合URG标志位发送带外数据。(紧急的数据)
⑧ MSS:最大报文段长度(MAX Segmet Size)
- 在三次握手过程中,双方协商MSS的大小,取两者的最小值。
就拿上篇文章中抓到的包进行分析:
连接双方会在三次握手期间对MSS进行相应的协商。
- 为什么要协商最大报文段长度?
防止报文过大,在网络当中传输的时候,数据丢失导致重传。(为了不让其频繁的重传)
- MSS的大小会受到数据链路层MTU的影响
MTU:最大传输单元,是网卡在传输数据帧的时候的一个限制值,这个限制值是取决于网络传输设备的电气特性。(我们可以使用
ifconfig
命令中看到MTU的大小,一般在网络中传输的基本都是1500字节)
- MSS + tcpHeader + ipHeader <= MTU,这是一个特性。
2. TCP的可靠传输机制
本小节出现的相关的图片均来自《图解TCPIP》第五版。
TCP是一个“聪明的”协议,为了保证它的可靠传输,我们要从两个方面来看:
- 保证数据可靠有序的到达对端
- 提高传输效率
2.1 确认应答(ACK)机制
TCP通过肯定的确认应答(ACK)实现可靠的数据传输。当发送端将数据发出之后会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大。
在一定时间内没有等到确认应答