TCP毫无疑问是传输层最重要的协议,当今互联网的基石,当然随着基于UDP的QUIC协议的发展,其在不少应用场景有取代TCP的趋势,TCP相对与UDP在当前电信运营商具有更高优先级,这势必也限制了QUIC的应用。
TCP(Transmission Control Protocol,传输控制协议),rfc793,传输主要体现在传输层协议,控制主要在于面向连接、可靠的、拥塞控制等特性,TCP通常被称为面向连接的可靠协议也正是由于这些特性,这里主要介绍一下tcp的基础。
TCP Header
tcp包通常称为Segment,每个tcp Segment都包含如上图的TCP Header和数据段,TCP Header各bits定义如下:
比特位 | 字节数 | 名称 | 描述 |
0~15 | 2 | Source Port | 源端口号 |
16~31 | 2 | Destination Port | 目的端口号 |
32~63 | 4 | Sequence Number | 序列号 |
64~95 | 4 | Acknowledge Number | 确认号 |
96~99 | 0.5 | Data Offset | 数据相对位置 |
100~103 | 0.5 | Reserved | 保留(全0) |
104~111 | 1 | TCP Flags | 报文标识(见图中解释) |
112~127 | 2 | Window | 用于ACK包中的rwin大小 |
128~143 | 2 | Checksum | 校验和 |
144~159 | 2 | Urgent Pointer | 紧急数据位置(配合Urgent标识) |
160~160/479 | 0~40 | TCP Options | 可变选项 |
由上面可知TCP Header由固定的20字节+0~40字节的Options组成,所以TCP Header最长为60字节
TCP Options
常见TCP Options如下几种:
Kind(Type) | Length | Name | RFC | 描述 & 用途 |
0 | 1 | EOL | RFC 793 | 选项列表结束 |
1 | 1 | NOP | RFC 793 | 无操作(用于补位填充) |
2 | 4 | MSS | RFC 793 | 最大Segment长度 |
3 | 3 | WSOPT | RFC 1323 | 窗口扩大系数(Window Scaling Factor) |
4 | 2 | SACK-Premitted | RFC 2018 | 表明支持SACK |
5 | 可变 | SACK | RFC 2018 | SACK Block(收到乱序数据) |
8 | 10 | TSPOT | RFC 1323 | Timestamps |
19 | 18 | TCP-MD5 | RFC 2385 | MD5认证 |
28 | 4 | UTO | RFC 5482 | User Timeout(超过一定闲置时间后拆除连接) |
29 | 可变 | TCP-AO | RFC 5925 | 认证(可选用各种算法) |
253/254 | 可变 | Experimental | RFC 4727 | 保留,用于科研实验 |
TCP Option结构通常称为TLV,如下:
Kind / Type(1 Byte)| Length(1 Byte)| Value
TCP wireshark抓包
TCP Header with P4 Lang
header tcp_h {
bit<16> srcPort;
bit<16> dstPort;
bit<32> seqNo;
bit<32> ackNo;
bit<4> dataOffset;
bit<4> res;
bit<8> flags;
bit<16> window;
bit<16> checksum;
bit<16> urgentPtr;
}
本文暂时没有评论,来添加一个吧(●'◡'●)