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
端口
TCP首部有源端口和目的端口,各占2字节,TCP分用功能也是通过端口实现的
Think different
- 对于2字节的思考:因为TCP处于运输层,这里端口号最大为 -1= 65535,故处于上层的应用层肯定要遵守底层的约束,最大端口号也只能为65535,范围[0,65535]
- 分用和复用的概念
序号
概念:本报文段所发送的数据的第一个字节的序号
范围:占4个字节,[0, ),
eg:M1 序号:301 数据长度100byte
表示: M1报文的数据的第一个字节序号为301,最后一个字节序号为400,所以下一个报文如果有的情况下需要应该是401,所以这个字段也叫报文段序号
Think different
- 序号用完了怎么办?①又从0开始 ②通过选项解决
确认号
概念:期望收到对方下一个报文段的第一个数据字节的序号 【不重要】
范围: 占4个字节,[0, )
记住一点:假设收到的确认号 = N,表示 N - 1 为止的所有数据都已经正确收到
数据偏移
概念:TCP报文段数据起始处距离报文开始位置有多远【不重要】
记住:数据偏移其实就是TCP报文的首部长度
范围: 占4位, [5,16]
注意:数据偏移的单位为32位,即是4个字节为计算单位
Think different
由上面可以知道,TCP报文首部的的大小范围为[20,60字节]
Minimum = 20 byte,肉眼可见
Maximum = = 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, )
校验和
用于校验TCP首部和数据部分的,具体规则...
选项
可变长度,最大60-20=40个字节
MSS
MSS 全称 Maximum Segment Size 中文 最大报文段长度
含义:每个TCP报文段中数据字段的最大长度
所以MSS并不是整个报文的最大长度 TCP message = header + body
Think different
为什么要规定MSS呢?提高网络利用率,尽可能降低开销
细说...
两个极限:
-
1字节数据 20 20 网络利用率不到41/1,网络利用率低
-
n非常多数据,网络层1000,n分块,传输 ---> 装配成原来的TCP报文,开销大
折中方案:MSS 在网络层允许不分块的情况下,尽量大,A B
填充
填充就是为了使首部满足4n,没有其他作用