运输层

文章目录

  • 每层封装数据
  • UDP
    • 特点
    • 报文结构
  • 可靠数据传输
    • 停等协议
      • 1: 假设连接是可靠的
      • 2:当连接为不可靠时
      • 3:通过序号解决顺序传递问题
      • 4:去掉nck,解决顺序问题
      • 5:丢包解决,超时重试
        • 执行流程
    • 流水可靠数据传输协议
      • 解决差错恢复方法
        • 回退N步
          • 基于GBN协议的扩展FSM
          • 响应过程
        • 选择重传
          • 执行流程
          • 存在问题
    • 总结
  • TCP
    • 报文段结构
    • 超时时间预估公式
    • 简化实现
      • 存在情况
    • 优化策略
      • 超时间隔超倍
      • 快速重传
      • TCP与选择重传和回退N步的不同
    • 流量控制
    • 连接过程
    • TCP拥塞控制
      • 如何判断拥塞?
      • 如何确定传输速率?
      • 算法
  • 拥塞控制
    • 存在情况
    • 拥塞控制方法

每层封装数据

运输层_第1张图片

网络层与运输层之间的关系:网络层提供主机之间通讯,而运输层提供主机进程之间的通讯.
多路复用:将运输层报文字段中的数据交付给正确的套接字的工作
多路分解:在数据块上封装首部信息从而生成报文段,然后将报文段发送网络.

UDP

特点

仅提供多路复用和分解功能
无需建立连接
无连接状态
分组开销小
与TCP比较,因为没有拥塞控制机制,所以能及时传送数据,且分组开销比TCP小而且无需记录连接状态,所以能承受更大的并发,缺点是不保证能到达.可在应用层添加超时重试解决

报文结构

运输层_第2张图片
长度=数据长度+首部数据长度
校验和:用来校验当UDP报文运输到目的过程中,是否数据发生改变.
发送方对所有16位bite的和(若溢出则回卷)进行反码运算得出.

可靠数据传输

停等协议

停等协议就是处于nck~ack状态不在发送新的数据,这样就保证了顺序传递.
运输层_第3张图片

1: 假设连接是可靠的

运输层_第4张图片

2:当连接为不可靠时

通过校验和,接收反馈,重传解决不可靠问题
运输层_第5张图片
运输层_第6张图片
存在问题:发送方不知道接收方是否正确接收了上一个发送的数据

3:通过序号解决顺序传递问题

每个分组发送时,添加序号,1比特存储序号即可
运输层_第7张图片
运输层_第8张图片
存在问题
第一:当发送端接收到同一个分组的多个ack,无法确定接收方有没有正确接收到跟在被确定多次的分组后面的分组
第二:nck多余

4:去掉nck,解决顺序问题

运输层_第9张图片
运输层_第10张图片

5:丢包解决,超时重试

运输层_第11张图片

执行流程

运输层_第12张图片
运输层_第13张图片
这种分组序号不停01交替,也称之为比特交替协议

流水可靠数据传输协议

与停等操作的对比
运输层_第14张图片
运输层_第15张图片
单位时间和吞吐提升三倍.
对比停等协议,有如下改变
运输层_第16张图片
序号可看做一个环,若分组序号比特位可看做k,则序号范围为[0,2^k-1]

解决差错恢复方法

回退N步

GBN协议也称为滑动窗口协议
允许发送多个分组,不许等待确认,但未确认分组不得超过N个.
优点:支持流量控制.
运输层_第17张图片

基于GBN协议的扩展FSM

运输层_第18张图片

运输层_第19张图片

响应过程

运输层_第20张图片
存在问题,当1000未接收,1000之后的数据都要丢失重试.

选择重传

仅重传那些怀疑有问题的分组
运输层_第21张图片
运输层_第22张图片
运输层_第23张图片

执行流程

运输层_第24张图片

存在问题

当接收窗口过大,无法确定接收的是一个新分组还是重传
运输层_第25张图片

运输层_第26张图片
窗口长度<=序号空间1/2即可,
原理
假设序号空间0~3,窗口=3
A发送012给B
B移动到301
B响应A中断
A重试012
则B01覆盖.
也就是说当B第一次接收到数据,第二次移动的位置不能和第一次有重叠.
也就是2
窗口长度<=序号空间
这里的范围就是2*窗口长度<=4
窗口空间<=2
运输层_第27张图片

总结

运输层_第28张图片
依旧存在问题,序号x分组出现,但是接收方和发送方窗口不包含x.解决办法,确保任何发送的序号x不在网络中出现,给x设置存活时间.

TCP

注意在第三次握手时,可发送数据.
运输层_第29张图片
发送接收过程
运输层_第30张图片

报文段结构

最大报文段长度(MSS)=最大链路层帧长度(MTU)-TCP/IP首部长度运输层_第31张图片
序号和确认号
序号建立在传送字节流上,主机中的TCP会隐式的对数据流中的每个字节编号,连接双方都可以随意设置序号
假设数据流有500,000字节组成,MSS为1000字节,则TCP将为数据流构建500报文段,从序号0开始.第二个序号为1000运输层_第32张图片
确认号:主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号
如主机A收到主机B包含字节0~535和900-1000的报文段,主机A会发送确认号为536的报文段,期望主机B发送下一个确认号为536的报文段.
因为TCP确认该流中至第一个丢失字节为止的字节,所以TCP提供累积确认

运输层_第33张图片运输层_第34张图片

超时时间预估公式

在这里插入图片描述
偏差预估
在这里插入图片描述
超时时间
在这里插入图片描述

简化实现

运输层_第35张图片

存在情况

运输层_第36张图片
运输层_第37张图片

优化策略

超时间隔超倍

超时定时器延长过期时间一倍,这样能间接减少网络拥塞,但是带来了更多的延时.

快速重传

TCP发送方收到3个冗余ACK,则说明已被确认三次的冗余ACK后的报文段丢失,TCP将快速重传
运输层_第38张图片

TCP与选择重传和回退N步的不同

选择重传是没有收到响应的,发送
回退N步是没有接收响应,没接收响应后面分组重传.
与TCP的不用,TCP采用部分GBN,接收方只维护未被确认的最小序号,和下一个字节要发送的字节序号,但是不同的是,当假设N超时时,仅发送N报文,与选择重传不同的是,接收到N~Z报文,不会响应每个报文,而是响应被确认的最小序号

流量控制

每一条TCP连接,主机都设置了接收缓存,相关联的应用程序从缓存中读取数据,当发送的数据速度超过接收方的取出数据速度,直至接收方接收缓存溢出,为了避免这种情况,提供流量控制服务,主要是利用发送方的控制窗口控制速度.
控制窗口=接收方的应用程序从缓存中读出的最后一个数据编号-
从网络中到达的并放入接收方缓存的数据流中的最后一个字节编号

运输层_第39张图片
当接收方窗口为0时,发送方继续发送一个字节的报文段,等待接收方清空缓存,返回一个非0的接收窗口给发送方.

连接过程

运输层_第40张图片
运输层_第41张图片
运输层_第42张图片
运输层_第43张图片

TCP拥塞控制

拥塞窗口(cwnd):限制对一个TCP发送方能向网络中发送流量的速率
在这里插入图片描述

如何判断拥塞?

当拥塞的时候,会造成丢包或者延时过长情况,延时过长意味着发送方会超时,丢包意味着接收方发送三次ACK.也就是说当发送方接收到3次ACK和超时就判定拥塞.

如何确定传输速率?

即保证最大速率发送,也能保证不造成网络拥塞

当正常接收ack,则增加拥塞窗口
当出现丢包,减少拥塞窗口
乐观判断路径无拥塞,增加传输速率,当速率变慢,则减少速率.然后再次探测.

算法

分别进入三个阶段
慢启动
拥塞避免
快速恢复

如何执行?
第一次cwnd设置1个mss,当ack,设置2个mss,之后呈指数增长.
在这里插入图片描述
何时停止?
1:发现丢包
ssthresh(慢启动阀值)设置为cwnd/2
cwnd重置1
重启慢启动
2:cwnd>=ssthresh
结束慢启动,进入拥塞避免模式
3:检测3个ACK,进入快速重传并进入快速恢复
运输层_第44张图片

拥塞控制

存在情况

1:分组到达速率越接近链路容量时,延时越大
2:出现缓存溢出,发送方必须重传.
3:发送方遇到大的延时,当进行重传时,可能会因为链路有一个待发送的分组,从而造成不必要的分组副本发送.
4:当分组由于阻塞被丢弃,则从发送方到整个阻塞丢弃的链路空间就被浪费了.

拥塞控制方法

1:端到端拥塞控制,TCP报文段丢失(超时或三次ACK)被认为拥塞,从而通过减少窗口长度控制
2:网络辅助的拥塞控制,通过路由器发送输出链路上支持的传输速率.如下图,2种方式

运输层_第45张图片

你可能感兴趣的:(通讯协议)