计算机网络自顶向下 第3章 运输层

3.1 概述和运输层服务

  • 作用:为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能。
  • 在运输层的分组称为运输层报文段(segment),

3.1.1 运输层和网络层的关系

  • 网络层提供了主机之间的逻辑通信。
  • 运输层为不同主机上的进程提供了逻辑通信。

3.1.2 因特网运输层概述

  • UDP(用户数据报协议):为应用程序提供了一种不可靠、无连接的服务。
  • TCP(传输控制协议):为应用程序提供了一种可靠的、面向连接的服务。TCP还提供如下的附加服务:
    • 可靠数据传输(relable data transfer):通过使用流量控制、序号、确认和定时器确保正确地、按序地将数据从发送进程交付给接收进程。
    • 拥塞控制(congestion-control):TCP力求为每个通过一条拥塞网络链路的连接平等地共享网络链路带宽,通过调节TCP连接发送端发送进网络流量速率来实现。
  • 将主机交付扩展到进程间交付被称为运输层的多路复用(transport-layer multiplexing)与多路分解(demultiplexing)。

3.2 多路复用与多路分解

  • 将运输层报文段中的数据交付到正确的套接字的工作称为多路分解(demultiplexing)。

  • 在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息生成报文段,然后将报文段传递到网络的工作称为多路复用(multiplexing)。

  • 为了实现上述功能,使用源端口号字段(source port number field)和目的端口字段(distination port number field)。

    • 端口号是一个16比特的数,大小在0~65535之间。
    • 0~1023的端口号称为周知端口号(well-known port number),保留个HTTP和FTP等协议使用。

1.无连接的多路复用与多路分解

一个UDP套接字是由一个二元组来标识,包括一个目的IP地址和目的端口号。

2.面向连接的多路复用与多路分解

TCP套接字是由一个四元组(源IP地址、源端口号、目的IP地址、目的端口号)来标识的。这是因为TCP要保存连接状态。

3.Web服务器和TCP

没内容


3.3 无连接运输:UDP

  • UDP(User Datagram Protocol) 只是做了运输协议能够做的最少工作。包括:

    • 复用/分解功能
    • 少量的差错检测
  • UDP相比TCP的优点:

    • 使用UDP的应用也可以实现可靠数据传输,通过应用层来实现,比如在应用程序中增加确认与重传机制等。
    • 速度更快。
    • 无需建立连接。
    • 不用进行拥塞控制。
    • 分组首部开销小,UDP近由8个字节,而TCP由20个字节的首部开销。
  • 流行的因特网应用及其运输层协议

应用 应用层协议 下面的运输层协议
电子邮件 SMTP TCP
远程终端访问 Telnet TCP
Web HTTP TCP
文件传输 FTP TCP
远程文件服务器 NFS 通常UDP
流式多媒体 通常专用 UDP或TCP
因特网电话 通常专用 UDP或TCP
网络管理 SNMP 通常UDP
路由选择协议 RIP 通常UDP
域名系统 DNS 通常UDP

3.3.1 UDP报文段结构

在这里插入图片描述

3.3.2 UDP检验和

  • UDP检验和,通过对UDP报文中的所有16比特字的和进行反码运算,注意在求和时,如果最高位有溢出要进行回卷(即将最高位溢出的结果加到最低位)。
  • 在接收方,对所有数据求和的结果将是1111111111111111(因为是数据和加上其反码)。如果有一个比特为0,标识数据出现差错。

3.4 可靠数据传输原理

  • 可靠数据传输协议(rliable data transfer protocol)的责任是保证传输数据比特不会受到损坏或丢失,而且所有数据都是按照其发送顺序进行交付。
  • rdt表示可靠数据传输。
  • udp标识不可靠数据传输。

3.4.1 构造可靠传输协议

参考可靠传输协议…

1.经完全可靠信道的可靠数据传输:rdt 1.0

在这里插入图片描述

  • rdt的发送端通过rdt_send(data)事件来接受较高层的数据,产生一个包含该数据的分组packet(通过make_pkt(data)),并将该分组发送到信道上去。
  • 在接收端,rdt通过rdt_rcv(packet)事件从底层信道接收一个分组,并从分组中抽取收据(通过extract(packet,data)动作),并将数据上传给较高层(通过deliver_data(data))动作。
  • 由于信道完全可信,所以直接发送数据,而不需要任何反馈。

2.经具有比特差错信道的可靠数据传输:rdt 2.0

  • rdt2.0在rdt1.0的基础上解决了比特位翻转的问题
  • 底层信道实际上可能会在分组中出现比特受损。
  • 在计算机网络中,基于重传机制的可靠数据传输协议称为自动重传请求(Automatic Repeat reQuest,ARQ)协议。

ARQ还需要另外三种协议功能来处理比特差错:

  • 差错检测
  • 接收方反馈:比如用0标识NAK(否定确认) 和用1表示ACK(肯定确认)
  • 重传

在这里插入图片描述
但是rdt2.0有着一个致命的缺点,只考虑了发送方到接收方的数据传输,如果反馈信息ACK,NAK传输时发生比特位翻转会出现什么情况?如果ACK发生翻转,那么发送方会再次重复的发送相同的数据包;如果NAK发生翻转,那么发送方会认为数据传输情况很好,但是接收方却已经收到了一个错误的数据包。(因为ACK可能会错误,因此多了两个状态

由此rdt2.1应运而生,在rdt2.0的基础之上,发送方在打包数据包时添加了0或者1编号,同样ACK,NAK字段上也添加了0,1字段,表示0.1号字段的确认或者否定。发送方就有了2种状态发送0号数据包,1号数据包,接收方也有了2种状态等待0号数据包和等待1号数据包。现在假设情景发送方向接收方发送0号数据包,如果接收方接收到0号数据包,返回ACK,但是ACK出现翻转,接收方处于等待1号数据状态,发送方重复发送0号数据,接收方会拒绝0号数据,避免重复。如果接收方接收到0号数据包出现错误,返回NAK,但是NAK出现翻转,接收方处于等待0号数据状态,发送方继续发送1号数据,接收方会拒绝1号数据,避免错序。
在这里插入图片描述
在这里插入图片描述

rdt2.2是在rdt2.1上的基础之上做了小小的改善,摒弃了NAK,只需采用ACK。我们在ACK的信息上加上了期望的顺序号,现在假设情景发送方向接收方发送0号数据包,如果接收方接收到0号数据包,返回(ACK,1),发送方接着发送1号数据包。如果接收方接收到0号数据包出现错误,返回(ACK,0),发送方重传0号数据包。

在这里插入图片描述
在这里插入图片描述


3.经具有比特差错的丢包信道的可靠数据传输:rdt 3.0

  • 基于rdt2.2中的技术(检验和、序号、ACK分组和重传等)需要增加一种新的协议解决丢包问题。
  • 为了实现基于时间的重传机制,需要一个倒计数定时器(countdown timer),在一个给定的时间过后,可中断发送方。因此需要做到
    • 每发送一个分组时,启动一个定时器。
    • 响应定时器中断。
    • 终止定时器。

在这里插入图片描述

-


3.4.2 流水线可靠数据传输协议

在这里插入图片描述

流水线(pipelining)技术可能给可靠传输协议带来如下影响:

  • 必须增加序号范围:每个分组都有唯一的序号,
  • 接收方和发送方可能需要缓存多个分组。
  • 解决流水线的差错恢复的两种基本方法:回退N步(Go-Back-N,GBN)和选择重传(Selectinve Repeat,SR)。

3.4.3 回退N步

在回退N步中,允许发送方发送多个分组而不需等待确认。最大允许数为NN常被称为窗口长度(window size),GBN协议也常被称为滑动窗口协议

  • 基序号(base):为最早的未确认分组的序号。
  • 下一序号(nextseqnum):为最小的未使用的序号
    在这里插入图片描述

GBN发送方必须相应三种类型的事件:

  • 上层的调用:当上层调用rdt_send()时,要检测发送窗口是否已满。如果未满,产
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值