其他分享
首页 > 其他分享> > 5.5 TCP报文段的首部格式

5.5 TCP报文段的首部格式

作者:互联网

1.TCP报文段首部的长度
TCP报文段首部由固定的20个字节与4n个可选字节构成

2.TCP报文首部各字段介绍
(1)源端口与目的端口 (20-2*2)
各占2个字节,实现传输层的复用与分用功能

(2)序号(20-2*2-4)
占4字节, 本报文段所发送数据(不包括首部)的第一个字节的编号

一个报文段序号值为X,发送长度为N的报文段,
本报文段数据部分最后一个字节的序号为X+N-1
下一个报文段的序号为X+N(注意是X+N,X+N,X+N,别弄错了!!!)

例1. 主机A向主机B连续发送了两个TCP报文段,其序号为50和90,问
1> 第一个报文段携带了多少字节?
50 + N = 90
N = 40

(3)确认号(ack)(20-2*2-4-4)
注意:确认号一般小写ack,确认字段一般大写ACK
占4字节,期望收到对方下一个报文段的第一个数据字节的序号。
收到一个报文段序号值为X,长度为N的报文段,
该报文段数据部分最后一个字节的序号为X+N-1
应当返回的报文段的确认号为X+N(注意是X+N,X+N,X+N,别弄错了!!!)

例1.2>主机收到第一个报文段后发回的确认中确认号是多少?
50 + 40 = 90
3>主机B收到第二个报文段后发回的确认中确认号为220,试问A发送第二个报文段长度?
90 + N = 220
N = 130
4>如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后应发送的确认号为多少?
B希望按序到达第一个报文段,故确认号 = 50, 与第二个报文段无关。

(4)数据偏移(20-2*2-4-4-0.5)
占4位(不是4个字节),表示首部长度。

(5)保留位(20-2*2-4-4-0.5-0.75)
占6位,全0

(6)紧急位(20-2*2-4-4-0.5-0.75-0.125)
占1位,
cmd命令行中Ctrl+C终止批处理命令就是发送的紧急位为1的数据报
与紧急指针配合,将紧急内容前置

(7)确认ACK(20-2*2-4-4-0.5-0.75-0.125-0.125 = 6.5)
占1位,
ACK = 1时使得确认号生效,ACK = 0时确认号无效
TCP建立连接后,ACK = 1

(8)推送(PSH)(20-2*2-4-4-0.5-0.75-0.125-0.125-0.125 = 6.375)
占1位,尽快交付,不要过缓存区

(9)复位(RST)(20-2*2-4-4-0.5-0.75-0.125-0.125-0.125-0.125 = 6.25)
占1位,重开

(10)同步(SYN)(20-22-4-4-0.5-0.75-0.1255 = 6.125)
占1位,
SYN = 1, ACK = 0: 请求建立TCP连接
SYN = 1,ACK = 1:TCP连接建立

(11)终止(FIN)(20-22-4-4-0.5-0.75-0.1256 = 6)
FIN = 1:请求释放TCP连接

(12)窗口(20-22-4-4-0.5-0.75-0.1256-2 = 4)
占2字节,指接收窗口,指导对方设置其发送窗口,即限制对方发送报文段长度

(13)校验和(20-22-4-4-0.5-0.75-0.1256-2-2 = 2)
占2字节,通过4字节伪首部,分别校验首部与数据

(14)紧急指针(20-22-4-4-0.5-0.75-0.1256-2-2-2 = 0)
占2字节,指明紧急数据位置

(15)可选字段
最大报文长度MSS:尽可能提高数据部分占比,又不至于在IP层分成过多的分组

标签:20,5.5,0.125,报文,0.5,TCP,0.75,字节
来源: https://www.cnblogs.com/Guo-Guo-best/p/15755758.html