为什么需要传输层?
一些应用层协议需要消息传输的可靠性,如
HTTP、SMTP…
u 网络层IP不可靠,数据可能出错、丢失或乱序
传输层实现端到端的可靠通信!
传输层是整个网络体系结构中的关键层次
Ø 提供了面向连接的机制:可靠传输、流量控制、拥塞控制
传输层服务和协议的要点
传输层为不同主机上的应用进程提供了逻辑通信 功能
传输层协议在端系统中实现
Ø 发送端:将应用层消息封装成报文段 (segments)或数据报,然后交给网络层
Ø 接收端:从报文段/数据报中取出消息,交给应用层
多种传输层协议
Ø 因特网:TCP和UDP
传输层 vs. 网络层
u 网络层:
Ø 主机之间的逻辑通信
u 传输层:
Ø 进程之间的逻辑通信
Ø 使用网络层的服务,并增强后提供给应用层
传输层的复用/解复用
多路复用:多个应用进程的消息在同一个网络接口上传输
进程标识:16位端口号
复用:源端传输层在应用层消息之前加上源端口号和目的端口号
解复用:目的端传输层根据端口号确定目的进程
端口号的规定
u 熟知端口(常用端口,Well-known port)
Ø 服务器进程使用
Ø 开放、固定值,例如Web服务器端口一般是80,Telnet服务器的端口号是23
Ø 值一般是0~1023
u 短暂端口(Ephemeral port)
Ø 客户进程使用
Ø 由操作系统分配,值不固定
Ø 值大于5000
传输层服务
u TCP:可靠、按顺序交付
Ø 建立连接
Ø 流量控制
Ø 拥塞控制
u UDP:不可靠、无序交付
Ø 与IP相同的“尽力而为Best Effort”服务
u 传输层不提供:
Ø 时延保障
Ø 带宽保障
可靠的传输
u 数据在传输过程中不会出现差错
Ø 接收数据值=发送数据值
u 数据不会丢失
Ø 网络不会丢失数据
Ø 接收方速度够快(大于发送速度),不会因处理不及而丢失数据
u 数据不会重复
u 数据不会失序
Ø 接收顺序=发送顺序
可靠数据传输(RDT)协议的演进
RDT1.0:下层信道提供可靠传输服务
可靠的下层信道
Ø 无传输差错
Ø 无包丢失
RDT2.0:信道可能传输出错
发现传输错误后如何解决
接收方向发送方回送通知
— 确认 (ACK) :所收到的数据是正确的
— 否认(NAK) :所收到的数据有错
— 收到ACK,发送方继续发送下一个数据包;
— 收到NAK,发送方重发原数据包
停止等待协议:一次(在收到ACK之前)只能发送一个数据包
RDT 2.1:发送方超时重发
RDT2.2:增加序号
发送方在数据包中增加一个序号(sequence number)
u 接收方根据序号判断出重复的数据包并丢弃,并重发ACK
u 数据包的序号=当前正发送包的序号
u ACK的序号=要接收的下一个数据包的序号,即已经收到的包序号+1
RDT3.0: 完整的停等ARQ协议
u 发送方发出一个数据包后,停下来等待,收到来自接收方的ACK后才能继续发送
u 数据包中有校验字段,发送方/接收方使用该字段来检查传输错误
u 如果接收方发现传输差错,则丢弃收到的数据包
u 如果接收方收到重复包,则重发对上一个数据包的ACK
u 数据包和ACK中均包含1位序号,用于检查重复包
u 发送方维护一个定时器,如果定时器超时而仍未收到ACK,则重发数据包
信道利用率
流水线协议的性能:信道利用率提高
RDT4.0:连续ARQ协议
u 发送方在收到ACK之前可以连续发出 N个数据包
Ø 缓存已发送但未经确认的数据包
Ø 对发送的每个数据报进行计时,重发超时而未收到ACK的数据包
u 接收方一次只能接收一个数据包
Ø 只能缓存一个数据包
Ø 收到序号不符的数据包,将丢弃
连续ARQ:滑动窗口
RDT5.0:选择重传ARQ协议
u 接收方可以缓存不按序到达的数据包
Ø 等待缺少的序号前的数据包都到达后,按序交付上层
Ø 接收窗口大小:可以缓存的最大包个数
u 发送方只需重传差错/丢失的数据包
可靠的数据传输协议小结
什么是可靠的数据传输
Ø 无传输差错:收到的数据=发送的数据
Ø 无数据丢失
Ø 无数据重复
Ø 无失序:接收数据顺序=发送数据顺序
停止-等待ARQ协议
Ø 发送方一次只发送一个数据包
Ø 数据包中包含校验信息,以检测传输差错
Ø 对于无错的数据包,接收方发送ACK
Ø 发送方使用定时器,解决数据包丢失问题
Ø 数据包和ACK中均包含一位序号,解决重复数据包
的问题
Ø 信道利用率:
Ø 问题:一次只发送一个数据包,导致信道利用率低
Ø 解决方案:一次发送多个数据包