TCP协议--传输机制

TCP协议原理 


TCP协议是对数据传输提供的一个管控机制,主要体现在可靠和效率两个方面,即在保证数据可靠传输的情况下尽可能的提高效率 

 


可靠传输机制


确认应答机制


向对方发送一个数据报,对方要返回一个确认应答的数据报 

实现的方式:序号和确认序号保证了响应应答针对的是哪一条消息的应答

说明:

发送的数据是基于TCP报头中的“32位序号”来保存的,一个字节对应一个序号
确认应答的数据是基于TCP报头中的“32位确认序号”来保存的,ack(确认信息)标志位置为1,返回某个序列号,说明某个序列号之前的数据全部接收到
有了确认应答,它才可以继续发送后边的数据



超时重传机制


发送的数据报可能因为网络拥堵等原因,超过一定时间,还没有收到确认应答的数据报,就需要重新发送 。如果没有收到确认应答,可能是因为发送数据时候就已经发生了丢包,也可能是因为ACK丢包了。这种情况,主机B可能会接收到许多重复的数据,TCP内部有去重操作,接收的数据会放在操作系统内核的接收缓冲区中,接收缓冲区可以是一个内存空间,视为是一个阻塞队列,对于收到的数据,TCP会根据序号检查这个数据是不是在缓冲区中已经存在,如果存在则丢弃,如果不存在则放进去

超时时间如何确定?

如果超时时间设置的太长,会导致重传的效率
如果超时时间设置的太短,会导致频繁发送重复的数据

因此TCP协议为了保证在任何环境中都能有较高性能的通信,系统会动态的计算这个超时时间

  • 超时以500ms为一个单位,每次判定超时重发的时间都是500ms的整数倍
  • 重发一次,仍然不能收到应答,等待2*500ms后再进行重传
  • 仍然等不到应答,等待4*500ms进行重传,以此类推,以指数形式增长
  • 累积到一定重传次数,TCP协议认为网络或者对端主机出现异常,强制关闭连接

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


我之前的文章有详细的讲解,可以看前面的文章。


流量控制


接收端主机处理数据的速度有限,如果发送端发送数据太快,导致接收端缓冲区被填满,这时,发送端继续发送数据的话就会造成丢包,继而引起丢包重传等一些列连锁反应,因此TCP协议根据接收端接收数据的能力,来决定发送端发送数据的速度,这个机制就叫作流量控制 

  • 接收端将自己剩余缓冲区大小存入TCP头部中的“16位窗口大小”字段 ,通过ACK通知发送端
  • 窗口大小越大,说明网络吞吐量越高
  • 发送端根据接收到这个窗口的大小,控制自己的发送速度
  • 如果接收缓冲区满了,就会将窗口设置为0,这时,发送端不在发送数据,而是定期的发送一个窗口探测报文(只是为了知道窗口的大小),让接收端将窗口大小告诉发送端

拥塞控制 


刚开始发送数据时,由于中间结点的网络情况不清楚,如果贸然发送大量数据,就会造成大量丢包,所以TCP协议引入慢启动的方式,先发少量数据探探路,再决定按照多大速度发送数据

此处引入拥塞窗口,刚开始时,拥塞窗口设置为1,每收到一个ACK时,拥塞窗口加1,每次发送数据的时候,拥塞窗口和流量窗口的较小的值作为实际发送的窗口,即滑动窗口的大小 

注意:上述增长方式是指数级别的,指数式增长可以快速接近丢包的极限

拥塞窗口变化的方式 

为了不增长那么快,引入一个慢启动的阈值,当拥塞窗口的大小超过了这个阈值,不在按照指数方式增长,而是按照线性方式增长,如下图所示:

开始时,慢启动的阈值为窗口的最大值,线性增长到一定程度时会发生丢包
网络拥塞时,拥塞窗口置1,慢启动阈值变为拥塞窗口/2,重新开始增长。

博客参考:【计算机网络】TCP协议详解-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值