TCP的可靠性传输

1 TCP的消息格式

 由于网络层(IP层)是没有可靠传输机制的,尽自己最大的努力进行交付。而传输层使用 TCP 实现可靠传输。

TCP保证可靠性传输的机制依靠一下几种

1)校验和

2)序列号和确认应答机制

3)重传机制

4)滑动窗口

5)流量控制

6)拥塞控制

2 校验和

所谓 TCP 的校验和就是由发送端计算待发送 TCP 报文段的校验和,然后接收端对接收到的 TCP 报文段验证其校验和(TCP 的校验和是一个端到端的校验和)。其目的是为了发现 TCP 的协议头和数据在发送端到接收端之间是否发生了变动。如果接收方检测到校验和有差错,则该 TCP 报文段会被直接丢弃。默认没有收到数据,返回一个延时ack,告诉对端重发数据。

3 序列号和确认应答机制

TCP 报文段的首部中有一个序号字段指的是该报文段第一个字节的序号(一个字节占一个序号)。确认应答机制就是接收方收到 TCP 报文段后就会返回一个确认应答消息。

 

4 重传机制

数据在传输过程中丢失了呢?

下面介绍几种常见的重传机制:

超时重传

RTO 超时重传时间

当发送端发送一个报文的时候会启动一个超时重传的定时器,当收到接收端返回这个数据报文的ack数据时候,定时器会被刷新,当定时器事件 超过RTO时候,会重新发送这一条数据报文。如果依然没有被收到,定时器事件 >上一次RTO*2 继续重新发送。一般在数据包丢失,或者说ack数据包丢失才会出现超时重传。


快速重传

它不以时间为驱动,而是以数据驱动重传

 当三次返回的ACK是相同的时候就会触发快速重传的机制。

SACK

这里就不多讲述

滑动窗口

下一期博客讲解TCP/ip定时器和滑动窗口

流量控制

双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来,这时候接收方只能把处理不过,的数据存在缓存区里(失序的数据包也会被存放在缓存区里)。

如果缓存区满了发送方还在疯狂着发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大着浪费网络资源,我们需要控制发送方的发送速率,让接收方与发送方处于一种动态平衡才好。对发送方发送速率的控制,称之为流量控制。

那么流量控制如何控制?

接收方每次收到数据包,可以在发送确定报文的时候,同时告诉发送方自己的缓存区还剩余多少是空闲的,我们也把缓存区的剩余大小称之为接收窗口大小,用变量win来表示接收窗口的大小。

发送方收到之后,便会调整自己的发送速率,也就是调整自己发送窗口的大小,当发送方收到接收窗口的大小为0时,发送方就会停止发送数据,防止出现大量丢包情况的发生。

流量控制- 发送方何时再继续发送数据

当发送方停止发送数据后该怎样才能知道自己可以继续发送数据?

1 当接收方处理好数据,接受窗口win>0时,接收方发个通知报文去通知发送方,告诉他可以继续发送数据了,当发送方收到窗口大于0的报文时,就继续发送数据。

2 当发送方收到接受窗口win=0时,这时发送方停止发送报文,并且同时开启一个定时器,每隔一段时间就发个测试报文去询问接收方,打听是否可以继续发送数据了,如果可以,接收方就告诉他此时接受窗口的大小,如果接受窗口大小还是为0,则发送方再次刷新启动定时器。

 

 

拥塞控制

拥塞控制和流量控制虽然采取的动作很相似,但拥塞控制与网络的拥堵情况相关联,而流量控制与接收方的缓存状态相关联。

 

慢启动与快恢复

慢启动:

1 窗口恢复 比如默认32

2 即使对方窗口恢复为32 ,发送数据按照指数真正去发送窗口数据

1->2-.3->5->

快恢复

一下载就开始放松12个包

tcp年代久远,以前带宽有限,大家不要去抢带宽

现在带宽很强大,用快恢复比较多

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值