传输层

本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-04-18

一、传输层的基本服务

传输层功能

传输层的核心任务是为应用进程之间提供端到端的逻辑通信服务。

主要功能包括:

  • 传输层寻址;
  • 应用层报文的分段和重组;
  • 报文的差错检测;
  • 进程间的端到端的可靠数据传输控制;面向应用层实现复用与分解;
  • 端到端的流量控制;
  • 拥塞控制;

传输层协议提供逻辑通信服务,只需在端系统中实现,通信的真正端点并不是主机,而是主机中运行的应用进程

传输层寻址与端口

1、用统一的寻址方法对应用进程进行标识,即端口号。

2、在全网范围内利用“IP地址 + 端口号”唯一标识一个通信端点。通过IP地址找到主机,通过端口找到对应的应用进程,实现应用进程间端到端的通信。

3、传输层的端口号为16位(二进制)整数,包含3类端口:

  • 熟知端口号:数值为0~1023
  • 登记端口号:数值为1024~49151,为没有熟知端口号的应用程序使用的,使用这个范围的端口号必须在IANA(互联网数字分配结构,The Internet Assigned Number Authority)登记,以防止重复。
  • 客户端口号或短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。

4、常用熟知端口:HTTP使用80端口,SMTP使用25端口,POP3使用110端口,FTP使用20、21端口,DNS使用UDP 53端口。

无连接服务与面向连接服务

1、无连接服务:UDP,数据传输之间无需与对端进行任何信息交换(即“握手”),直接构造传输层报文并向接收端发。

2、面向连接服务:TCP,在数据传输之前,需要数据双方交换一些控制信息,建立逻辑连接,然后再传输数据,数据传输结束后还需要再拆除连接。

二、传输层的复用与分解

多路复用与多路分解:是传输层的一项基本功能,支持众多应用进程公用同一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程。

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

UDP套接字:<目的IP地址,目的端口号>

UDP套接字的端口号是UDP实现复用与分解的重要依据。

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

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

TCP套接字:<源IP地址,源端口号,目的IP地址,目的端口号>

当一个TCP报文段从网络层到达一台主机时,该主机根据这4个值将报文段分解到相应的套接字。

三、停-等协议与滑动窗口协议

可靠数据传输原理

1、差错检测:利用差错编码实现数据包传输过程中的比特差错检测。

2、确认:接收方向发送方反馈接受状态。

3、重传:发送方重新发送接收方没有正确收到的数据。

4、序号:确保数据按序提交。

5、计时器:解决数据丢失问题。

停-等协议

停-等协议的主要特点就是每发送一个报文段后就停下来等待接收方的确认。

工作工程是:

1、发送方发送经过差错编码和编号的报文段,等待接收方的确认;(发送并等待确认

2、接收方如果正确接收到报文段,即差错检测无误且序号正确则接收报文段,并向发送端发送ACK,否则丢弃该报文端,并向发送方发送NAK;(接收并确认/否认)

3、发送方如果接收到ACK,则继续发送后续报文段,否则重发刚才的报文段(继续发送/重发)

滑动窗口协议

1、停-等协议的主要性能问题:停止-等待机制降低了信道利用率。

2、解决方法:流水线协议或管道协议,允许发送方在没有收到确认前连续发送多个分组。

3、流水线协议的改进:增加分组序号范围;发送方或接受方必须缓存多个分组。

4、典型的流水线协议:滑动窗口协议。

滑动窗口协议

GBN协议(Go-Back-N,回退N步)

GBN协议:发送窗口大小较大,可以在未收到确认前发送多个分组;但接收窗口大小仅为1,只能接收1个按序到达的分组,未按序到达的分组或者某个分组差错,就会引起发送方重发该分组及其之后的所有分组。

GBN发送方必须响应3种类型的事件:
  • 上层调用:当上层调用GBN协议时,发送发首先检查发送窗口是否已满,如果未满,则用“下一个可用序号”编号新的分组并发送,并更新“下一个可用序号”(加一);如果已满,发送方则暂不响应上层调用,拒绝发送新的数据。

  • 收到1个ACK,GBN协议采用累积确认方式,当发送方收到ACKn时,说明接收方已经正确接收到序号<=n的所有分组,如果n在当前发送窗口内(此前状态是发送未确认,并且只会是基序号,因为接收窗口只有1个),则发送窗口滑动到n+1,基序号更新为n+1,如果滑动后还有发送未确认的分组则重启计时器;若不在当前发送窗口内,则说明是重复收到,不予理会。

  • 计时器超时:GBN协议发送方只使用1个计时器,且只对当前发送窗口的“基序号”指向的分组进行计时,如果发生超时,发送方重传当前发送窗口中所有已发送但未确认的分组。

GBN接收方的操作:

因为接收窗口大小为1,所以GBN接收方只能接收当前接收窗口中序号N所指向的分组,如果收到了则滑动到N+1,如果收到的不是N,则丢弃该分组,并为最近按序接收的分组重新发送ACK,即ACKn-1。

SR协议(Selective Repeat,选择重传)

增加接受方缓存能力(接受窗口>1),缓存正确到达但失序的分组,仅要求发送方重传未被确认的分组,等缺失分组到达后一并向上层按序提交,GBN协议等同于接受窗口Wr=1的SR协议。

而停-等协议相当于发送窗口与接收窗口都为1的特殊滑动窗口协议,Ws=Wr=1。

SR发送方主要响应3个事件
  • 上层调用:如果“下一个可用序号”位于当前发送窗口,则编号发送给接收方;否则缓存数据或者返回给上层以便以后传输

  • 定时器超时:SR协议在发送方对每一个已发送分组分别计时,当某个已发送未被确认的分组的计时器超时,发送方重发该分组。

  • 收到ACK:若收到的ACKn位于当前发送窗口,则标记为已接收(因为接收窗口有多个,n可能不是基序号);若n同时是发送窗口的基序号,则滑动窗口到n+1。

SR接收方主要的3个操作
  • 正确接收到序号在接收窗口范围内的分组:如果收到的n等于接收基序号,则将<=n的分组一并向上层交付,滑动窗口到n+1;如果不等于接收基序号,且是第一次接收到,则缓存该分组。

  • 正确接收到序号在接收窗口左侧的分组:说明分组n之前已经正确接收到并向上层提交,因此接收方丢弃该分组,并向发送方发送ACKn进行确认,避免死锁(则避免发送方和接收方窗口无法继续滑动,因为可能前一次发出的ACK包丢失了,如果此时不重复发送ACKn,那么发送方的这个分组n将永远无法得到确认,发送窗口将无法继续滑动,同时接收窗口也无法继续滑动)。

  • 其他情况:丢弃分组,不做响应。

信道利用率公式

信道利用率与发送窗口大小有关,当Ws足够大时,使该等式分子大于分母时,则信道利用率超过了100%。

四、用户数据报协议 UDP

用户数据报协议UDP是Internet传输层协议,提供无连接、不可靠、数据报尽力传输服务。

UDP数据报结构

首部:源和目的端口号用于实现复用与分解;长度字段:在UDP报文段中的字节数(首部和数据的总和);校验和:接收方用来检测该报文端是否出现了差错。

计算校验和

1、对所有参与运算的内容(UDP伪首部、UDP首部、应用数据)按16位对齐求和。UDP生成校验码和时,校验码字段取全0。

2、求和过程中遇到任何溢出(即进位)都被回卷(即进位与和的最低位再相加)

1011 1011 1011 0101

1000 1111 0000 1100

等于

1 0100 1010 1100 0001

变成0100 1010 1100 0001 + 1 = 0100 1010 1100 0010

3、最后得到的和取其反码:1011 0101 0011 1101

五、传输控制协议 TCP

理论参考:TCP连接

TCP可靠数据传输

1、TCP的可靠数据传输实现机制包括差错编码、确认、序号、重传、计时器等。

2、TCP可靠数据传输是基于滑动窗口协议,但是发送窗口大小动态变化。

3、过程:

  • 封装TCP报文段
  • 发出一个报文段后启动一股计时器
  • 通过校验和发现数据差错
  • 通过序号重新排序,丢弃重复的报文段
  • 流量控制

TCP流量控制

1、TCP协议利用窗口机制实现流量控制,但不是简单的滑动窗口协议。

2、TCP连接建立时,双方都为之分配了固定大小的缓冲空间;TCP的接收端只允许另一端发送其缓冲区所能接纳的数据。

3、过程

  • 接收端在给发送端发送确认段时,通告接收窗口大小。

  • 发送端在接下来发送数据时,确保未确认段的应用层数据总量不超过接收端通告的接收窗口大小,从而确保接收端不会发生缓存溢出。

TCP拥塞控制

1、窗口机制:通过调节窗口的大小实现对发送数据速率的调整。

2、窗口调整的基本策略

  • AIMD(Additive Increase, Multiplicative Decrease) 加性增加,乘性减小。网络未发生拥塞时,逐渐“加性”增大窗口数量,网络拥塞时“乘性”快速减小窗口大小。

3、TCP拥塞控制算法

包括了慢启动、拥塞避免、快速重传和快速恢复4部分。

4、具体过程

TCP采用试探的方法,逐渐增大拥塞窗口,通常在刚开始发送数据报文段时,先将拥塞窗口CongWin设置为TCP最大段长度MSS的值,在每收到一个数据报文段的确认后,CongWin就增加一个MSS的数值(从1MSS 到 2MSS),即每收到一个ACK,CongWin便加一个MSS。

通常,拥塞窗口的初值为1MSS,发送1个报文段,当收到这个报文段的值之后,拥塞窗口的值+1变成2MSS。此时便可以发送2个报文段,等到收到这2个数据报的确认之后呢,拥塞窗口的值变为4MSS。然后再由4变8。(慢启动

为了防止拥塞窗口增长过快而引起网络拥塞,TCP设置了一个拥塞窗口的阈值Threshold,“分割”慢启动阶段和拥塞避免阶段。

当拥塞窗口大于阈值时,拥塞窗口就按拥塞避免的方式增长,每经过一个RTT,拥塞窗口CongWin的值就加1(单位为MSS),即当前拥塞窗口中的所有报文段全部发送并且被成功确认,则CongWin的值加1(单位为MSS),即发送了8个报文段,收到了8个ACK,CongWin的窗口才加1。(拥塞避免

当发现网络发生拥塞,则将新的阈值设置为当前拥塞窗口值的一半,CongWin / 2,同时将CongWin的值设置为1,重新开始慢启动算法。

快速重传的基本思想是接收端收到3次重复确认时,则推断被重复确认的报文已经丢失了,于是立即发送被重复确认的报文段,也就是说,TCP的发送端的计时器超时和3次重复确认,都解释为报文丢失,而在TCP的拥塞控制策略中,报文丢失表明网络发生了拥塞。便通过缩减拥塞窗口来减少向网络中发送数据的速率和数量。

计时器超时可以解读为网络拥塞严重,3次重复确认可以解读为网络拥塞程度不是很严重。快速恢复是配合快速重传的算法,即当发送端连续收到3次重新确认时,将阈值减半,并且将拥塞窗口的值置为减半后的阈值,然后执行拥塞避免算法;而遇到超时,则将拥塞窗口置为1,重新进入慢启动算法。