参考书籍:TCP-IP详解
本文主要介绍TCP的头部与选项
TCP的头部
TCP属于协议层的第三次,封包被称为segment,现在主要来看下TCP头部的格式,如下图
一般情况下TCP Header 的长度为20个字节,没有TCP Options
由上图,需要注意的地方:
1. TCP layer 没有IP地址的概念,那个是IP 层的,所以前4个字节是源端口和目的端口
2. Sequence Number:传输数据过程中,为每一个封包分配一个序号,保证网络传输数据的顺序性
3. Acknowledgment Number:用来确认确实有收到相关封包,内容表示期望收到下一个报文的序列号,用来解决丢包的问题
4. TCP Flags:这部分主要标志数据包的属性,比如SYN,RST,FIN等,操控TCP的状态机
5. Window:滑动窗口,主要用于解决流控拥塞的问题
6. Checksum:校验值
7. Urgent Pointer:紧急指针,可以告知紧急的数据位置,需要和Flag的U flag 配合使用
8. TCP Options:一般包含在三次握手中,有Option的选项!
在tcpdump抓出来的TCP Header如下图
TCP Option
每个选项的开始都是1个Byte的kind字段,说明选项的类型,Kind为0/1的时候,选项只占1个Byte,其他选项在kind字段后面还有len字节,说明总长度包括kind和len的字节。看下图
从图中我们可以看到
0. 代表选项表结束
1.代表无操作
2.代表MSS
3.代表窗口扩大银子
8.代表时间戳
其他的kind值为4/5/6/7 四个选项被称为选择ACK及回显选项,目前回显选项已经被时间戳给代替!
下面来看下在SYN上显示的TCP选项
<mss 512, nop, wscale 0, nop, nop, timestamp 146647 0>
从图中可以看到:
0~3 Byte : MSS 512
4~7 Byte : nop,wscale 0
8~11Byte:nop,nop,timestamp
12~15 Byte:146647
16~19 Byte:0 最少4个字节对齐
在tcpdump抓出的解析是这样的:
<mss 1460, nop, wscale 8, nop, nop, sack>