TCP首部一文搞定,从此再也不怕面试官问

93 阅读2分钟

TCP,全称 Transission Control Protocol,中文名 传输控制协议

属于运输层协议,基于连接的,可靠的,面向字节流的

一句话概括TCP:TCP是基于连接的,可靠的,面向字节流的 运输层 协议

注意:TCP是一个非常复杂的协议,即使是书本也无法尽数说明里面的东西,我们这里只是对TCP重要部分做讲解。

点对点,点:socket,套接字,TCP连接:: = {socket1,socket2} = {(ip1,port1),{ip2,port2}}

首部

如果说有看过我上期OSI分层架构||TCP分层架构||5层架构的视频或者文章的话,就会知道,应用层,运输层,网络层都是添加了自己的头部,所以理解并掌握TCP报文头部是我们深入TCP的重中之中

1个字节 = 8位 1byte = 8bit

UML 图 (1).jpg

端口

TCP首部有源端口和目的端口,各占2字节,TCP分用功能也是通过端口实现的

Think different

  1. 对于2字节的思考:因为TCP处于运输层,这里端口号最大为 2162^{16} -1= 65535,故处于上层的应用层肯定要遵守底层的约束,最大端口号也只能为65535,范围[0,65535]
  2. 分用和复用的概念

序号

概念:本报文段所发送的数据的第一个字节的序号

范围:占4个字节,[0, 2322^{32} ),

eg:M1 序号:301 数据长度100byte

表示: M1报文的数据的第一个字节序号为301,最后一个字节序号为400,所以下一个报文如果有的情况下需要应该是401,所以这个字段也叫报文段序号

UML 图 (2).jpg Think different

  1. 序号用完了怎么办?①又从0开始 ②通过选项解决

确认号

概念:期望收到对方下一个报文段的第一个数据字节的序号 【不重要】

范围: 占4个字节,[0, 2322^{32} )

记住一点:假设收到的确认号 = N,表示 N - 1 为止的所有数据都已经正确收到

数据偏移

概念:TCP报文段数据起始处距离报文开始位置有多远【不重要】

记住:数据偏移其实就是TCP报文的首部长度

范围: 占4位, [5,16]

注意:数据偏移的单位为32位,即是4个字节为计算单位

Think different

由上面可以知道,TCP报文首部的的大小范围为[20,60字节]

Minimum = 20 byte,肉眼可见

Maximum = 24  42^{4} * 4 = 60 byte

保留

有6位是保留位,暂时没用为0

紧急指针

当URG = 1有效,占用2个字节 301

概念:指出本报文段中,紧急数据的字节数,后面的都为普通数据。

指出的是紧急数据末尾在报文段的位置,当处理完紧急数据,TCP就会告诉应用程序恢复正常操作

注意:即使窗口为0,也可以发送紧急数据 -- 生命线

URG

URG = 1,表明紧急指针字段有效

Eg: 已经发送一大段数据在远程主机上运行,但是突然发现有问题,需要取消该程序的运行,所以我按下了ctrl+c,此时如果还是使用普通的报文传输,就会被放到缓冲队列的最后面,只有前面的所有请求都被响应了,才会执行中断,这样会浪费大量的时间,所以我们需要使用URG,他会告诉系统此报文中有紧急数据,应尽快传送而不是按照原排队顺序传送。

ACK

当ACK = 1时确认号字段才有效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1

PSH

使用场景 AP1键入的命令能立即收到AP2的响应,这种情况下,可以使用TCP的推送操作

RST

RST=1,释放连接,然后重新建立连接,拒绝非法报文段或拒绝打开一个连接

SYN

连接建立时用于同步序号seq 确认号:ack

SYN=1,ACK=0,请求连接的报文

FIN

释放一个连接,FIN = 1,表示此段报文段发送方已发送完毕并要求释放运输层连接

窗口

概念:发送本报文段的一方的接收窗口....[不重要]

记住:窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常在动态变化的

范围:2个字节, [0, 2162^{16} )

校验和

用于校验TCP首部和数据部分的,具体规则...

选项

可变长度,最大60-20=40个字节

MSS

MSS 全称 Maximum Segment Size 中文 最大报文段长度

含义:每个TCP报文段中数据字段的最大长度

所以MSS并不是整个报文的最大长度 TCP message = header + body

Think different

为什么要规定MSS呢?提高网络利用率,尽可能降低开销

细说...

两个极限:

  1. 1字节数据 20 20 网络利用率不到41/1,网络利用率低

  2. n非常多数据,网络层1000,n分块,传输 ---> 装配成原来的TCP报文,开销大

折中方案:MSS 在网络层允许不分块的情况下,尽量大,A B

填充

填充就是为了使首部满足4n,没有其他作用