《计算机网络》(第8版)第五章 运输层 复习笔记

第五章 运输层

一、运输层协议概述

1 运输层的功能
从通信和信息处理角度讲,传输层向应用层提供服务,是面向通信的最高层,也是面 向用户功能的最底层,它的主要功能有:
(1)提供用户进程之间的逻辑通信(端到端通信);
(2)提供复用与分用;
(3)对收到的报文进行差错检测;
(4)提供面向连接的 TCP 协议和无连接的 UDP 协议。

2 运输层的端口
(1)端口的作用
①应用层的各个进程的数据可以通过端口向下交付给传输层;
②传输层的数据可以通过端口上交给应用层。
(2)端口号
应用进程可以通过端口号进行标识,可将端口号分为两类:
①服务端使用的端口号
服务端可以使用范围为0~1023 的熟知端口号和范围为 1024~49151 的登记端口号两 类。如表 5-1 所示为常用的熟知端口号(需要记住)。
在这里插入图片描述
表 5-1 常用熟知端口号
②客户端使用的端口号
这类端口号仅在客户进程运行时才动态选择,范围为49152~65535 ,又叫临时端口号。

二、用户数据报协议 UDP

1 UDP 概述
(1)UDP 的概念
在 IP 的数据报服务之上增加了复用和分用功能以及差错检测功能,且 UDP 只做传输 层协议能做的最少工作。
(2)UDP 的主要特点
①UDP 是无连接的,发送数据之前不需要建立连接,减少了开销和发送数据之前的时 延;
②UDP 是尽最大努力交付的,不保证可靠交付;
③UDP 是面向报文的,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向 下交付给 IP 层;
④UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低;
⑤UDP 支持一对一、一对多、多对一和多对多的交互通信;
⑥UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。

2 UDP 的首部格式
如图 5-1 所示,用户数据报 UDP 有数据字段和首部字段,首部字段只有 8 个字节,共 四个字段,分别为:
(1)源端口:源端口号,在需要对方回信时选用,不需要时可用全0;
(2) 目的端口: 目的端口号,在终点交付报文时必须要使用;
(3)长度:UDP 用户数据报的长度,其最小值是 8(仅有首部);
(4)检验和:检测 UDP 用户数据报在传输中是否有错,有错就丢弃。 【注意】UDP 检验采用的方式为:
①在发送方,将全“0”放入检验和字段,并添加伪首部,再将 UDP 数据报看成由许多
16 位的字符串连接起来,在通过二进制反码运算求和并将结果存入检验和字段;
②在接收方,将收到的 UDP 数据报及伪首部按二进制反码计算求和,若和为全“1”,则无差错,否则丢弃。
在这里插入图片描述
图 5-1 UDP 用户数据报的首部和伪首部

三、传输控制协议 TCP 概述

1 TCP 最主要的特点
(1)TCP 是面向连接的运输层协议,在使用TCP 协议之前,必须先建立 TCP 连接;
(2)每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一);
(3)TCP 提供可靠交付的服务,通过 TCP 连接传送的数据,无差错、不丢失、不重 复、并且按序到达;
(4)TCP 提供全双工通信;
(5)面向字节流,TCP 中的“流”指的是流入到进程或从进程流出的字节序列。

2 TCP 的连接
TCP 将连接作为最基本的抽象,且 TCP 连接的端点叫做套接字;可用套接字标识网络 上某主机上的某应用(进程),套接字=(主机 IP 地址,端口号)。

四、可靠传输的工作原理

1 停止等待协议
(1)停止等待的概念
在全双工工作方式下,通信双方既是发送方又是接收方;“停止等待”即每发送完一个 分组就等待对方的确认,确认后再发送下一个分组。
(2)停止等待协议的两种基本情况
①无差错情况:如图 5-2(a)所示,A 发送分组 M1 ,等待 B 确认 M1 后再继续发送 M2;
在这里插入图片描述图 5-2 停止等待协议
②出现差错
分组可能在传输过程中出现差错,主要有以下情况:
a .超时重传:如图 5-2(b)所示,B 接收 M1 时检测出差错后丢弃 M1 ,停止等待协议 要求 A 每发完一个分组便设置一个超时计时器,当 A 超过一段时间仍未收到确认,就 认为刚才发送的分组丢失,并进行超时重传;
b .确认丢失:如图 5-3(a)所示,B 接收到无差错的 M1 时,向 A 发回确认,但在途 中确认丢失,A 仍然无法得到 B 的确认,此时 A 进行超时重传,且在重传的新的 M1 到达 B 时,B 将丢弃重复的 M1 并发回重传确认;
c .确认迟到:如图 5-3(b)所示,M1 传输并无差错,只是 M1 的确认到达 A 时迟到了,此时 A 对重复的确认什么也不做,而 B 对丢弃重复的 M1。
在这里插入图片描述
图 5-3 确认丢失和确认迟到
【注意】
①发送方发送完一个分组后,必须暂时保留已发送的分组的副本;
②分组和确认分组都必须进行编号;
③超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些;
④停止等待协议信道利用率低(信道利用率=发送分组需要的时间/(发送分组需要的 时间+往返时间+确认分组需要的时间))。

2 连续 ARQ 协议
如图 5-4(a)所示,发送方维持的发送窗口大小为 5 ,位于发送窗口内的5 个分组都 可连续发送出去,而不需要等待对方的确认。连续 ARQ 协议规定发送方每收到一个确 认,就把发送窗口向前滑动一个分组的位置,如图 5-4(b)所示;接收方一般采用累 积确认的方式,在收到几个分组后,对按序到达的最后一个分组发送确认。
在这里插入图片描述
图 5-4 连续 ARQ 协议的工作原理

五、TCP 报文段的首部格式

TCP 传输的数据单元称为 TCP 报文段,首部的前 20 个字节是固定的,如图5-5 所示, 后面有 4n 字节是可选的,TCP 首部的最小长度是 20 字节。其首部各字段说明如下:
(1)源端口和目的端口:各占 2 个字节,分别写入源端口号和目的端口号;
(2)序号: 占 4 字节,指本报文段发送的数据的第一个字节的序号;
(3)确认号: 占 4 字节,是期望收到对方下一个报文段的第一个数据字节的序号;
(4)数据偏移(即首部长度): 占 4 位,指出TCP 报文段的数据起始处距离 TCP 报 文段的起始处有多远;
(5)保留: 占 6 位,保留为今后使用,但目前应置为 0;
(6)紧急位URG:当 URG =1 时,表明紧急指针字段有效;
(7)确认位ACK:仅当 ACK =1 时确认号字段才有效,TCP 连接建立后所有传送的 报文段 ACK 均置为 1;
(8)推送位PSH:当 PSH =1 时,将报文段尽快交付给应用程序;
(9)复位位RST:当 RST =1 时,TCP 连接中出现严重差错,必须释放连接,再重新 建立运输连接;
(10)同步位 SYN:在连接建立时用来同步序号,SYN =1 表示该报文为连接请求或 接收报文;
(11)终止位 FIN:当 FIN =1 时,表示该报文段发送方数据发送完毕,请求释放连接;
(12)窗口: 占 2 字节,指出当前允许对方发送的数据量;
(13)检验和: 占 2 字节,检验和字段检验的范围包括首部和数据两部分;
(14)紧急指针: 占 2 字节,它指出本报文段中紧急数据的字节数;
(15)选项:长度可变,最长可达 40 字节。
在这里插入图片描述
图 5-5 TCP 报文段的首部格式

六、TCP 可靠传输的实现

1 以字节为单位的滑动窗口
在任意时刻,发送方维持一组允许发送的帧的序号,即发送窗口;接收方维持一组允 许接收的帧的序号,称为接收窗口;TCP 的滑动窗口是以字节为单位的,其工作原理 如图 5-6 与图 5-7 所示:
(1)构造发送窗口(发送方由接收方发回的确认报文构造自己的发送窗口);
(2)发送方发送数据,接收方收到数据后发回确认;
(3)发送方每收到一个确认,发送窗口便向前滑动一个位置,当发送窗口内没有可以 发送的数据时(窗口内的数据全部发送但未收到确认),发送方停止发送,直到收到 接收方的确认使窗口移动后才能继续发送;
(3)接收方每收到一个数据,接收窗口前移一个位置,并发回确认,接收窗口外的数据一律丢弃。
在这里插入图片描述
图 5-6 根据 B 给出的窗口值,A 构造出自己的发送窗口
在这里插入图片描述
图 5-7 A 发送了 11 个字节的数据

2 超时重传时间的选择
TCP 的发送方在规定时间内未收到确认时需要进行重传,而超时重传时间的选择采用 一种自适应算法:
(1)从第一次测量 RTT 样本开始,计算加权平均往返时间:新的 RTTS =(1-α) × (旧的 RTTS )+α×(新的 RTT 样本),其中 0≤α<1 ,RFC 6298 推荐的α = 1/8 =
0.125;
(2)计算 RTT 的偏差的加权平均值:新的 RTTD =(1-β) ×(旧的 RTTD )+ β×|RTTS-新的 RTT 样本| ,这里β是小于 1 的系数,推荐使用 1/4 =0.25;
(3)超时计时器设置的超时重传时间 RTO =RTTS+4RTTD。

3 选择确认 SACK
TCP 的接收方在接收发送方发送的序号不连续的数据字节流时,若这些字节的序号都 在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方, 使发送方不要再重复发送这些已收到的数据;而这些准确信息便包括了每一个字节块 的左边界和右边界,这时的确认除了保持原有的“确认号字段”不变外,还需要在 TCP 首部增加 SACK 选项。

七、TCP 的流量控制

TCP 的流量控制是使用滑动窗口实现的,记接收窗口为 rwnd ,发送方 A 发送数据给接 收方 B ,B 向 A 发送确认报文,这时确认报文首部中的窗口字段将 rwnd 通知给 A ,A 再通过 rwnd 控制自己发送窗口的大小。例如图5-8 所示。
在这里插入图片描述
图 5-8 利用可变窗口进行流量控制举例
图 5-8 中的例子存在一种特殊情况,B 向 A 发送了零窗口的报文段后不久,B 又向 A 发送了 rwnd =400 的报文段,然而这个报文段在传送过程中丢失了,A 一直等待收到 B 发送的非零窗口的通知,而 B 也一直等待 A 发送的数据,这就造成了死锁;为解决 这个问题可以为每一个连接设置一个持续计时器。

八、TCP 的拥塞控制

1 拥塞控制和流量控制的区别
(1)拥塞控制是为了让网络能够承受现有的网络负荷,防止过多数据注入网络,是一 个全局控制过程;
(2)流量控制是接收方控制发送方,是一种点对点的流量的控制。

2 几种拥塞控制方法
(1)慢开始和拥塞避免
①慢开始算法
建立了TCP 连接并开始发送报文段时,令拥塞窗口 cwnd =1(即一个最大报文长度
MSS),并在每次收到一个对新的报文段的确认后,使 cwnd+1 ,这种使得每经过一 个往返时延 RTT 后拥塞窗口cwnd 加倍(即cwnd 的大小呈指数增长)直到 cwnd 增大 到慢开始门限 ssthresh 的过程叫慢开始算法。
②拥塞避免算法
发送端的拥塞窗口cwnd 每经过一个往返时延 RTT 就增加一个 MSS 的大小(按线性增 长),直到出现一次超时(网络拥塞),令慢开始门限 ssthresh 等于当前 cwnd 的一半, 这种算法叫拥塞避免算法。
③网络拥塞的处理过程
例如在如图5-9 所示的例子中,拥塞处理过程如下:
a .初始时,拥塞窗口 cwnd =1 ,慢开始门限的初始值 ssthresh =16 个报文段;
b .在执行慢开始算法时,拥塞窗口cwnd 的初始值为 1 ,以后发送方每收到一个对新 报文段的确认 ACK ,就把拥塞窗口值加 1 ,然后开始下一轮的传输,这个过程呈指数 增长,当拥塞窗口cwnd 增长到慢开始门限值 ssthresh 时,就改为执行拥塞避免算法, 此时拥塞窗口按线性规律增长。
c .假定拥塞窗口的数值增长到 24 时,网络出现超时(网络拥塞),更新 ssthresh =12 (即变为超时时刻的拥塞窗口数值 24 的一半),拥塞窗口再重新设置为 1 ,并继续执行 a~c 的过程。
在这里插入图片描述
图 5-9 慢开始和拥塞避免算法的实现举例
(2)快重传和快恢复 ①快重传
当发送端连续收到三个重复的 ACK 报文时,直接重传对方尚未收到的报文段,而不必 等待超时计时器超时。
②快恢复
如图5-10 所示,快恢复算法要求当发送方连续收到三个重复确认时,就执行“乘法减 小”算法,把慢开始门限 ssthresh 减半,再令 cwnd =新的 ssthresh ,之后执行拥塞避免 算法,使 cwnd 线性增长。
【注意】不管是拥塞控制还是流量控制都会影响发送窗口的大小,即发送大小取两者 的最小值。
在这里插入图片描述
图 5-10 快恢复算法示例

九、TCP 的运输连接管理

1 TCP 的连接建立
如图 5-11 所示,TCP 连接的建立即三次握手的过程,其步骤如下:
(1)客户机向服务器发送一个连接请求报文,其中 SYN =1 ,且随机选择一个起始序 号 seq =x;
(2)服务器收到连接请求报文后,若同意建立连接则发回确认并为该 TCP 连接分配 TCP 缓存和变量,确认报文中 SYN =1 ,ACK =1 ,确认号字段 ack =x+1 ,并产生服 务器的随机起始序号 seq =y;
(3)客户机收到确认报文后,还需向服务器发送确认,且需要给该连接分配 TCP 缓存和变量,这个报文中 ACK =1 ,seq =x+1 ,ack =y+1。
在这里插入图片描述

图 5-11 用三次握手建立 TCP 连接

2 TCP 的连接释放
如图5-12 所示,TCP 连接的释放即四次挥手的过程,其步骤如下:
(1)客户机想释放连接时,向服务器发送连接释放报文,并停止发送数据(主动关闭 连接),该报文中 FIN =1 ,seq =u(这里 u 是前面传送过的数据的最后一个字节的 序号加 1),注意此时服务器仍能向客户机发送数据。
(2)服务器收到连接释放请求后发送确认报文,其中 ACK =1 ,seq =v ,ack =u+1, 此时客户机到服务器这个方向的连接释放成功。
(3)若服务器想释放连接,则向客户机发送连接释放报文,此时 FIN =1 ,ACK =1, seq =w ,ack =u+1。
(4)客户机收到服务器的连接释放请求后,也需要发送确认报文,此时 ACK =1,
seq =u+1 ,ack =w+1 ,之后 TCP 连接还需要时间等待计时器设置的时间2MSL 后才能关闭连接。
在这里插入图片描述
图 5-12 TCP 连接释放的过程

3 TCP 的有限状态机
如图5-13 所示为 TCP 连接的各种状态之间的关系,即给出了TCP 的有限状态机。图 中每一个方框即TCP 可能具有的状态。每个方框中的大写英文字符串是 TCP 连接状态 名。状态之间的箭头表示可能发生的状态变迁。箭头旁边的字,表明引起这种变迁的 原因,或表明发生状态变迁后又出现什么动作。粗实线箭头表示对客户进程的正常变 迁。粗虚线箭头表示对服务器进程的正常变迁。另一种细线箭头表示异常变迁。
在这里插入图片描述
图 5-13 TCP 的有限状态机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3279982.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

HTML基础1-文本级元素

HTML 简介 什么是 HTML? HTML (HyperText Markup Language) 是一种用于创建网页的标准标记语言。它通过使用一系列预定义的元素来描述文档的结构和外观, 您可以使用 HTML 来建立自己的 WEB 站点。 HTML 的作用 HTML 用于定义网页的结构,…

Openwrt接UVC摄像头丢帧分析

Openwrt接UVC摄像头,使用mjpg-streamer,此处默认已经移植成功。这里以Skylab的SKW99为例进行说明,SKW99为高通QCA9531的方案,CPU的频率为650MHz。最近在应用过程中,需求完成后,发现视频码流下降了&#xff…

入门 PyQt6 看过来(案例)16~ 竖状菜单

本文依照上一篇文章进行简单的拓展,做一个竖状的堆栈菜单。效果如下: ​ 首先我们先进行分析以,页面左侧是菜单栏,按照堆栈式列表展示,包含基本信息和编程语言(仔细的你是否发现路老师文字写错了&#xff1…

【数据结构】链式二叉树的实现和思路分析及二叉树OJ

【数据结构】链式二叉树的实现和思路分析及二叉树OJ 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】链式二叉树的实现和思路分析及二叉树OJ前言一.链式二叉树的定义及结构二.链式二叉树的遍历2.1前序遍历2.2中…

汇昌联信数字做拼多多运营实力强吗?

拼多多作为中国领先的电商平台之一,其运营实力一直是业界关注的焦点。汇昌联信数字公司作为一家专注于电商运营的企业,其在拼多多平台上的表现如何,是否具备强大的运营能力,是本篇文章探讨的主题。 一、答案是肯定的,汇…

C++高性能通信:图形简述高性能中间件Iceoryx

文章目录 1. 概述2. 支持一个发布者多个订阅者2.2 Iceoryx为何不支持多个发布者发布到同一个主题 3. Iceoryx的架构和数据传输示意图3.1 发布者与订阅者的通信机制3.2 零拷贝共享内存通信机制 4. 使用事件驱动机制4.1 WaitSet机制4.2 Listener机制 5. 已知限制6. 参考 1. 概述 …

Python .whl 独立安装和全部依赖安装命令

以安装 Flask 为例: 1. 独立安装 pip install whl_files/Flask-1.1.2-py2.py3-none-any.whl 2. 安装 Flask 全部依赖包和自己 cd /path/to/flask/1.0 pip install --no-index --find-links/path/to/downloaded/files Flask1.1.2 cd /path/to/flask/2.0 pip install …

批量输出文件夹内所有文件名和文件——vba实现

导出一个文件夹下所有文件名,可用vba插件实现,如图 如下图,已在桌面生成一个txt文本,但此方法只可输出一级目录下的文件,若输出所有文件,则需修改插件代码 (若想导出硬盘下所有文件和文件夹&…

网络通信HTTP

学习内容 这是昨日学习内容,之后花费昨晚和今天一整天的时间做了个小项目 项目:基于网络爬虫的天气查询系统 其中用了cJSON库来解析相关内容,感兴趣的朋友也可以做一做

SM2在线解密工具

SM2加密算法,采用公钥加密、私钥解密,在上一篇文章提到SM2加密工具,对应的这里再次提供SM2的在线解密工具 在线SM2解密工具 这个工具非常强大,不管什么加密模式都能无需指定的直接解密。

yolov10在地平线旭日X3派上的部署和测试(Python版本和C++版本)

0、搭建开发环境 当前的测试根据一下的步骤并修改源码是可以实现yolov8的板端运行,如果不想再搭建环境和测试代码bug上浪费更多的时间可以直接获取本人的测试虚拟机,所有的测试代码、虚拟环境和板端测试工程以全部打包到了虚拟机,需要的可以…

MLP多层感知机与Pytorch实现

参考文章: 1.动手学深度学习——多层感知机(原理解释代码详解)_多层感知机 代码-CSDN博客 2.4.1. 多层感知机 — 动手学深度学习 2.0.0 documentation 3.深度理解多层感知机(MLP) | 米奇妙妙屋 1. 神经网络由来 神经网…

Qt Designer的尺寸策略学习笔记

在 PySide6(或者 PyQt6)中,小部件的 sizePolicy 主要用于控制小部件在布局中的行为,特别是在调整窗口大小时。sizePolicy 由两个主要策略组成:水平策略和垂直策略。它们可以进一步细分为伸展、固定、最小、最大等类型。…

FP分数规划在无线通信中的应用(II)

3. 具体例子 3.1-3.3都只需要用第一章concave-convex方法求解,3.4-3.6需要用到第二章的拉格朗日对偶变换,而且具体解 x \mathbf{x} x时需要对离散变量单独开发算法。 3.1 多小区SISO能量分配 第一个例子是具有一组单天线基站(BSs&#xff…

网工内推 | 合资公司、上市公司数据库工程师,OCP/OCM认证优先,双休

01 欣旺达电子股份有限公司 🔷招聘岗位:数据库管理高级工程师 🔷岗位职责: 1、负责数据库规划、管理、调优工作; 2、负责数据库应急预案制定、应急预案维护和应急支持; 3、负责数据库异常处理&#xff…

TwinCAT3 创建变量并链接

文章目录 右键 PLC 选择添加新项 选择 Standard PLC Project,并把名称改成英文,例如下图中的‘test’ 双击 POUs 文件下的 MAIN 开始编程,编辑一段简单的程序,输入导通输出 程序写好后右键 test Project,选择 Bu…

【Unity渲染】Drawcall优化:利用GPU高效渲染大量动画角色

在游戏开发中,创建一个充满活力和真实感的游戏世界是至关重要的。Render-Crowd-Of-Animated-Characters是一个专注于高效渲染大量动画角色的项目,它通过优化技术和算法,使得在Unity中渲染动画角色群集变得更加高效和可行。 项目概述 这个项…

【C 语言】深入理解冒泡排序算法

0. 前言 冒泡排序是一种经典且基础的排序算法。它虽然在效率上并非最优,但对于初学者理解排序的基本概念和逻辑有着重要的意义。 1. 冒泡排序的基本思想 冒泡排序的基本思想是通过反复比较相邻的元素并交换它们(如果顺序错误),…

使用Chainlit接入通义千问快速实现一个多模态的对话应用

开通灵识服务 首先需要到阿里云-模型服务灵积开通账户,获得apiKey 模型服务灵积 https://dashscope.aliyun.com/ 进入控制台 ,在API-KEY管理里,创建一个新的API-KEY,然后保存起来,后面会用到。 模型服务灵积服务所有API文档地址…

USB 接口小科普

专栏文章目录传送门:返回专栏目录 Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】 文章目录 目录 1. 基础概念 2. USB 接口 3. USB 传输标准 3.1 USB 传输速率 3.2 雷电技术 4 USB 总结 Hi&…