0
点赞
收藏
分享

微信扫一扫

网络原理之TCP

秀儿2020 2023-08-19 阅读 78

TCP(Transmission Control Protocol) 传输控制协议 :对数据的传输进行详细的控制

TCP协议段格式

网络原理之TCP_TCP

TCP报文 = TCP报头 + TCP载荷

选项之前的长度固定20个字节

TCP并不像UDP长度固定8个字节,长度不固定

首部长度:描述Tcp报头具体有多长 

选项:相当于对TCP报文的一些属性进行解释说明

TCP报头长度 = 首部长度值 * 4 (字节);

选项长度 = 首部长度 - 20 字节

保留: 保不齐以后要有,先占个位置

TCP为什么要保留?

为了以后的扩展做准备

对于网络协议来说,进行扩展升级成本是极高的,全世界有几百亿的上网设备,想要升级,就需要对这些设备的操作系统同步升级,都支持升级后的协议.

TCP的内部一些工作机制 

10个比较核心的机制

一.确认应答

网络原理之TCP_TCP_02

由于网络延时,收到的信息可能存在变数

网络原理之TCP_TCP_03

网络上后发先至是客观存在的,那我们如何来避免?

网络原理之TCP_数据_04

我们引入了序号,即使当前的数据乱了,也能根据序号,区分当前应答报文针对哪一个数据

网络原理之TCP_TCP_05

任何一条数据都是有序号的

只有应答报文(ACK)才有确认序号,而普通报文在确认序号字段无意义

ACK标志位为1是表示该报文是应答报文, 标志位为0是表示该报文就不是应答报文

网络原理之TCP_TCP_06

主机1 对 主机2 发送一个消息,主机2收到后就会返回一个应答报文(ACK),主机1收到应答后,才能知道主机2收到了刚才发的数据

TCP的字节序号是依次累加的,每一个TCP数据报报头填写的序号只需要写TCP数据的头一个字节的序号即可

TCP进行可靠传输,最主要的就是靠确认应答机制,通过应答报文可以让发送方知道是否传输成功

进一步引入序号,确认序号,对多组数据进行区分

二.超时重传

如果发生丢包(发的数据丢了 或者返回的ACK丢了), 丢包是一个概率性事件,那么重新发送一下数据报,是有极大的概率传输成功的

超时重传:超过一定时间未响应就重新传输

那么对于多次传输的数据TCP是有去重的功能

TCP存在一个 接收缓冲区 这样的一个存储空间(接收方操作系统的一段内核)

根据数据的序号,TCP很容易识别当前接收缓冲区里的两条数据是否重复,如果重复直接把后来的数据丢掉,保证应用程序读取到的数据一定是不重复的

TCP使用接收缓冲区,对收到的数据进行重新排序,保证应用程序读到的数据是有序的

重传到达一定的次数时就不会重传了,认为网络出现了故障,TCP接下来会尝试重置连接,如果重置失败就彻底断开连接

可靠传输是TCP最核心的部分

TCP通过确认应答和超时重传体现可靠传输的,

其中确认应答描述的是传输顺利的情况,而超时重传描述的是传输出现问题的情况,

两者相互配合,共同支撑整体TCP的可靠性


三.连接管理

网络原理之TCP_TCP_07

TCP的建立连接的过程(三次握手)

网络原理之TCP_TCP_08


网络原理之TCP_TCP_09


本质进行四次信息传递,当时中间两次一定要进行合并(封装封装分用两次肯定比一次封装分用成本更高)

网络原理之TCP_数据_10

服务器的系统内核接收到SYN后,会立即发送ACK,已经SYN;

三次握手的意义:

1.让通信双方各自建立对对方的"认同"

2.验证各自的发送能力和接收能力是否完整

3.在握手过程中,双方协商一些重要参数

而在TCP通信过程中需要通信双方之间相互同步,就可以利用三次握手的机会进行数据的同步

断开连接过程(四次挥手)

网络原理之TCP_TCP_11


CLOSE_WAIT:阻塞等待客户端数据请求

TIME_WAIT:出现主动断开连接的一方

如果客户端是主动断开连接的,那么出现TIME_WAIT表示4次挥手结束 ,

对于TIME_WAIT最大等待时间,约定2MSL(两个节点之间数据传输消耗的最大时间) 通常情况下MSL为60s

如果最后一个ACK丢包怎么办?

三次连接和四次挥手都会超时重传,TIME_WAIT等待一段时间,就是为了处理最后一个ACK丢包的情况,能够收到重传的FIN后,进行ACK响应

四.滑动窗口

在保证可靠性的基础上,加强传输效率

滑动窗口本质上:降低确认应答,等待ACK消耗的时间, 不需要等待,批量发送一组数据,然后用一份时间,等待多条数据的ACK应答报文

窗口大小:不需要等待就能直接发送最大的数据量

网络原理之TCP_数据_12

此时2000就是窗口大小

丢包

1.ACK丢了

网络原理之TCP_数据_13

不需要做任何事情

确认序号:表示该序号往前的所有数据都已经确认到达

只要后面结束到ACK 确认序号4001 就包含了前面的ACK信息

2.数据丢了

网络原理之TCP_数据_14

若1001~2000丢包,那么接下来2001~3000下次返回的ACK确认序号还是1001

收到三次同样的确认应答时 发送方则进行重新发送


如果当前的传输数据十分密集,则按照滑动窗口进行快速重传处理丢包

如果当前的传输数据很稀疏,则使用超时重传的方式处理丢包

五.流量控制

滑动窗口,窗口越大,传输效率就越高,但是窗口不能无限大的

发送方的发送速度,不能超过接收方的处理能力

流量控制:根据接收方的处理能力,协调发送方的发送速率

我们如何衡量接收方的处理能力?

可以看看接收方的接收缓冲区的剩余空间大小

网络原理之TCP_数据_15

TCP首部中有一个16位窗口,就是存放了窗口大小信息;

16位数字最大表示6553,那么TCP窗口最大就是65535么?

实际上,TCP首部选项中还包含了一个窗口扩大因子M,实际窗口大小是窗口的值左移 M位;


举报

相关推荐

0 条评论