欢迎来到天天文库
浏览记录
ID:43463730
大小:140.92 KB
页数:5页
时间:2019-10-03
《tcp 报文格式分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、TCP报文段格式 源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。 序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。 确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。 数据偏移——占4bit,它指出TCP报文段的数据起始处距离CP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。 保留字
2、段——占6bit,保留为今后使用,但目前应置为0。 紧急比特URG——当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。 复位比特RST(Reset)——当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。 同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。 终止比特FIN(F
3、INal)——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。 窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。 检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。 紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。 选项字段——长
4、度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。 填充字段——这是为了使整个首部长度是4字节的整数倍。选项字段[2]TCP选项部分很好出现在已经建立连接的会话中,只要出现在TCP连接建立阶段,即三次握手。TCP选项部分实际运用有以下几种:(1)最大报文传输段(MMS,MaximumSegmentSize)用于发送发与接收方协商最大报文段长度(仅仅是净荷数据,不包括TCP首部字段)。TCP在三次握手中,每一方都会通告期望收到的MSS(MSS只出现在SYN数据包中),
5、如果一方不接受另一方的MSS值,则使用默认的536字节净荷数据,即主机能够接受20+536字节的TCP报文段。(2)窗口扩大选项(Windowscaling)TCP报文的窗口大小字段占16位,即最大值是65535,但随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口满足性能和吞吐率,这就是窗口扩大选项存在的意义。例子见参考资料[2]。Windowsscaling占3个字节,最后一个字节是移位值(Shiftcount),即首部的窗口位数16向左移动,如移位值为14,则新的窗口最大值增大到65535*(2
6、^14)。窗口扩大选项是在TCP建立之初进行协商,如果已实现了窗口扩大,当不再需要扩大窗口时,发送移位值=0就可以恢复到原窗口大小,即65535。(3)选择确认选项(SACK,SelectiveAcknowledgements)考虑这样情况,主机A发送报文段12345,主机B收到135且报文无差错,SACK用来确保只重传缺少的报文段,而不是重传所有报文段。SACK选项需要2个功能字节,一个用来指明使用SACK选项(SACKPermission),另一指明这个选项占多少字节。那怎么形容丢失的报文段2,说明2的左右
7、边界分别是1、3。TCP的数据报文是有字块边界的,而这种边界是由序列号表示的。最多能指明多少个字节块的边界信息呢?答案是4个。这是因为选项字段最大是40字节,去除2个功能字节,序列号是32位即4字节,并且需要左右边界,所以(40-2)/8=4。(4)时间戳选项(timestamps)时间戳选项用来计算往返时间RTT,发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收方将该时间戳字段的值复制到确认报文中,当接收方收到确认报文,对比确认报文的时间戳(等于发送方发送报文段的时间戳)和现在的时钟,即可算出RTT
8、。时间戳选项还可用于防止回绕序号PAWS。序列号只有32位,每2^32个序列号就会回绕(想想环形队列),采用时间戳选项很容易区分相同序列号的报文段。(5)NOP(NO-Operation)TCP的头部必须是4字节的倍数,而大多数选项不是4字节倍数,不足的用NOP填充。除此之外,NOP也用于分割不同的选项数据,如窗口扩大选项和SACK之间使用NOP隔离
此文档下载收益归作者所有