当前位置: 首页 > article >正文

计算机网络-运输层

重点内容:

运输层 是整个网络体系结构中的关键层次之一。一定要弄清以下一些重要概念:
(1) 运输层为相互通信的应用进程提供逻辑通信。
(2) 端口和套接字的意义。
(3) 无连接的 UDP 的特点。
(4) 面向连接的 TCP 的特点。
(5) 在不可靠的网络上实现可靠传输的工作原理,停止等待协议和 ARQ 协议。
(6) TCP 的滑动窗口、流量控制、拥塞控制和连接管理。

目录

重点内容:

一.运输层协议概述

1.1进程间的通行

1.2运输层的两个主要协议

1.3运输层端口

端口号分类

二.用户数据报协议UDP 

2.1UDP的特点

2.2UDP的首部格式

三.传输控制协议TCP

3.1TCP的特点

套接字

3.2TCP首部格式

 

3.3可靠传输的工作原理

3.3.1停止等待协议

3.3.2连续ARQ协议

3.4可靠传输的实现

3.4.1以字节为单位的滑动窗口

3.4.2超时重传时间的选择

3.4.3选择确认SACK

3.5流量控制

3.5.1利用滑动窗口实现流量控制

3.5.2TCP传输效率

3.6拥塞控制

3.6.1拥塞控制基础概念和对比了解

拥塞控制和流量控制的区别

 3.6.2拥塞控制算法

1.慢开始和拥塞避免

慢开始

拥塞避免算法

快重传

​3.6.3主动队列管理AQM

3.7TCP运输连接管理

3.7.1TCP连接建立

3.7.2TCP连接释放


一.运输层协议概述

1.1进程间的通行

通信是:这台主机中的一个进程 和另一台主机中的一个 进程 在交换数据。
        IP 协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程
        所以,
        同时,

1.2运输层的两个主要协议

TCP/IP 运输层的两个主要协议都是互联网的正式标准,即:
(1) 用户数据报协议 UDP (User Datagram Protocol) [RFC 768]
(2) 传输控制协议 TCP (Transmission Control Protocol) [RFC 793]

 

1.3运输层端口

复用:应用层所有的应用进程都可以通过运输层再传送到 IP 层(网络层)
分用:运输层从 IP 层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程

那么我们已经知道运输层需要将数据交付至应用进程,怎么做呢?

1.使用PID计算机操作系统所指派的这种进程标识符来标志 X

——互联网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。(不同操作系统格式不同)

2.把一个特定机器上运行的特定进程,指明为互联网上通信的最后终点 X

——这是因为进程的创建和撤销都是动态的,通信的一方几乎无法识别对方机器上的进程。

最终解决方案:在运输层使用协议端口号(protocol port number),或通常简称为端口(port)

硬件端口和软件端口的区别:
硬件端口 不同硬件设备 进行交互的接口,而 软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),而且要知道对方的端口号。

端口号分类

二.用户数据报协议UDP 

用户数据报协议 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,这就是复用分用的功能以及差错检测的功能。

2.1UDP的特点

(1) UDP 无连接 ,即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
(2) UDP 使用 尽最大努力交付 ,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有许多参数)。
(3) UDP 面向报文 的。对于应用层交下来的报文既不合并,也不拆分,即一次交付一个完整的报文

(4) UDP 没有拥塞控制(相对于TCP来说),因此网络出现的拥塞不会使源主机的发送速率降低。 

(5) UDP 支持一对一、一对多、多对一和多对多的交互通信。
(6) UDP 的首部开销小 ,只有 8 个字节,比 TCP 20 个字节的首部要短。

2.2UDP的首部格式

        伪首部——只是在计算检验和时,临时添加,伪首部既不向下传送,也不向上递交,而仅仅是为了计算检验和。

        UDP计算检验和的方法和计算 IP 数据报首部检验和的方法相似(都是用二进制反码计算求和)。但是IP 数据报的检验和只检验 IP 数据报的首部,但 UDP 的检验和是把首部和数据部分一起都检验

UDP校验和计算:

若 UDP 用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)。

伪首部的第 3 字段是全零;第 4 字段是 IP 首部中的协议字段的值。对于 UDP ,此协议字段值为 17 ;第 5 字段是 UDP 用户数据报的长度。因此,这样的检验和,既检查了 UDP 用户数据报的源端口号和目的端口号以及 UDP 用户数据报的数据部分,又检查了 IP 数据报的源 IP 地址和目的地址。

三.传输控制协议TCP

3.1TCP的特点

(1) TCP 面向连接的运输层协议 。(UDP面向报文)
(2) 每一条 TCP 连接只能有两个 端点 (endpoint) ,每一条 TCP 连接只能是 点对点 的(一对一)。
(3) TCP 提供 可靠交付 的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达
(4) TCP 提供 全双工通信 。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
(5) 面向字节流。TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
TCP 并不关心应用进程一次把多长的报文发送到 TCP 的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。【 流量控制、拥塞控制

套接字

TCP 连接的端点叫做套接字 (socket)

3.2TCP首部格式

(1) 源端口目的端口,各2B,分用的实现

(2) 序号,4B,序号使用 mod 2^{32}运算。在一个 TCP 连接中传送的字节流中的每一个字节都按顺序编号。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。

(3) 确认号,4B,是 期望收到对方下一个报文段的第一个数据字节的序号
若确认号 = N,则表明:到序号 N – 1 为止的所有数据都已正确收到。

 (4) 数据偏移,4bit, 指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。所以首部最长为60B

(5) 保留, 6 位,保留为今后使用,但目前应置为 0
(6) 紧急 URG (URGent),1bit,  URG = 1 时,表明紧急指针字段有效。
URG 1 时,TCP 就把紧急数据插入到本报文段数据的 最前面。

(7) 紧急指针,2B,紧急指针仅在 URG = 1 时才有意义。指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)

(8) 确认 ACK (ACKnowledgment),1bit,仅当 ACK = 1 时确认号字段才有效。当 ACK = 0时,确认号无效。TCP 规定, 在连接建立后所有传送的报文段都必须把 ACK 置 1
(9) 推送 PSH (PuSH),1bit,PSH位为1时尽快地(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
(10) 复位 RST (ReSeT),1bit,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因), 必须释放连接,然后再重新建立运输连接。RST 置 1 还用来拒绝一个非法的报文段或拒绝打开一个连接。RST 也可称为重建位或重置位。
(11) 同步 SYN (SYNchronization),1bit,SYN 置为 1 就表示这是一个连接请求或连接接受报文。
(12) 终止 FIN (FINis ,意思是“完”、“终” ) 用来释放一个连接。
(13) 窗口, 1bit, 可以理解为当前接收方可使用的缓存大小(以字节为单位)
(14) 检验和,2B, 同样需要构建伪首部
(15) 选项 长度可变,最长可达 40 字节。
可选的典型选项
1.窗口扩大选项
2. 时间戳选项,
3.SACK,选择确认选项,指定数据重传范围

3.3可靠传输的工作原理

但是实际网络无法满足以上两个条件,这样一来我们就需要。

3.3.1停止等待协议

即收到接收方确认后才继续发送下一个分组。

 那么要是没有收到确认,则超时重传

如果接收方的确认丢失或是延迟了,导致超时重传

则接收方在接受到重复分组的时候将其丢弃,并再次发送确认

从信道利用率角度来说, 

3.3.2连续ARQ协议

维护一个发送窗口,采用累计确认的方式

3.4可靠传输的实现

3.4.1以字节为单位的滑动窗口

现假定 A 收到了 B 发来 的确认报文段,其中窗口是 20 字节,而确认号是 31 (这表明 B 期望收到的下一个序号是 31 ,而序号 30 为止的数据已经收到了)。根据这两个数据,A 就构造出自己的发送窗口

~凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。 

~发送方的发送窗口大小还要受到当时网络拥塞程度的制约

~发送窗口后沿不可能向后移动,因为不能撤销掉已收到的确认。但是发送窗口前沿也有可能向后收缩

举例说明

假定 A 发送了序号为 31 ~ 41 的数据,

要描述一个发送窗口的状态需要三个指针:P1,P2 和 P3

发送窗口通常只是发送缓存的一部分。已被确认的数据应当从发送缓存中删除,因此发送缓存和发送窗口的后沿是重合的。(后沿指最左边)

3.4.2超时重传时间的选择

由于 TCP 的下层是互联网环境,发送的报文段可能只经过一个高速率的局域网,也可能经过多个低速率的网络,并且每个 IP 数据报所选择的路由还可能不同。如果把超时重传时间设置得太短,就会引起很多报文段的不必要的重传,使网络负荷增大。但若把超时重传时间设置得过长,则又使网络的空闲时间增大,降低了传输效率。
1.确定RTT(round trip time)
TCP 保留了 RTT 的一个 加权平均往返时间 RTT S (这又称为 平滑的往返时间 S 表示 Smoothed
显然,超时计时器设置的 超时重传时间 RTO (RetransmissionTime-Out) 应略大于上面得
出的加权平均往返时间 RTT S
2.计算RTO(RetransmissionTime-Out)
RTT_D 是 RTT 的偏差的加权平均值, 它与 RTT S 和新的 RTT 样本之差有关。
那么 RTT_D如何计算呢?
当第一次测量时, RTT_D 值取为测量到的 RTT 样本值的一半。
在以后的测量中,则使用下式计算加权平均的 RTT_D

现在我们已经知道了RTO的计算方法,但是这是在一切正常情况下(不出现确认丢失...)的理想方法 ,但如果出现超时重传的情况——如何判定此确认报文段是对先发送的报文段的确认,还是对后来重传的报文段的确认?

        
        由于重传的报文段和原来的报文段完全一样,因此源主机在收到确认后,就无法做出正确的判断,而正确的判断对确定加权平均 RTTS的值关系很大。
        若收到的确认是对重传报文段的确认,但被源主机当成是对原来的报文段的确认,则这样计算出的 RTTS 和超时重传时间 RTO 就会偏大。若后面再发送的报文段是经过重传后才收到确认报文段,则按此方法得出的超时重传时间 RTO 就越来越长
        
        同样,若收到的确认是对原来的报文段的确认,被当成是对重传报文段的确认,则
由此计算出的 RTT S RTO 都会偏小。这就必然导致报文段过多地重传。这样就有可能使
RTO 越来越短

3.4.3选择确认SACK

TCP 的接收方在接收对方发送过来的数据字节流的序号不连续,结果就形成了一些不连续的字节块(如图 5-21 所示)。
如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确( 即不连续的左右边界 )地告诉发送方,使发送方不要再重复发送这些已收到的数据。

        但是,TCP 的首部没有哪个字段能够提供上述这些字节块的边界信息。所以只能够在首部的扩展选项中指明。但是首部最长60B,固定20B,剩下40B可用。

        

        RFC 2018 规定,如果要使用选择确认 SACK,那么在建立 TCP 连接时,就要在 TCP 首部的选项中加 上“允许 SACK ”的选项,而双方必须都事先商定好
        
        由于首部选项的长度最多只有 40 字节,而指明一个边界就要用掉 4 字节(因为序号有 32 位,需要使用 4 个字节表示),因此在选项中最多只能指明 4 字节块的边界信息。这是因为 4 个字节块共有 8 个边界,因而需要用 32 个字节来描述。另外还需要两个字节。一个字节用来指明是 SACK 选项,另一个字节是指明这个选项要占用多少字节。如果要报告五个字节块的边界信息,那么至少需要 42 个字节。

3.5流量控制

3.5.1利用滑动窗口实现流量控制

        一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。所谓流量控制 (flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。
实例:
rwnd是接收窗口,假设初始状态rwnd=400
        我们应注意到,接收方的主机 B 进行了三次流量控制。第一次把窗口减小到 rwnd = 300 ,第二次又减到 rwnd = 100 ,最后减到 rwnd = 0 ,即不允许发送方再发送数据了。
        现在我们考虑一种情况。在图 5-22 中, B A 发送了零窗口的报文段后不久 B 的接收缓存又有了一些存储空间。于是 B A 发送了 rwnd = 400 的报文段。然而这个报文段在 传送过程中丢失了。A 一直等待收到 B 发送的非零窗口的通知,而 B 也一直等待 A 发送的 数据。如果没有其他措施,这种互相等待的 死锁 局面将一直延续下去。

3.5.2TCP传输效率

3.6拥塞控制

3.6.1拥塞控制基础概念和对比了解

在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞 (congestion)
拥塞控制和流量控制的区别

1. 作用目标不同

  • 流量控制
    流量控制的目标是解决发送方与接收方之间的速率匹配问题,防止发送方以过快的速度发送数据,从而超出接收方的处理能力。
    对象:发送方与接收方之间的通信。

  • 拥塞控制
    拥塞控制的目标是解决网络中整体资源的合理分配问题,防止网络中的路由器或链路发生拥塞(数据流量超过网络承载能力)。
    对象:整个网络环境中的流量调节。


2. 发生的原因不同

  • 流量控制的主要原因是:

    • 接收方的缓存容量有限,无法处理过多的接收数据。
    • 接收方处理数据的速度较慢,可能出现数据丢失或丢弃。
  • 拥塞控制的主要原因是:

    • 网络中链路带宽或路由器缓存不足,导致拥塞。
    • 多条数据流同时通过同一段链路,造成资源争夺和延迟增加

3. 解决机制不同

流量控制机制(点对点)

流量控制通常通过协议来调节发送方的发送速率,使其适应接收方的处理能力。常见的流量控制方法有:

  1. 停止-等待协议

    • 发送方每次发送一个数据段,等待接收方确认,只有收到确认后才能继续发送。
  2. 滑动窗口协议

    • 接收方会通知发送方一个窗口大小,表示当前能接收的数据量。发送方只能在窗口范围内发送数据,超过窗口大小的发送会被暂停。
  3. 显式反馈

    • 接收方主动向发送方发送控制信息,告知其当前的缓冲区状态和接受能力。

拥塞控制机制(全局范围)

拥塞控制的重点是调节整个网络中的流量,以防止链路和路由器拥塞。常见的拥塞控制方法有:

  1. TCP 拥塞窗口

    • TCP 使用一个**拥塞窗口(cwnd)**来限制发送方可以发送的数据量。
    • 拥塞窗口的大小动态调整,主要算法包括:
      • 慢启动:初始阶段窗口指数增长。
      • 拥塞避免:窗口线性增长,逐步探测网络容量。
      • 快速重传和快速恢复:丢包时快速减小窗口,避免严重拥塞。
  2. 主动队列管理(AQM)

    • 在路由器中,通过主动丢弃分组(如 RED 算法)来警告发送方减小发送速率。
  3. 显式拥塞通知(ECN)

    • 路由器检测到拥塞时,在数据包头中设置标志位,通知发送方减少流量。

4. 影响范围不同

  • 流量控制

    • 只在发送方和接收方之间起作用,属于点对点的局部控制。
  • 拥塞控制

    • 作用于整个网络,调整网络中所有流量发送方的速率,属于全局控制。

下面详细介绍如何进行拥塞控制:

 3.6.2拥塞控制算法

1.慢开始和拥塞避免
下面讨论的拥塞控制也叫做 基于窗口 的拥塞控制
发送方控制拥塞窗口的原则是:
        只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞。
慢开始

由小到大逐渐增大拥塞窗口数值。

1.初始拥塞窗口设置

2.增加规则

实例:

但是现在又出现了一个问题,cwnd的过量增长导致网络拥塞。所以我们设置一个慢开始门限 ssthresh,并且结合拥塞避免算法。

拥塞避免算法

实例:

 初始阶段我们设置慢门限=16

并且在经过4号状态的时候,拥塞窗口并没有回到慢开始的初始状态,而是大于慢开始的初始窗口,这就涉及到了我们的快重传算法

快重传
采用快重传算法可以让发送方 尽早知道发生了个别报文段的丢失
        现假定接收方没有收到 M 3 但却收到了 M 4 。本来接收方可以什么都不做。但按照快重传算法,接收方必须立即发送对 M 2 的重复确认 ,以便让发送方及早知道接收方没有收到报文段 M 3 。发送方接着发送 M 5 M 6 。接收方收到后也仍要再次分别发出对 M 2 的重复确认。
        
        快重传算法规定, 发送方只要一连收到 3 个重复确认 就知道接收方确实没有收到报文段 M 3 因而应当立即进行重传(即“快重传”) ,这样就不会出现超时,发送方也不就会误认为出现了网络拥塞。

 3.6.3主动队列管理AQM

上一节讨论的 TCP 拥塞控制并没有和网络层采取的策略联系起来。网络层的策略对 TCP 拥塞控制影响最大的就是路由器的分组丢弃策略

尾部丢弃策略——由于队列长度总是有限的,因此当队列已满时,以后再到达的所有分组(如果能够继续排队,这些分组都将排在队列的尾部)将都被丢弃。
那么在这种策略下,当队列满的时候,如果有多个不同TCP连接的分组发送将会被丢弃,结果是分组没有发送导致确认超时,而超时后默认发生网络拥塞,调整慢开始门限,使这许多 TCP 连接在同一时间 突然都进入到慢开始状态。全局同步使得全网的通信量突然下降了很多(全局同步)
为了避免上述 全局同步的发生,通过 主动队列管理 AQM解决。
“主动”就是不要等到路由器的队列长度已经达到最大值时才不得不丢弃后面到达的分组。即主动丢弃分组,不多条让TCP线路同时降速。缓解总流量,但又不浪费总流量。
采用RED算法

3.7TCP运输连接管理

3.7.1TCP连接建立

简单来说,没有第三次握手可能会导致服务器资源被浪费,因为不知道客户端是否正常。

3.7.2TCP连接释放

 

B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。(四次握手的第三个报文) 。

A 在收到 B 的连接释放报文段后,必须对此发出确认。
并且A必须经过时间等待计时器(TIME-WAIT timer)设置的时间 2MSL 后,A 才进入到 CLOSED 状态。
清除“死客户端”,防止资源浪费。

http://www.kler.cn/a/518683.html

相关文章:

  • NX100 参数配置
  • 使用云服务器自建Zotero同步的WebDAV服务教程
  • MongoDB 备份与恢复综述
  • Linux 环境变量
  • SocketCAN
  • 备赛蓝桥杯之第十五届职业院校组省赛第三题:产品360度展示
  • Golang笔记——GPM调度器
  • 《探秘鸿蒙Next:人工智能助力元宇宙高效渲染新征程》
  • vue2和vue3组件之间的通信方式差异
  • 【C++】特殊类设计、单例模式与类型转换
  • 探秘数据仓库新势力:网络建模
  • 基于微信的原创音乐小程序的设计与实现(LW+源码+讲解)
  • 机器人SLAM建图与自主导航
  • 2025年美赛数学建模B题管理可持续旅游
  • vue3中自定一个组件并且能够用v-model对自定义组件进行数据的双向绑定
  • 如何有效利用数据采集HTTP代理
  • ASP.NET代码审计 SQL注入篇(简单记录)
  • 2024年终总结:技术成长与突破之路
  • CCF开源发展委员会开源供应链安全工作组2025年第1期技术研讨会顺利举行
  • FastDFS的安装及使用
  • LabVIEW心音心电同步采集与实时播放
  • [c语言日寄]结构体的使用及其拓展
  • Arcgis国产化替代:Bigemap Pro正式发布
  • OpenHarmony5.0 AVPlayer新特性开发指导(二)
  • 基于本地事务表+MQ实现分布式事务
  • 计算机工程:解锁未来科技之门!