TCP协议的十大核心特性总结(全面)

目录

一.TCP本身特性

二.报文格式

TCP十大核心特性 

 一.确认应答

二.超时重传

三.连接管理(三次握手,四次挥手)

三次握手

四次挥手

四.滑动窗口

情况一:接收方的ACK丢失

 情况二:发送方的数据包丢失

 五.流量控制

六.拥塞控制

 七.延迟应答

八.捎带应答

九.粘包问题

十.TCP的异常处理

情况一:程序突然崩溃

情况二:程序正常退出

情况三:没法发送和接收数据(电脑坏了,网络断了)

接收方无法接受

发送方无法发送


在介绍TCP协议的十大特性之前,我们先来看看TCP本身的特性

一.TCP本身特性

1.有连接

2.可靠传输

3.面向字节流

4.全双工

二.报文格式

 这是各大教科书上的

TCP协议的十大核心特性总结(全面)_第1张图片

 实际上我们应该把他竖过来看,也就是从上到下,从左到右

TCP协议的十大核心特性总结(全面)_第2张图片

下面正式开始讲解

TCP十大核心特性 

 一.确认应答

发送方在发送一条数据给接收方之后,接收方会立刻返回一个ACK作为回应,表示自己收到该条数据

这就是确认应答,能够保证传输的数据一定能发送给对方

二.超时重传

如果发送方没有接收到回来的ACK相应

等待一段时间后,发送方默认该数据已经丢失,会重新发送该条数据给对方

如果依然没有接收到ACK回应,那么会再次发送

但是每次发送的时间间隔会越变越长

这就是超时重传

三.连接管理(三次握手,四次挥手)

三次握手

TCP协议的十大核心特性总结(全面)_第3张图片

 第一步:发送方给接收方发送一条信息(发送SYN);

第二步:接收方接受到信息后,发送两个消息,一个是确认应答(ACK),另一个是回复消息(SYN)

第三步:对于接收方发回来的ACK和SYN应答,发送方再次回复一个ACK确认应答

四次挥手

TCP协议的十大核心特性总结(全面)_第4张图片

 第一步:发送方发送FIN,请求和接收方断开连接

第二步:接收方回应ACK收到断开请求

第三步:接收方向发起方也发送FIN,请求断开连接

第四步:ACK回应,接收方断开连接请求

四.滑动窗口

从上面的三次挥手和四次握手发现,我们TCP的大量时间都停留在接受ACK响应上,于是,我们采取批量传输数据的形式

TCP协议的十大核心特性总结(全面)_第5张图片

 而为了保证接受方能够承担同时处理的最大数据,保证接受方不崩溃,我们限制了发送方的最大发送

第一步

TCP协议的十大核心特性总结(全面)_第6张图片

第二步:

TCP协议的十大核心特性总结(全面)_第7张图片 

 也就是说,滑动窗口能够保证,接收方最大同时处理数据的上限,和发送方最大能发送数据的上限

如果在这种批量传输的情况下,出现数据丢失怎么办?

情况一:接收方的ACK丢失

那么发送方没有收到接收方回应的ACK,如果后面回复的ACK包含了前面的数据

那么就默认前面的数据已经收到,就不用管了

TCP协议的十大核心特性总结(全面)_第8张图片

 

 情况二:发送方的数据包丢失

那么接收方就会一直请求发送方的数据,直到接受到相应数据为止

TCP协议的十大核心特性总结(全面)_第9张图片

 

 五.流量控制

就是在滑动窗口的基础上,我们动态调整滑动窗口的大小,使得我们尽可能在保证数据传输稳定的情况下,扩大我们传输的数据量

如何动态调整呢?这就是我们说的拥塞控制

六.拥塞控制

TCP协议的十大核心特性总结(全面)_第10张图片

 简单来说,就是速度如果达到了传输的上限,那么就会立刻反弹回一个较低的值,然后继续增长速率

如此反复,直到稳定在了一个比较合理的数值范围内,这就是拥塞控制

需要注意的是

最开始我们的速率增长是指数级别的增长,比如  2的一次方 -> 2的二次方 -> 2的三次方....

然后到了一个比较高的值之后,为了防止下一个次方直接超出接受范围很多

所以从那个值之后,我们采用线性增长,而不是指数增长了

TCP协议的十大核心特性总结(全面)_第11张图片

 七.延迟应答

接收方接受数据之后,不会立刻相应给发送方,而是等待一段时间,等接收方接收到多组数据后再返回

TCP协议的十大核心特性总结(全面)_第12张图片

 

八.捎带应答

如果在很短的时间内,接收方收到很多信息,并且都需要返回,那么多条返回消息,就可以合并为一条消息返回TCP协议的十大核心特性总结(全面)_第13张图片

九.粘包问题

因为是 捎带应答会使得多个消息一同返回给发起方,发起方是没有办法判断每个消息应该怎么分段,哪个消息是哪个消息的回应

解决方式:

(1)分隔符:设置一个特殊字符用作分隔符

(2)携带报头长度:在报头携带该消息的字符串长度

十.TCP的异常处理


情况一:程序突然崩溃

操作系统会自动回收程序遗留/占用的资源,类似于close操作,然后发生四次挥手

情况二:程序正常退出

同情况一,回收资源+四次挥手

情况三:没法发送和接收数据(电脑坏了,网络断了)

接收方无法接受

接收方无法接受数据,也就是无法回应ACK相应给发送方,当发送方多次发送数据也没有ACK回应之后,就默认接收方不行了,然后停止发送数据

发送方无法发送

在接收方和发送方里面存在一个"心跳包",双方会周期性发送一个小数据,判断对方是否存活,如果检测到发送方没有心跳回应,那么就默认发送方没了,接收方也就停止接收数据.

注意:在接收方电脑坏了的情况下也能用心跳包判断,但是ACK更加直接

 

 

你可能感兴趣的:(tcp/ip,网络,服务器)