计网第五章运输层

image-20240109200748597

一。运输层协议概述

运输层提供应用程序间的逻辑通信

运输层还要对收到的报文进行差错检测

网络层主机之间的通信提供服务

​ 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,属于面向通信部分的最高层,同时也是用户功能中的最低层。

​ 物理层、数据链路层、网络层共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信

​ 但实际在网络中进行通信的真正实体是位于通信两端主机中的进程

image-20240109202823853

为运行在不同主机上的应用程序提供直接的通信服务是运输层的任务,运输层协议又称端到端协议

端口

端口号只有本地意义,端口号只是为了标识本计算机应用层中的各进程

不同计算机的相同端口号没有联系

​ 范围: 0 ~ 65535

熟知端口号: 1 ~ 1023

应用 FTP SSH TELNET SMTP DNS HTTP HTTPS
熟知端口号 21 22 23 25 53 80 443

登记端口号: 1024 ~ 49151

客户端使用的端口号

  • 留给客户进程暂时使用(短暂端口号)
  • 49152 ~ 65535

image-20240109205608583

发送方复用和接收方分用

image-20240109205157574

复用: 应用层所有的应用程序都可以通过运输层再传送到IP层(网络层)

分用: 运输层从IP层收到发给各应用程序的数据后,必须分别交付指明的各应用程序(根据端口)

二。用户数据报协议UDP

1.UDP概述

UDP是只在IP的数据报服务之上增加很少的功能(复用分用功能和差错检测功能)

主要特点

简单方便,但不可靠

  1. UDP是无连接
  2. UDP使用尽最大努力交付。不保证可靠交付。主机不需要维持复杂的连接状态表
  3. UDP是面向报文的

image-20240109212641036

UDP一次交付一个完整的报文。

  • 若报文太长,UDP交给IP层后,IP层可能需要分片,降低效率
  • 若报文太短,UDP交给IP层后,会使IP数据报的首部的相对长度太大,降低了IP层的效率
  1. UDP没有拥塞控制

  2. UDP支持一对一,一对多,多对一和多对多的交互通信

  3. UDP的首部开销小,只有8个字节(TCP有20个字节)

UDP的首部格式

image-20240109213135789

  1. 源端口: 源端口号。在需要对方回信时选用。不需要时可全为0

  2. 目的端口:目的端口号。终点交付报文时必须使用

  3. 长度: UDP用户数据报的长度,最小值为8(只有首部)

    ​ IP数据报首部长度固定为20字节

    ​ 数据长度 = 长度 - 首部长度

  4. 检验和: 检验UDP用户数据报在传输中是否有错,有错丢弃

UDP计算检验和的方法和计算IP数据报首部检验的方法相似

  • IP数据报的检验和值检验IP数据报的首部
  • UDP的检验和是把首部和数据部分一起检验(TCP也一样)

三。传输控制协议TCP

主要特点

  1. TCP是面向连接的运输层协议

  2. 每一条TCP连接只能有两个端点,每一条TCP连接都是点对点

  3. TCP提供可靠交付的服务。无差错、不丢失、不重复,按序到达

  4. TCP提供全双工通信

  5. 面向字节流

:star:首部格式

TCP虽然面向字节流,但TCP传送的数据单元却是报文段

TCP报文段分为首部数据两部分

image-20240109222115781

1.源端口和目的端口

​ 各占两个字节

2.序号

​ 范围 0 , 2^32-1。TCP连接中传送的字节流中的每一个字节都按顺序编号

3.确认号(ack)

​ 占4字节

​ 是期望收到对方下一个报文段的第一个数据字节的序号

4.数据偏移

​ 指出TCP报文段的数据起始处距离TCP报文段的起始处有多远

指出TCP报文段的首部长度

5.保留

​ 6位。保留为今后使用,目前置为零

6.紧急URG

​ URG = 1 表明紧急指针字段有效。表明报文段中有紧急数据,应该尽快传送

​ 发送方TCP把紧急数据插入到本报文段数据的最前面。紧急数据后面的数据仍然是普通数据

7.确认ACK

​ ACK = 1时确认号字段有效

​ ACK = 0时,确认号无效

​ TCP规定,在连接建立后所有传送的报文段必须把ACK置为 1 。

8.推送PSH

​ 发送方TCP把PSH置1,并立即创建一个报文段发送出去

​ 接收方TCP收到PSH = 1的报文段,尽快交付接受应用进程,不再等到整个缓存都填满了再向上交付

9.复位RST

​ RST = 1时,表明TCP连接中出现严重差错(如主机崩溃等),必须释放连接,然后再重新建立运输连接。

​ 还可以用来拒绝一个非法的报文段或拒绝打开一个连接

10.同步SYN

​ 在连接建立时同步序号

​ SYN = 1而ACK = 0时,表明这是个连接请求报文

​ 若同意建立连接,在响应的报文段中使 SYN = 1 和 ACK = 1

​ SYN置1表示这是一个连接请求或连接接受报文

11.终止FIN

​ 用来释放一个连接。

​ FIN = 1,表明此报文段的发送方的数据已放松完毕,并要求释放运输连接

12.窗口

​ 2个字节

​ 指的是发送本报文段的一方的接收窗口(不是自己的发送窗口)

窗口值作为接收方让发送方设置其发送窗口的依据

窗口字段明确指出了现在允许对方发送的数据量。窗口值经常动态变化

  • 发送一个报文段,确认号是701,窗口字段是1000
    • 告诉对方:701开始,我的接收缓存空间还能接收1000个字节数据

13.检验和

​ 2个字节

​ 检验和字段检验的范围包括首部和数据两部分。同UDP

14.紧急指针

​ 2个字节

​ URG = 1 时才有意义

​ 指出本报文段中的紧急数据的字节数

15.选项

​ 长度可变。最长40字节

​ 没有使用选项时,TCP首部长度时20字节

​ 最后的填充字段时为了使整个TCP首部长度是4字节的整数倍


最大报文段长度MSS

​ 指每个TCP报文段中的数据字段的最大长度(TCP报文段长度 - TCP首部长度)。

​ 数据字段加上TCP首部 = TCP报文段

:star:TCP流量控制

目的

​ 让发送方的发送速率不要太快,让接收方来得及接收

流量控制举例

image-20240110004211088

持续计时器

作用

​ 如果主机B发送了0窗口通知后,主机A会等待主机B发送非0窗口通知。如果主机B在发送非0窗口通知的报文段在传送过程中丢失后,主机B会一直等待主机A的数据,主机A 也在等待B发送非0窗口通知,陷入死锁。

image-20240110092139159

解决方法:

​ 收到对方0窗口通知后,就启动持续计时器。如持续计时器超时,就发送一个零窗口探测报文段(携带1字节的数据),对方就在确认这个探测报文段时给出现在的窗口值。

​ 如果窗口仍然是零,那么收到这个报文段的一方就重新设置持续计时器。

​ 零窗口计时器也有重传计时器,当超时后,零窗口计时器会重传

​ 即使接收窗口为0,也必须接收零窗口探测报文段、确认报文段、携带紧急数据的报文段。

image-20240110004506109

:star:拥塞控制

拥塞控制就是防止过多的数据注入到网络中,可以使网络中的路由器或链路不至于过载。拥塞控制的前提是网络能够承受现有的网络符负荷

拥塞的定义:

​ 某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分网络的性能就要变坏。

​ 如果出现拥塞不进行控制,整个网络的吞吐量将随输入负载的增大而下降

​ 资源:网络中的链路容量(带宽),交换结点中的缓存和处理机等

发生原因:

1.某个节点缓存的容量太小,到达该节点的分组因无存储空间被丢弃

2.输出链路的容量和出来就的处理速度并未提高

3.处理机处理的速度太低

4.拥塞尝尝趋于恶化

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

  • 流量控制往往是指点对点通信量的控制,是端到端的问题(接收端控制发送端)
  • 流量控制要做的就是抑制发送端发送数据的速率
  • 拥塞控制是全局性的过程。
  • 防止过多的数据注入到网络中

拥塞控制算法假定

  • 数据是单方向传送的,对方只传送确认报文
  • 接收方总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度来决定
    • 发送窗口 = 拥塞窗口

1.慢开始算法和拥塞避免算法

​ TCP在开始发送报文段时,设置 cwnd = 1,swnd = cwnd(拥塞窗口值 = 发送窗口值),即发送一个报文段。

一开始使用慢开始算法。设置cwnd = 1,ssthresh = 16(慢开始门限)发送方向接收发送TCP报文段0 , 接收方向发送方发送对报文段0的确认。然后cwnd指数增长到2,发送TCP报文段1~2。

​ 当cwnd > 16时,使用拥塞避免算法,每经过一个往返时间RTT,cwnd每次加1。

  • 当 cwnd < ssthresh 时 , 使用慢开始算法

  • 当 cwnd > ssthresh 时 , 使用拥塞避免算法

  • 当 cwnd = ssthresh 时 , 既可以用慢开始,也可以用拥塞避免算法

​ 如果在 cwnd = 24的时候网络出现了超时,这是网络发生拥塞的标志

  • 调整门限值 ssthresh = cwnd /2 = 12
  • cwnd = 1 开始执行慢开始算法

image-20240110095938265

​ 有时候个别报文段会在网络中意外丢失(出现3-ACK:发送方一连收到3个对同一报文段的重复确认),但实际上网络并没有发生拥塞。会误认为网络发生了拥塞,导致发送方错误地启动慢开始,减低效率。快重传和快恢复中解决

2.快重传和快恢复

快重传就是让发送方今早知道发生了个别报文段的丢失。让发生方尽快进行重传,不是等超时重传计时器超时了再重传

  • 接收方不要等到自己发送数据时才进行捎带确认,而是要立即发送确认
  • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
  • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,不是等超时计时器超时再重传
  • 对于个别丢失的报文段,不会出现超时重传,不会被误认为出现了拥塞。
  • 使用快重传可以使整个网络的吞吐量提高约20%

image-20240110103016631

  • 接收方发送对M2的重复确认,让发送方知道接收方没有收到报文段M3
  • 接受方发送的确认号 是期望收到对方下一个报文段的第一个数据字节的序号
    • 确认M1,即收到了序号0,期望收到序号1

​ 发送方一旦收到3个重复确认,就知道只是丢失了个别的报文段。就不启动慢开始算法,而是执行快恢复算法

  • 把门限值 ssthresh 和拥塞窗口的数值 cwnd 调整为当前窗口的一半,开始执行拥塞避免算法

image-20240110103729570

发送窗口

发送方窗口的上限值 = Min [ rwnd , cwnd]

  • rwnd: 接收方窗口值

​ 当 rwnd < cwnd 接收方的接收能力限制发送方窗口的最大值

​ 当 rwnd > cwnd 网络的拥塞程度限制发送方窗口的最大值

  • rwnd和cwnd中较小的一个,控制了发送方发送数据的速率

TCP的连接和释放

运输连接的三个阶段

image-20240110195515133

  • 建立TCP连接
  • 数据传送
  • 释放TCP连接

三报文握手

建立过程中要解决的三个问题

1。要使每一方都能确知对方的存在

2。要允许双方协商一些参数(最大窗口值、是否使用窗口扩大选项和时间戳选择等)

3。能够对运输实体资源(缓存大小、连接表中的项目等)进行分配

主动发起建立的应用程序叫作客户,被动等待连接建立的应用程序叫作服务器

image-20240110200203877

为什么不能只使用两报文握手

image-20240110200402936

  • 同步位 SYN = 1 表明是TCP连接请求报文段
    • SYN = 1 不能携带数据,但要消耗掉一个序号
  • SYN = 1, ACK = 1表明是TCP连接确认报文段

四报文挥手

image-20240110201056003

等待2MSL原因

​ MSL:最长报文段寿命

  • 防止客户端在发送最后的确认报文后,直接关闭。然而确认报文丢失的情况
  • 服务器端收不到确认报文,一直超时重复TCP连接释放不能关闭
保活计时器

image-20240110201445879

习题

1.

运输层在协议栈中的地位和作用。运输层的通信和网络层的通信有什么重要的区别?为什么运输层是必不可少的?

1) 运输层是ISO/OSI的第四层,处于 通信子网 和 资源子网 之间,是整个协议层次中最核心的一层。 它的作用是在优化 网络服务 的基础上,为源主机和目标主机之间提供可靠的价格合理的透明 数据传输 ,使高层服务用户在相互通信时不必关心通信子网实现的细节。

​ 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,属于面向通信部分的最高层,同时也是用户功能中的最低层。

2)运输层提供应用程序间的逻辑通信

运输层还要对收到的报文进行差错检测

网络层主机之间的通信提供服务

​ 网络层负责将数据包从源传输到目的地,而运输层负责确保数据包在源和目的地之间的可靠传输

​ 网络层是点对点的通信,而运输层是端到端的通信。

3)因为它提供了可靠的数据传输服务,确保数据在源和目的地之间的可靠传输

​ 如果没有运输层,数据报可能会在传输过程中丢失或损坏,导致通信失败。此外,运输层还提供了多种协议,如TCP和UDP,以满足不同的通信需求。


2.

网络层提供数据报或者虚电路服务对上面的运输层有何影响?

1
网络层提供数据报或者虚电路服务不影响上面的运输层的运行机制,但提供不同的服务质量

3.

端口的作用是什么。为什么要划分为三种

  • 端口的作用是对TCP/IP体系的应用进程进行统一的标志,使运行不同操作系统的计算机的应用进程能够互相通信。

  • 端口号只有本地意义,端口号只是为了标识本计算机应用层中的各进程。不同计算机的相同端口号没有联系

  • 端口是用来标志进程的。端口也就是协议端口号。

  • 但这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念。

    • 硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
  • 不同的系统,具体实现端口的方法可以是不同的(取决于系统使用的操作系统)。

    • TCP/IP 的运输层用一个16位端口号来标志一个端口。
  • 两个计算机中的进程要互相通信,不仅必须知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号

​ 不同的端口类别有其特殊的用途。例如,客户端是通信的发起方,而服务器是服务的提供方。它们对端口的使用要求是不同的。这三种端口号是:

(1)熟知端口号或系统端口号,数值为01023。
(2)登记端口号,数值为1024
49151。这类端口号是为没有熟知端口号的应用程序使用的。使用这类端口号必须按照IANA规定的手续登记,以防止重复。

(3)短暂端口号,数值为49152~65535。这类端口号仅在客户进程运行时才动态选择,是留给客户进程选择暂时使用。


计网第五章运输层
https://ahaostillcoding.github.io/2024/01/14/计网第五章运输层/
作者
a_hao
发布于
2024年1月14日
许可协议