计算机网络:运输层

0 本节主要内容

问题描述
解决思路

1 问题描述

1.1 知识回顾

利用如下拓扑对前面的知识进行回顾。
在这里插入图片描述
图1 拓扑图

问题:源主机 H 1 \textrm{H}_1 H1要和目的主机 H 2 \textrm{H}_2 H2进行通信,源主机 H 1 \textrm{H}_1 H1要构建数据包封装来自应用层的数据。根据MAC层和IP层首部字段信息,同学们可以去思考如何填充以下四个字段:(MAC目的地址,MAC源地址,IP源地址,IP目的地址)?
在这里插入图片描述
在这里插入图片描述
步骤:

  • 源主机 H 1 \textrm{H}_1 H1知道自己的IP地址,以及要送达的目的主机 H 2 \textrm{H}_2 H2的IP地址,也知道自己的MAC地址,唯一不知道的信息是目的MAC地址,那么首先要解决的是目的MAC地址填哪个的?
  • 根据前面的知识,我们知道 H 1 \textrm{H}_1 H1要填的目的MAC地址是路由器 R 1 \textrm{R}_1 R1接口0的MAC地址,那怎么才能知道接口0的MAC地址呢?
  • 由于 H 1 \textrm{H}_1 H1主机在配置网络的时候配置了缺省网关,缺省网关就是接口0的IP地址,知道了接口0的IP地址,利用ARP协议,就可以知道接口0的MAC地址,这样就可以把数据包完整的构建出来了;
  • 根据交换机的原理,数据包利用交换机转发机制转发到路由器 R 1 \textrm{R}_1 R1
  • 路由器 R 1 \textrm{R}_1 R1如何把数据交给目的主机 H 2 \textrm{H}_2 H2?利用数据包中目的IP地址查路由表,按照最长匹配原则,发现路由器 R 1 \textrm{R}_1 R1的路由表中的第二项匹配,也就是数据包要转发给接口1;
  • 接下来就是接口1如何把数据包交给目的主机 H 2 \textrm{H}_2 H2的问题了?因为目的主机 H 2 \textrm{H}_2 H2和路由器 R 1 \textrm{R}_1 R1接口1处于同一个子网,又需要重新构建数据包,四个字段(MAC目的地址,MAC源地址,IP源地址,IP目的地址)的“MAC源地址,IP源地址,IP目的地址”都是已知的,只有MAC目的地址未知,同样利用ARP协议,就可以知道目的主机 H 2 \textrm{H}_2 H2的MAC地址,这样就可以把数据包完整的构建出来了;
  • 再利用交换机转发机制,将数据包转发给目的主机 H 2 \textrm{H}_2 H2

同学们也可以利用这个拓扑,复习一下如下知识:

  • 交换机工作原理:在一个局域网中,如何利用交换机进行转发的?交换机中的转发表又是如何学习到的?
  • 子网划分:给定一个网络号128.1.0.0/16,如何划分为拓扑所示的三个子网?
  • IP分片:源主机 H 1 \textrm{H}_1 H1向目的主机 H 2 \textrm{H}_2 H2发送的数据包长度超过了以太网的运输能力,如何进行分片?分片的数据包又如何进行转发?到达目的主机后又如何进行重组?
  • 路由选择协议:拓扑中路由器 R 1 \textrm{R}_1 R1 R 2 \textrm{R}_2 R2的路由表是如何学习得到的?
  • ARP协议:已知对方的IP地址,如何学习到对方的MAC地址?

1.2 问题描述

  • 问题1:通过上面的描述,我们知道源主机 H 1 \textrm{H}_1 H1是如何把数据传输给目的主机 H 2 \textrm{H}_2 H2的,但是网络通信实际上是源主机 H 1 \textrm{H}_1 H1的一个进程和目的主机 H 2 \textrm{H}_2 H2的一个进程进行通信,又如何来表示这种进程间通信呢?
  • 问题2:网络层提供的是尽最大努力交付的服务,换句话说,提供的是不可靠服务;面对有些应用,需要提供可靠服务,怎么办?

2 解决思路

2.1 进程间通信的问题:端口

在这里插入图片描述

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

实际网络存在如下的现象:

  • 发送方很难获得接收方的进程id号,因为进程的创建和撤销都是动态的;
  • 发送方实际上只需要接收方提供一个功能来识别终点,并不关心是哪个进程来实现这个功能,也就是说,实现这个功能的进程是接收方本地的事,发送方并不关心;
  • 上面的意思可以换一种说法:接收方可以改变接收报文的进程,但不需要通知发送方。

解决方法:在运输层使用协议端口号 (protocol port number),简称为端口 (port)。把端口设为通信的抽象终点
在这里插入图片描述
端口用一个 16 位端口号进行标志,允许有 65,535 个不同的端口号。
两大类、三种类型的端口:
在这里插入图片描述
常用的熟知端口:
在这里插入图片描述

2.2 可靠传输的问题:TCP协议

TCP协议包括四个重要的技术:

  • 可靠传输协议:停止等待协议、连续ARQ协议(滑动窗口);
  • 流量控制:滑动窗口协议;
  • 拥塞控制;
  • 连接建立与释放。

2.2.1 停止等待协议

在这里插入图片描述
根据图1的拓扑图,令A为源主机 H 1 \textrm{H}_1 H1,B为目的主机 H 2 \textrm{H}_2 H2

  • A 发送完分组 M 1 \textrm{M}_1 M1 后就暂停发送,等待 B 的确认 (ACK)。
  • B 收到 M 1 \textrm{M}_1 M1 向 A 发送 ACK。
  • A 在收到了对 M 1 \textrm{M}_1 M1 的确认后,就再发送下一个分组 M 2 \textrm{M}_2 M2

问题:A 如何知道 B 是否正确收到了 M 1 \textrm{M}_1 M1 呢?
解决方法:超时重传

  • A 为每一个已发送的分组设置一个超时计时器;
  • A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M 2 \textrm{M}_2 M2
  • 若 A 在超时计时器规定时间内没有收到 B 的确认,就认为分组错误或丢失,就重发该分组。
    在这里插入图片描述
    在这里插入图片描述
    信道利用率:
    在这里插入图片描述
    信道利用率 U = T D T D + RTT + T A \textrm{信道利用率} U = \frac{T_D}{T_D + \textrm{RTT} + T_A} 信道利用率U=TD+RTT+TATD
    当往返时间 RTT \textrm{RTT} RTT 远大于分组发送时间 T D T_D TD 时,信道的利用率会非常低。
    提高传输效率:流水线传输
    在这里插入图片描述
    由于信道上一直有数据不间断地传送,流水线传输可获得很高的信道利用率。
    连续 ARQ 协议和滑动窗口协议采用流水线传输方式。

2.2.2 连续 ARQ 协议

发送窗口:
在这里插入图片描述
累积确认:
在这里插入图片描述
连续 ARQ 协议采用 Go-back-N(回退N)。
Go-back-N(回退N):表示需要再退回来重传已发送过的 N 个分组。当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。

2.2.3 TCP 报文段的首部格式

在这里插入图片描述

2.2.4 流量控制:发送窗口+接收窗口,滑动窗口协议,接收方控制发送方

流量控制 (flow control) :让发送方的发送速率不要太快,使接收方来得及接收。
利用滑动窗口机制可以很方便地在 TCP 连接上实现对发送方的流量控制。

  1. 发送窗口+接收窗口
  • 发送方 A 和接收方 B 分别维持一个发送窗口和一个接收窗口。
  • 发送窗口:在没有收到确认的情况下,发送方可以连续把窗口内的数据全部发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。
  • 接收窗口:只允许接收落入窗口内的数据。

(1) 发送窗口
在这里插入图片描述
在这里插入图片描述
P 1 \textrm{P}_1 P1 = 后沿, P 2 \textrm{P}_2 P2 = 当前, P 3 \textrm{P}_3 P3 = 前沿。
P 3 − P 1 \textrm{P}_3 - \textrm{P}_1 P3P1 = A 的发送窗口(又称为通知窗口)
P 2 − P 1 \textrm{P}_2 - \textrm{P}_1 P2P1 = 已发送但尚未收到确认的字节数
P 3 − P 2 \textrm{P}_3 - \textrm{P}_2 P3P2 = 允许发送但尚未发送的字节数(又称为可用窗口)

(2) 接收窗口
在这里插入图片描述
强调三点:

  • 第一,发送窗口是根据接收窗口设置的,但在同一时刻,发送窗口并不总是和接收窗口一样大(因为有一定的时间滞后)。
  • 第二,TCP 标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
  • 第三,TCP 要求接收方必须有累积确认的功能,以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。但接收方不应过分推迟发送确认,否则会导致发送方不必要的重传,捎带确认实际上并不经常发生。

(3)利用可变窗口进行流量控制举例
A 向 B 发送数据,MSS = 100 字节。在连接建立时,B 告诉 A:“我的接收窗口 rwnd = 400(字节)”
在这里插入图片描述
问题:可能发生死锁:
在这里插入图片描述
解决思路:持续计时器 (persistence timer),只要 TCP 连接的一方收到对方的零窗口通知,就启动该持续计时器。

  • 若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),对方在确认这个探测报文段时给出当前窗口值。
  • 若窗口仍然是零,收到这个报文段的一方就重新设置持续计时器。
  • 若窗口不是零,则死锁的僵局就可以打破了。

2.2.5 滑动窗口协议带来的糊涂窗口综合症

糊涂窗口综合症:每次仅发送一个字节或很少几个字节的数据时,有效数据传输效率变得很低的现象。
在这里插入图片描述

  1. 发送方糊涂
    问题描述:发送方 TCP 每次接收到一字节的数据后就发送。
    解决方法:Nagle 算法。
    在这里插入图片描述

  2. 接收方糊涂
    问题描述:接收方应用进程消耗数据太慢,例如每次只读取一个字节。
    在这里插入图片描述
    解决方法:让接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。只要出现这两种情况之一,接收方就发出确认报文,并向发送方通知当前的窗口大小。

发送方和接收方相互配合使用上述方法,使得在发送方不发送很小的报文段的同时,接收方也不要在缓存刚刚有了一点小的空间就急忙把这个很小的窗口大小信息通知给发送方。

2.2.6 拥塞控制:拥塞窗口

  1. 问题描述:在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。这种现象称为拥塞 (congestion)。
    在这里插入图片描述
    解决方法:TCP 采用基于滑动窗口的方法进行拥塞控制,属于闭环控制方法。
  • TCP 发送方维持一个拥塞窗口 cwnd (Congestion Window);
  • 拥塞窗口的大小取决于网络的拥塞程度,并且是动态变化的;
  • 发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量;
  • 发送窗口大小不仅取决于接收方窗口,还取决于网络的拥塞状况。
  • 真正的发送窗口值 = Min (接收方通知的窗口值,拥塞窗口值)。
  1. 四种拥塞控制算法( RFC 5681):
  • 慢开始 (slow-start)
  • 拥塞避免 (congestion avoidance)
  • 快重传 (fast retransmit)
  • 快恢复 (fast recovery)

(1)慢开始 (slow-start)
方法描述:
在这里插入图片描述

  • 当 cwnd < ssthresh 时,使用慢开始算法。
  • 当 cwnd > ssthresh 时,停止使用慢开始算法,改用拥塞避免算法。
  • 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

(2)拥塞避免 (congestion avoidance)
方法描述:每经过一个往返时间 RTT(不管在此期间收到了多少确认),发送方的拥塞窗口 cwnd = cwnd + 1。
慢开始和拥塞避免算法的实现举例:
在这里插入图片描述

(3)快重传 (fast retransmit)
方法描述:发送方只要连续收到三个重复的确认,就立即进行重传(即“快重传”),这样就不会出现超时。
在这里插入图片描述

(4)快恢复 (fast recovery)
方法描述:当发送端收到连续三个重复的确认时,不执行慢开始算法,而是执行快恢复算法 FR (Fast Recovery) 算法。

  • 慢开始门限 ssthresh = 当前拥塞窗口 cwnd / 2 ;
  • 乘法减小 MD (Multiplicative Decrease) 拥塞窗口。
    新拥塞窗口 cwnd = 慢开始门限 ssthresh ;
  • 执行拥塞避免算法,使拥塞窗口缓慢地线性增大(加法增大 AI)。

快重传和快恢复算法的实现举例:
在这里插入图片描述

2.2.7 TCP连接建立

在这里插入图片描述

2.2.8 TCP连接释放

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL进阶理论篇(九):为什么不存在完美的索引

文章目录 简介索引片和过滤因子如何通过宽表避免回表什么是过滤因子理想索引设计&#xff1a;三星索引为什么很难存在理想的索引设计&#xff1f;参考文献 简介 本节将主要介绍以下部分&#xff1a; 什么是索引片&#xff0c;什么是过滤因子&#xff1f;设计索引的时候&#…

1847_MOSFET预驱以及作用

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1847_MOSFET预驱以及作用 MO…

5分钟部署你的第一个K8S应用

查看k8s集群信息 kubectl cluster-info查看节点信息 kubectl get node查看内部组件 kubectl get pod -A部署第一个K8S应用-Nginx&#xff0c;并通过公网ip访问 创建deployment&#xff08;Pod控制器的一种, 直接删除pod后&#xff0c;会自动创建新的&#xff0c;需要删除de…

黑马头条--day02.文章列表查看

目录 一.分表 1.导入数据库sql脚本 2.导入实体类 3.分表规则 二.文章列表接口 (1)思路 2)接口定义 3)功能实现 1.1)&#xff1a;导入heima-leadnews-article微服务&#xff0c;资料在当天的文件夹中 1.2)&#xff1a;定义接口 1.3)&#xff1a;编写mapper文件 1.4)&…

Support Vector Machine(SVM)——支持向量机

1.从逻辑回归到SVM 回顾一下逻辑回归的模型 然后经过sigmoid函数得到预测y1的概率&#xff0c;sigmoid函数如下图 对于单个样本来说损失函数如下 当一个输入的真实标签为1时&#xff0c;损失函数就只剩&#xff0c;如左图所示,我们想要让&#xff0c;来使损失函数尽可能的小 对…

重新认识Word——尾注

重新认识Word——尾注 参考文献格式文献自动生成器插入尾注将数字带上方括号将参考文献中的标号改为非上标 多处引用一篇文献多篇文献被一处引用插入尾注有横线怎么删除&#xff1f;删除尾注 前面我们学习了如何给图片&#xff0c;公式自动添加编号&#xff0c;今天我们来看看毕…

【TB作品】51单片机读取重量和液位,OLED显示

代码打开下载&#xff1a; http://dt4.8tupian.net/2/28880a64b6666.pg3这段代码是为微控制器编写的&#xff0c;可能是基于8051架构&#xff0c;使用Keil C51编译器。该代码结合了OLED显示器、超声波距离传感器和基于HX711的称重传感器的功能。以下是主要组件及其功能的详细说…

海洋可视化大屏,Photoshop源文件

数据大屏通过实时的数据展示&#xff0c;可及时发现数据的变化和异常&#xff0c;以便及时采取措施。现分享海洋动力大数据监控、海洋数据监控系统、科技感海洋监控系统大屏模版的UI源文件&#xff0c;供UI设计师们快速获取PSD源文件完成工作 若需更多 大屏组件&#xff0c;请…

1852_bash中的find应用扩展

Grey 全部学习内容汇总&#xff1a; https://github.com/GreyZhang/toolbox 1852_bash中的find应用扩展 find这个工具我用了好多年了&#xff0c;但是是不是真的会用呢&#xff1f;其实不然&#xff0c;否则也不会出现这种总结式的笔记。其实&#xff0c;注意部分小细节之后…

电子学会C/C++编程等级考试2021年09月(六级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:双端队列 定义一个双端队列,进队操作与普通队列一样,从队尾进入。出队操作既可以从队头,也可以从队尾。编程实现这个数据结构。 时间限制:1000 内存限制:65535输入 第一行输入一个整数t,代表测试数据的组数。 每组数据的…

国内最好的开源MES/免费MES/低代码MES

一、系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、适合二开的开源MES、功能最全的开源MES、好看的数字大屏、开源自动排班系统、开源质检系统。 1.万界星空开源MES制造执行系统的Java开源版本。 开源mes系统包括系统管…

re:Invent2023大会隆重推出自研芯片Graviton4和Trainium2

目录 一、前言 二、体验Graviton系列产品 &#xff08;一&#xff09;创建普通的EC2实例 &#xff08;二&#xff09;创建Graviton处理器的EC2实例 &#xff08;三&#xff09;远程到服务器 方式1&#xff1a;创建成功时连接 方式2&#xff1a;SSH客户端 方式3&#xff1a;正确…

01--二分查找

一. 初识算法 1.1 什么是算法&#xff1f; 在数学和计算机科学领域&#xff0c;算法是一系列有限的严谨指令&#xff0c;通常用于解决一类特定问题或执行计算 不正式的说&#xff0c;算法就是任何定义优良的计算过程&#xff1a;接收一些值作为输入&#xff0c;在有限的时间…

【LeetCode:746. 使用最小花费爬楼梯 | 递归 -> 记忆化搜索 -> DP】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Python基础08-文件操作详解

零、文章目录 Python基础08-文件操作详解 1、文件操作概述 &#xff08;1&#xff09;文件是什么 内存中存放的数据在计算机关机后就会消失。要长久保存数据&#xff0c;就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索&#xff0c;引入了**“文件”**的概念。 …

【普中】基于51单片机简易计算器显示设计( proteus仿真+程序+设计报告+实物演示+讲解视频)

目录标题 &#x1f4df;1. 主要功能&#xff1a;&#x1f4df;2. 讲解视频&#xff1a;&#x1f4df;3. 设计说明书(报告)&#x1f4df;4. 仿真&#x1f4df;5. 实物烧录和现象&#x1f4df;6. 程序代码&#x1f4df;7. 设计资料内容清单 【普中开发板】基于51单片机简易计算器…

nodejs+vue+微信小程序+python+PHP校园二手交易系统的设计与实现-计算机毕业设计推荐

(2)管理员 进行维护&#xff0c;以及平台的后台管理工作都依靠管理员&#xff0c;其可以对信息进行管理。需具备功能有&#xff1b;首页、个人中心、学生管理、物品分类管理、物品信息管理、心愿贴、系统管理、订单管理等功能。系统分成管理员控制模块和学生模块。 本系统有良好…

Source Insight使用

之前一直使用VS code阅读kernel源码&#xff0c;有时候函数跳转有些问题。最近换成了Source Insight软件&#xff0c;发现真不错。就是需要一些学习成本&#xff0c;简单记录一下如何使用吧。 1、下载安装&#xff1a; 首先肯定是要下载安装&#xff0c;这个就不写了&#xf…

Restrict Content Pro WordPress – 限制会员内容 付费内容网站(包含所有扩展)

Restrict Content Pro WordPress限制会员内容专业插件 强大的内容限制工具和强大的 WordPress 会员网站&#xff0c;都在一个易于管理的插件中。 购买Restrict Content Pro 最新版本并加入超过23000 名快乐客户的俱乐部。 使用 Restrict Content Pro 插件将您的独家内容锁定…