云课堂入门整理---计算机网络-传输层(一)
一、概述
1.传输层协议为运行在不同Host(端系统/主机)上的进程提供了一种逻辑通信机制。
2. 端系统运行传输层协议
- 发送方 : 将应用递交的消息分成一个或多个Segment,并向下穿给网络层
- 接收方 : 将接收到的segment组装成消息,并向上交给应用层
二、传输层与网络层(比较)
1.网络层:
提供主机之间的逻辑通信
2.传输层:
-提供进程之间的逻辑通信
- 位于网络层之上
- 依赖网络层服务
- 对网络层服务进行(可能的)增强
三、多路复用和多路分用
多路分用(接收端):传输层依据头部信息将收到的Segment交付给正确的Socket(应用层和传输层间的“门”),即正确的进程.
多路复用(发送端):从多个Socket接收数据,为每块数据封装上头部信息(传输层),生成Segment,交给网络层.
四、UDP协议(无连接传输)
1.概述
常用于流媒体应用
- 容忍丢失
- 速率敏感
UDP还用于DNS和SNMP
在UDP上实现可靠数据传输?
- 在应用层增加可靠性机制
- 应用特定的错误恢复机制
UDP报文段结构
UDP报文段结构很简单,主要有以下字段
|———-32bit———-|
|–源端口号–|–目的端口–|
|—-长度—-|—校验和—|
|——–应用数据———|
什么是可靠? -不错 -不丢 -不乱
rdt1.0
rdt1.0非常简单,假设下层信道是按序到达,不丢包,且不出现比特差错的.
那么rdt1.0的状态机很简单,不作赘述.
看图即可
rdt2.0
rdt2.0中假设的信道:
rdt2.0中假设信道可能会翻转分组中的位(bit)
- 利用校验和检测位错误
如何从错误中恢复?
- 确认机制(Acknowledgements,ACK):接收方显式的告诉发送方分组已正确接收
- NAK:接收方显式地告知发送方分组有错误
- 发送方收到NAK后,重传分组
基于这种重传机制的rdt协议称为ARQ(Automatic Repeat reQuest)协议
rdt 2.0中引入的新机制
- 差错检测
- 接收方反馈控制:ACK/NAK
- 重传
rdt2.0的状态机
发送端状态机
接收端状态机
rdt2.1
rdt2.0看起来能运行了,但是忽略了一个重要的事实,那就是ACK和NAK分组也可能会被损坏.
当ACK/NAK被损坏时,可以采取这几种方法:
- 为ACK/NAK增加校验和,检错并纠错.(实现完全纠错代价太高)
- 发送方收到被破坏ACK/NAK时不知道接收方发生了什么,添加额外的控制消息(很难确保额外的消息不会损坏,直接无解)
- 如果ACK/NAK坏掉,发送方重传
- 不能简单的重传:产生重复分组
如何解决重复分组问题?
- 序列号(Sequence number): 发送方给每个分组增加序列号
- 接收方丢弃重复分组
因为当发送端发送一个分组时,它会等待接收方的回复,因此这种协议被称为停止-等待协议
rdt2.1的状态机
发送方
接收方
发送方:
- 为每个分组增加了序列号
- 两个序列号(0,1)就够用,因为是停等协议
- 需校验ACK/NAK消息是否发生错误
- 状态数量翻倍,状态必须记住当前分组序列号
接收方:
- 需判断分组是否重复,当前所处状态提供了期望收到分组的序列号.
- 注意:接收方无法知道ACK/NAK是否被发送方正确收到
rdt2.2
rdt2.2在rdt2.1的基础上去除了NAK消息.
如何实现?
- 接收方通过ACK告知最后一个被正确接收的分组
- 在ACK消息中显式的被确认分组的序列号
发送方收到重复ACK之后,采取和收到NAK一样的动作,重传当前分组.
rdt3.0
rdt3.0在2.X的基础上完全模拟了真实的信道.信道既可能发生错误,也可能丢失分组.
为了解决这个问题?
方法: 发送方等待”合理”的时间
- 如果没收到ACK,重传
- 如果分组或ACK只是延迟而不是丢了那么
- 重传会产生重复,序号机制能处理
- 接收方需在ACK中显式告知所确认的分组
- 需要定时器
rdt3.0的FSM
rdt3.0虽然能用,但是性能很差,因为这是一个停等协议.
----流水线机制和滑动窗口协议------
流水线机制:打破rdt3.0的停等
流水线机制:提供资源的利用
------------------要实现流水线机制要有滑动窗口协议(GBN和SR)
GBN(Go Back N)
发送方:
分组头部包含k-bit序列号
窗口尺寸为N,最多允许N个分组未确认
ACK(n):确认到序列号n的分组均已被正确接收(累计确认)
可能收到重复ACK
为空中的分组设置定时器(timer)
超时Timeout(n)事件:重传序列号大于等于n,还未收到ACK的所有分组
发送方FSM:
接收方:
ACK机制:发送拥有最高序列号的、已被正确接收的分区ACK
- 可能产生重复ACK
- 只需要记住唯一的expectedsequm
乱序到达的分组
- 直接丢弃接收方没有缓存
- 重新确认序列号最大的、按序到达的分组
接收方FSM
SR协议
GBN的缺陷
* 重传所有分组,造成资源浪费
- 接收方对每个分组单独进行确认
- 设置缓存机制,缓存乱序到达的分组
- 发送方只重传那些没收到ACK 的分组
- 为每个分组设置定时器
- 发送方窗口
- N个连续的序列号
- 限制已发送且未确认的分组
SR协议的缺陷
如图
对于第一种和第二种情况,发送方发送的分组序号都是0,但是第一种情况发送的是重发的分组0.
而第二种情况发送的复用的序号0,实际上是一个新的分组0.
发送方无法分辨这两种情况.
因此对于SR协议,要求序列号空间满足Ns+NR<=2k