说一说TCP报文头?

报文头详解

在这里插入图片描述

1.SourcePort-源端口

发起请求的端口,占两个字节

2.DestinationProt-目的端口

被请求的端口,占两个字节

3.SequenceNumber-Seq序列号

占四个字节
Seq隐式的为报文段中携带的所有数据字节,标记了序号


举例:
传输一段报文
报文的序列号是101,那么报文所携带的数据,其中第一个字节的序列号就是101
报文携带的数据长度是100字节,那么每一个字节的隐式序列号为(101,102…199,200—共100个字节)
那么下一段报文的序列号就是201

4.AcknowledgementNumber-Ack确认号

占四个字节
通知对方,下一个报文的第一个字节的序列号应该是什么
只是通知无法强制(请看举例2)


举例1:
C 向 S 发起请求,要下载一个 1073741824KB(1G) 的毛BT
传输过程中,C已经收到了数据 0KB-100KB,101KB-200KB ,201KB-300KB,301KB-400KB
那么接下来C发出的ACK确认号,就应该是 401


举例2
C 向 S 发起请求,要下载一个 1073741824KB(1G) 的毛BT
传输过程中,C已经收到了数据 0KB-100KB,(这块没收到) ,201KB-300KB,301KB-400KB
S就是不给 101KB-200KB
此时面对这种失序到达的情况,有两种处理方法
1.丢弃失序报文
2.保留失序报文,并等待剩余报文传输完成 (应该用这个方法)

5.Offset-数据偏移

报文携带的数据,距离报文起始处有多远

6.Reserved-保留域

目前来看,都是0

7.TCP Flags-状态

SYN 同步序号,用于建立连接过程
ACK 确认序号标志(0-忽略)(1-有效)
FIN finish标志 用于释放连接(1-发送方已经没有数据了,本方可以关闭)
URG 紧急指针标志(0-忽略)(1-有效)
PSH push标志,告知接收方接到数据后,应该尽快交给应用程序,而不是在缓冲区排队
RST 重置连接标志

8.window-滑动窗口

基于窗口大小控制数据的发送速率

9.Checksum-校验和

发送端 对报文执行计算后传递
接收端 进行接收时校验

10.UrgentPointer-紧急指针

指出报文段中紧急数据的字节数
只有当 TCP Flags 中的URG=1时生效

11.TCP Options-可选项

长度可变,用来定义一些可选参数

《TCP详解》

《TCP的三次握手详解》



白嫖不点赞吗.........

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章