传输控制协议
封包結構

| 偏移> 位元組 | 位元組> 位元 | 0 | 0>  1 | 0>  2 | 0>  3 | 0>  4 | 0>  5 | 0>  6 | 0>  7 | 1>  8 | 1>  9 | 1> 10 | 1> 11 | 1> 12 | 1> 13 | 1> 14 | 1> 15 | 2> 16 | 2> 17 | 2> 18 | 2> 19 | 2> 20 | 2> 21 | 2> 22 | 2> 23 | 3> 24 | 3> 25 | 3> 26 | 3> 27 | 3> 28 | 3> 29 | 3> 30 | 3> 31 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 |  0 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 來源連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 | 目的連接埠 |
| 4 | 32 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 | 序列號碼 |
| 8 | 64 | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） | 確認號碼（當ACK設定） |
| 12 | 96 | 資料偏移 | 資料偏移 | 資料偏移 | 資料偏移 | 保留 0 0 0 | 保留 0 0 0 | 保留 0 0 0 | N S | C W R | E C E | U R G | A C K | P S H | R S T | S Y N | F I N | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 | 窗口大小 |
| 16 | 128 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 校验和 | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） | 緊急指標（當URG設定） |
| 20 ... | 160 ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... | 選项（如果資料偏移 > 5，需要在結尾添加0。） ... |
來源連接埠（16位元長）－辨識傳送連接埠
目的連接埠（16位元長）－辨識接收連接埠
序列號（seq，32位元長）
如果含有同步化旗標（SYN），則此為最初的序列號；第一個資料位元的序列碼為本序列號加一。
如果沒有同步化旗標（SYN），則此為第一個資料位元的序列碼。
确认號（ack，32位元長）—期望收到的数据的开始序列号。也即已经收到的数据的字节长度加1。
資料偏移（4位元長）—以4字节为单位计算出的数据段开始地址的偏移值。
保留（3位元長）—须置0
標誌符（9位元長）
NS—ECN-nonce。ECN显式拥塞通知（Explicit Congestion Notification）是对TCP的扩展，定义于 RFC 3540 （2003）。ECN允许拥塞控制的端对端通知而避免丢包。ECN为一项可选功能，如果底层网络设施支持，则可能被启用ECN的两个端点使用。在ECN成功协商的情况下，ECN感知路由器可以在IP头中设置一个标记来代替丢弃数据包，以标明阻塞即将发生。数据包的接收端回应发送端的表示，降低其传输速率，就如同在往常中检测到包丢失那样。
CWR—Congestion Window Reduced，定义于 RFC 3168（2001）。
ECE—ECN-Echo有兩種意思，取決於SYN標誌的值，定义于 RFC 3168（2001）。
URG—为1表示高优先级数据包，緊急指標字段有效。
ACK—为1表示确认号字段有效
PSH—为1表示是带有PUSH标志的数据，指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
RST—为1表示出现严重差错。可能需要重新建立TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。
SYN—为1表示这是连接请求或是连接接受请求，用于建立连接和使顺序号同步
FIN—为1表示发送方没有数据要传输了，要求释放连接。
窗口（WIN，16位元長）—表示从确认号开始，本报文的发送方可以接收的字节数，即接收窗口大小。用于流量控制。
校验和（Checksum，16位元長）—对整个的TCP报文段，包括TCP头部和TCP数据，以16位字进行计算所得。这是一个强制性的字段。
緊急指標（16位元長）—本报文段中的紧急数据的最后一个字节的序号。
選项字段—最多40字节。每个选项的开始是1字节的kind字段，说明选项的类型。
0：选项表结束（1字节）
1：无操作（1字节）用于选项字段之间的字边界对齐。
2：最大报文段长度（4字节，Maximum Segment Size，MSS）通常在建立连接而设置SYN标志的数据包中指明这个选项，指明本端所能接收的最大长度的报文段。通常将MSS设置为（MTU-40）字节，携带TCP报文段的IP数据报的长度就不会超过MTU（MTU最大长度为1518字节，最短为64字节），从而避免本机发生IP分片。只能出现在同步报文段中，否则将被忽略。
3：窗口扩大因子（3字节，wscale），取值0-14。用来把TCP的窗口的值左移的位数，使窗口值乘倍。只能出现在同步报文段中，否则将被忽略。这是因为现在的TCP接收数据缓冲区（接收窗口）的长度通常大于65535字节。
4：sackOK—发送端支持并同意使用SACK选项。
5：SACK实际工作的选项。
8：时间戳（10字节，TCP Timestamps Option，TSopt）
发送端的时间戳（Timestamp Value field，TSval，4字节）
时间戳回显应答（Timestamp Echo Reply field，TSecr，4字节）
19：MD5摘要，将TCP伪首部、校验和为0的TCP首部、TCP数据段、通信双方约定的密钥（可选）计算出MD5摘要值并附加到该选项中，作为类似对TCP报文的签名。通过 RFC 2385  引入，主要用于增强BGP通信的安全性。
29：安全摘要，通过  RFC 5925 引入，将“MD5摘要”的散列方法更换为SHA散列算法。