说一说TCP报文头?
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的三次握手详解》
白嫖不点赞吗.........