目录
一、介绍TCP报文段首部:
TCP报文段主要是两个部分,一个是首部一个是数据部分。首部除了20字节的固定部分还包括选项(长度可变的字段)和填充字段(保证Tcp首部字节为4的整数倍,一般填充的都是全0字段)。
图示:
二、详解:
1、端口号:占的位数是16位,那么源端和目的端口占的位数为32位即4个字节。
2、序号(seq)位:占的是4字节。
序号:在一个TCP连接中传送的字节流中的的每一个字节都按照顺序编号,本字节段表示本报文段所发送数据的第一个字节的序号。
例如:报文的第一个字节是几对应的序号字段就是几。
3、确认号:占4字节,期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都以正确收到。
首先报文段在链路上传输
接着报文段到达接收端的TCP缓存中
接收方要向发送方回复一个新的确认,这样发送方才会发送一个新的报文段。
现在接收端收到123的报文段之后会向发送方返回一个确认报文段,确认报文段的首部会有一个确认号字段(是期待对方下一个要发送报文段的第一个字节),现在收到123,接下来希望收到4字节,那么确认号字段就是4,并且4字节之前的已成功收到。
4、数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远,4B位单位,即1个数值是4B。
5、六个控制位:
(1)紧急位URG:URG=1时,标明此报文段中有紧急数据,是高级优先的数据,应尽快传送,不用在缓存中排队,配合紧急指针字段使用。
(2)确认位ACK:ACK=1时确认号有效,在连接建立后所有传达的报文段都必须把ACK置为1。
(3)推送位PSH:PSH=1时,接收方尽快交付接受应用进程,不再等到缓存填满再向上交付。
(4)复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接,也可以拒绝非法的连接。
(5)同步位SYN:SYN = 1时,表明是一个连接请求/连接接受报文。
(6)终止位FIN:FIN=1时,表明此报文段发送方数据已发完,要求释放连接。
6、窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量。
7、检验和:检验首部+数据,检验时要加上12字节的伪首部,第四个字段(协议字段)为6。
8、紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数。
9、选项:是一个长度可变的字段,最大报文段长度MSS(每一个TCP报文段中数据字段的长度)、窗口扩大、时间戳、选择确认....
10、填充:如果最后选项字段不是4字节的整数倍那么就填充到4字节的整数倍。
注:参考资料--王道考研。