💡整理不易,先赞后看,养成习惯💡
申明
💡这里都是作者自己整理的,不一定全,详细可以看书上内容。 感谢物联网2001@nvn(u34626791)的文档整理以及计算机2001@嘉木提供的文档。 题型: 填空15(总计20分),选择202分,简答25分,计算3*10分
书本内容
第一章
书后习题详解
:::tips
题目:1-2
试简述分组交换的要点。
:::
解析:
分组交换采用了存储转发技术。把报文等分成若干数据段,每个数据段加入控制信息组成的首部,构成若干分组。分组首部包含了目的地址和原地址等重要控制信息,每个分组可以在互联网中独立地选择传输路径。
:::tips
题目:1-3
💡试从多个方面比较电路交换,报文交换和分组交换的主要优缺点。
:::
解析:
(1)电路交换:需要事先建立连接,分配资源,资源利用率相对较低,延迟低,但是可靠性高,不适合突发数据传输。
(2)报文交换:无须预约传输带宽,配置灵活,延时较高,可靠性一般。
(3)分组交换:分组存储转发数据,灵活迅速,资源利用率高,延时较高,可靠性高。
:::tips
题目:1-12
因特网的两大组成部分(边缘部分与核心部分)的特点是什么?它们的工作方式各有什么特点?
:::
解析:
边缘部分:由各主机构成,用户直接进行信息处理和信息共享;低速连入核心网。
核心部分:由各路由器连网,负责为边缘部分提供高速远程分组交换,核心工作是存储转发。
:::tips
题目:1-17
💡收发两端之间的传输距离为1000km,信号在媒体上的传播速率为2×10**8**m/s 。试计算以下两种情况的发送时延和传播时延:
(1) 数据长度为10**7**bit,数据发送速率为100kb/s。
(2) 数据长度为10**3**bit,数据发送速率为1Gb/s。
从上面的计算中可以得到什么样的结论?
:::
解析:
:::info
发送时延 = 数据长度 / 数据发送率
传播时延 = 传输距离 / 传播速率
:::
(1)发送时延:ts=107 / 105 = 100s
传播时延:tp=106 / ( 2×108) = 0.005s
(2)发送时延ts =103 / 109 =1µs
传播时延:tp=106 / ( 2×108)=0.005s
结论:若数据长度大而发送速率低,则在总的时延中,发送时延往往大于传播时延。但若数据长度短而发送速率高,则传播时延就可能是总时延中的主要成分。
:::tips
题目:1-19
长度为100字节的应用层数据交给传输层传送,需加上20字节的TCP首部。再交给网络层传送,需加上20字节的IP首部。最后交给数据链路层的以太网传送,加上首部和尾部工18字节。试求数据的传输效率。数据的传输效率是指发送的应用层数据除以所发送的总数据(即应用数据加上各种首部和尾部的额外开销)。若应用层数据长度为1000字节,数据的传输效率是多少?
:::
解析:
:::info
数据的传输效率 = 实际有效传输的数据量 / 总传输数据量
总传输数据量 = 实际有效传输的数据量 + 各类首部控制数据
:::
(1)长度为100字节时:100/(100+20+20+18)=63.3%
(2)长度为1000字节时:1000/(1000+20+20+18)=94.5%
:::tips
题目:1-22
💡网络协议的三个要素是什么?各有什么含义?
:::
解析:
(1)语法:即数据与控制信息的结构或格式。
(2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。
(3)同步:即事件实现顺序的详细说明。
考点补充
计算机通信
计算机通信的方式主要有两种:
(1)客户服务器方式
客户/服务器方式所描述的是进程之间服务和被服务的关系。
在这种方式中,主机被分为两类:
- 客户端(主机A):请求服务的一方
- 服务端(主机B):提供服务的一方
(2)对等连接方式
在对等连接方式下,不再像客户-服务器方式一样,区分客户端和服务端,主机和主机之间可以平等的连接通信。
对等连接方式从本质上看仍然是使用客户服务器方式,只是对等连接中的每一个主机既是客户又是服务器。
网络的划分
一般按照范围进行划分:
类别 | 作用范围或距离 |
---|---|
广域网 WAN (Wide Area Network) |
通常为几十到几千公里。有时也称为远程网(long haul network)。是互联网的核心部分。 |
城域网 MAN (Metropolitan Area Network) |
作用范围一般是一个城市,作用距离约为 5~50 公里。 |
局域网 LAN (Local Area Network) |
局限在较小的范围(如 1 公里左右)。通常采用高速通信线路。 |
个人区域网 PAN (Personal Area Network) |
范围很小,大约在 10 米左右。有时也称为无线个人区域网 WPAN (Wireless PAN)。 |
记住这里的大小排序:WAN > MAN > LAN > PAN
计算机网络中的常用性能指标
指标 | 描述 |
---|---|
速率 | 数据的传送速率 |
带宽 | 网络中某通道传送数据的能力 |
吞吐量 | 单位时间内通过某个网络的实际数据量 |
时延 | 数据从一端传送到另一端所需要的时间 |
时延带宽积 | **时延带宽积** 就是传播时延 * 带宽,时延带宽积 反映了停留在管道中数据量的大小 |
往返时间RTT | 表示从发送方发送完数据,到发送方收到来自接收方的确认总共经历的时间 |
利用率 | - 信道利用率:某信道有百分之几的时间是被利用的(有数据通过) - 网络利用率:全网络的信道利用率的加群平均值 |
详细参见:
第一章:概述
网络协议
💡网络协议 (network protocol),简称为协议,是为进行网络中的数据交换而建立的规则、标准或约定。 计算机体系结构讨论的实际上就是协议。
重点记住(c)的五层协议体系结构。
为什么要这样分层?
很简单,因为针对于不同业务,分层可以很好的做好封装,每个模块之间就无需关心其他模块的业务是什么,怎么实现其他的业务,只需要关注自身即可。
优点:各层之间是独立的;灵活性好;结构上可分割开;易于实现和维护能促进标准化工作。
缺点:有些功能会重复出现,因而产生了额外开销。
五层协议中各层的主要功能:
第二章
书后习题详解
:::tips
题目:2-1
物理层要解决哪些问题?物理层的主要特点是什么?
:::
解析:
解决的问题:
- 确定传输媒体接口的有关特性,比如机械特性,电气特性等
- 如何传输数据流
- 屏蔽传输媒体和通信手段的差异
- 在两个相邻系统之间唯一地标识数据电路
主要特点:
- 传输媒介多样
- 透明传输
- 比特同步
:::tips
题目:2-5
💡物理层的接口有哪几个方面的特性?个包含些什么内容?
:::
解析:
机械特性:明接口所用的接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。
电气特性:指明在接口电缆的各条线上出现的电压的范围。
功能特性:指明某条线上出现的某一电平的电压表示何意。
过程特性:说明对于不同功能的各种可能事件的出现顺序。
:::tips
题目:2-6
数据在信道中的传输速率受哪些因素的限制?信噪比能否任意提高?香农公式在数据通信中的意义是什么?“比特/每秒”和“码元/每秒”有何区别?
:::
解析:
- 数据在信道中的传输速率受到带宽和信噪比等因素的限制。
- 信噪比不能任意提高。
- 香农公式的意义:只要信息传送速率低于信道的极限信息传输速率,就一定存在某种办法来实现无差错的传输。
- 比特/s是信息传输速率的单位码元传输速率也称为调制速率、波形速率或符号速率。一个码元不一定对应于一个比特。
:::tips
题目:2-9
💡用香农公式计算一下,假定**信道带宽**
为3100Hz,**最大信道传输**
速率为35Kb/s,那么若想使最大信道传输速率增加60%,问信噪比S/N应增大到多少倍?如果在刚才计算出的基础上将信噪比S/N再增大到十倍,问最大信息速率能否再增加20%?
:::
解析:
:::info
💡香农公式:C=Wlog**2**(1+S/N)
其中:
- C:信息的极限(最大)传输速率
- W:信道的带宽 (Hz)
- S :为信道内所传信号的平均功率
- N:为信道内部的高斯噪声功率。
:::
(1)由公式得:35000b/s=3100 log2(1+S/N)
S/N=2 350 / 31 -1 ≈ 2503
如果信道传输速率增加60%,则改变后的速率为:35Kb/s (1+0.6)=56Kb/s
此时 S/N’=2 560 / 31 -1 ≈ 274133
所以此时信噪比S/N的应该增大(2 560 / 31 -1) / (2 35000 / 31 -1) ≈ 109倍
(2)在原来的基础上提升十倍S/N可得
C’=3100 log2(1+10 2 560 / 31) ≈ 66297 bit/s
C’/56Kb/s = 118%
此时信息速率只能提升18%
所以不能注意:信道传输速率中的
1k = 1000 ≠ 1024
:::tips
题目:2-13
为什么要使用信道复用技术?常用的信道复用技术有哪些?
:::
解析:
为了通过共享信道,最大限度提高信道利用率。
频分、时分、码分、波分。
详细参见:信道复用
:::tips
题目:2-16
💡共有4个站进行码分多址通信。4个站的码片序列为
A:(-1-1-1+1+1-1+1+1)
B:(-1-1+1-1+1+1+1-1)
C:(-1+1-1+1+1+1-1-1)
D:(-1+1-1-1-1-1+1-1)
现收到这样的码片序列S:(-1+1-3+1-1-3+1+1)。
问哪个站发送数据了?发送数据的站发送的是0还是1?
:::
解析:
:::info
💡把所有的码片序列和S
进行向量积的操作,其结果在除以码片序列的位数,这里就是8。
- 得到的结果为
1
表示发送的数据是1
- 得到的结果为
-1
表示发送的数据是0
得到的结果为
0
表示没有发送数据 :::S•A=(+1-1+3+1-1+3+1+1)/8=1, A发送1
- S•B=(+1-1-3-1-1-3+1-1)/8=-1, B发送0
- S•C=(+1+1+3+1-1-3-1-1)/8=0, C无发送
- S•D=(+1+1+3-1+1+3+1-1)/8=1, D发送1
详细参见:码分复用
考点补充
信道相关概念
- 单向通信(单工通信):只能有一个方向的通信,没有反方向的交互。
- 双向交替通信(半双工通信):通信的双方都可以发送信息,但双方不能同时发送(当然也就不能同时接收)。
- 双向同时通信(全双工通信):通信的双方可以同时发送和接收信息。
要求会更久通信方式判断是哪一种通信类型.
传输媒体
多径效应
基站发出的信号可以经过多个障碍物的数次反射,从多条路径、按不同时间等到达接收方。多条路径的信号叠加后一般都会产生很大的失真,这就是所谓的多径效应。
信号从 1→2 和 3→4→5→6 两条路径到达手机。
第三章
书后习题详解
:::tips
题目:3-2
数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。
:::
解析:
(1)功能:
- 链路管理
- 帧界定
- 流量控制
- 封装成帧
- 差错检测
- 透明传输
(2)优缺点:
优点是:可靠性高,数据安全,能够自动重传
缺点是:增加了额外开销,复杂度大大增加,传输效率降低
:::tips
题目:3-3
网络适配器的作用是什么?网络适配器工作在哪一层?
:::
解析:
作用:
- 进行数据串行传输和并行传输的转换
- 实现以太网协议
网络适配器工作在TCP/IP协议中的网络接口层(OSI中的数据链里层和物理层)
:::tips
题目:3-6
💡PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不能使数据链路层实现可靠传输?
:::
解析:
① 简单、封装成帧、透明性、支持多种网络层协议、支持多种类型链路;
② 因为帧编号是为了出错的时候可以有效重传,而PPP并不需要实现可靠传输。
③ 适用于线路质量不太差的情况。
④ PPP 协议只保证传输内容无差错,由于没有编号和确认机制,所以不保证帧丢失,帧失序等问题。
:::tips
题目:3-7
💡要发送的数据为 **1101011011**
。 采用 CRC 的生成多项式是P(X)=X**4** + X+1。试求应添加在数据后面的余数。
若要发送的数据在传输过程中最后一个 1变成了 0,即变成了 **1101011010**
,问接收端能否发现?
若要发送的数据在传输过程中最后两个 1都变成了 0,即变成了 **1101011000**
,问接收端能否发现?
采用 CRC 检验后,数据链路层的传输是否就变成了可靠的传输?
:::
首先需要知道CRC是什么:
第三章:数据链路层
解析:
① 采用 CRC 的生成多项式是P8=X4+X+1,用二进制表示就是P=10011。
P的各位表示的就是P(X)各项的系数:
P(X) = **1***X4+**0***X3**1***X2+**0***X+**1***1
现在除数是5位,因此在数据后面添加 4个0就得出被除数(如图T3-07(a)所示)。
除法运算得出的余数 R就是应当添加在数据后面的检验序列:**CRC=1110**
。最终发送的数据为**1101011011 1110**
。
② 现在要发送的数据在传输过程中最后一个1变成了 0,即1101011010
。把检验序列 1110
接在数据 1101011010
的后面,下一步就是进行 CRC 检验(如图 T3-07(b)所示)。
从图 T3-07(b)可 看出,余数位不为零,因此判定所接收的数据有差错。可见,这里的 CRC检验可以发现这个差错。
③ 若要发送的数据在传输过程中最后两个 1都变成了 0,即 1101011000。把检验序列 1110接在数据 1101011000 的后面,下一步就是进行 CRC 检验(如图 T3-07(c)所示)。
现在余数R不为零,因此判定所接收的数据有差错。可见,这里的 CRC检验可以发现这个差错。
④ 采用 CRC 检验后,缺重传机制,接收端不能发现,数据链路层的传输还不是可靠的传输。
:::tips
题目:3-8
要发送的数据为101110。采用CRC生成多项式是P(X)=X3+1。试求应添加在数据后面的余数。
:::
解析:
作二进制除法,除数为1001,被除数为10111000,添加在数据后面的余数为011。
这里同理上面,不做讲解。
:::tips
题目:3-10
PPP协议使用同步传输技术传送比特串0110111111111100
。试问经过零比特填充后变成怎样的比特串?若接收端收到的PPP帧的数据部分是0001110111110111110110
,问删除发送端加入的零比特后变成怎样的比特串?
:::
解析:0110111111111100
零比特填充后:011011111**0**11111000
000111011111~~0~~11111**~~0~~**110
删除零比特后:00011101111111111110
详细参见:
:::tips
题目:3-18
💡试说明10BASE-T中的“10”、“BASE”和“T”所代表的意思。
:::
解析:
- “10”表示信号在电缆上的传输速率为10MB/s
- “BASE”表示电缆上的信号是基带信号
- “T”代表双绞线星形网
:::tips
题目:3-27
有10个站连接到以太网上。试计算一下三种情况下每一个站所能得到的带宽。
(1)10个站都连接到一个10Mb/s以太网集线器;
(2)10个站都连接到一个100Mb/s以太网集线器;
(3)10个站都连接到一个10Mb/s以太网交换机。
:::
解析:
:::info
💡集线器的用户共享平分集线器带宽,交换机的用户分别独享交换机带宽。
:::
(1)10个站都连接到一个10Mb/s以太网集线器:10 / 10 = 1Mb/s
(2)10个站都连接到一个100Mb/s以太网集线器:100 / 10 = 10 Mb/s
(3)10个站都连接到一个10Mb/s以太网交换机:10Mb/s
:::tips
题目:3-30
💡在图3-30 中,某学院的以太网交换机有三个接口分别和学院三个系的以太网相连,另外三个接口分别和电子邮件服务器、万维网服务器以及一个连接互联网的路由器相连。图中的A,B和C都是100Mbit/s以太网交换机。假定所有的链路的速率都是100Mbit/s,并且图中的9台主机中的任何一个都可以和任何–个服务器或主机通信。试计算这9台主机和两个服务器产生的总的吞吐量的最大值。为什么?
:::
解析:
因为通过交换机连接的局域网内主机可以并行发送数据,所以9台主机的吞吐量为900M,两个服务器吞吐量为200M,所以总吞吐量为1100M。
扩展:
:::tips
题目:3-31
假定在图3-30中的所有链路的速率仍然为100 Mbit/s,但三个系的以太网交换机都换成为100Mbit/s的集线器。试计算这9台主机和两个服务器产生的总的吞吐量的最大值。为什么?
:::
解析:如果把三台交换机换成集线器,由于集线器是总线型,同一集线器下同一时刻只能一台设备发送数据,所以图中9台主机其实只有三台在发送,吞吐量是300M,两个服务器吞吐量是200M,所以吞吐总量是500M。
:::tips
题目:3-32
假定在图3-30中的所有链路的速率仍然为100 Mbit/s,但所有的以太网交换机都换成为100Mbit/s的集线器。试计算这9台主机和两个服务器产生的总的吞吐量的最大值。为什么?
:::
解析:一个网络中无论其中有多少台主机或者服务器,如果全部接在一个集线器上,那么该网络的最大总的吞吐量就是这个集线器的最大值,即100M。
:::info
💡总结:交换机的吞吐量可以相加,集线器吞吐量固定最大。
补充:对于交换机来说,一个端口 = 一个冲突域
:::
:::tips
题目:3-33
💡在图3-31中,以太网交换机有6个接口,分别接到5台主机和一个路由器。在下面的表中的“动作”一栏中,表示先后发送了4个帧。假定在开始的时候,以太网交换机的交换表是空的,试把表中的其他栏目都填写完。
:::
动作 | 交换表的状态 | 向哪些端口转发帧 | 说明 |
---|---|---|---|
A发送帧给D | 写入(A,1) | 所有接口 | 发送之前为空表。发送之后存入A接口在1 |
D发送帧给A | 写入(D,4) | A接口 | 已知A的信息,发送之后存入D接口在4 |
E发送帧给A | 写入(E,5) | A接口 | 已知A的信息,发送之后存入E接口在5 |
A发送帧给E | 不变 | E接口 | 既有A的信息又有E的信息,所以不变 |
考点补充
传送的协议数据单元
传送的协议数据单元是PDU
,指的是在计算机网络中,各层协议对数据进行封装所生成的数据包。在不同的协议层次,PDU具有不同的名称和结构。
- 物理层:比特(bit),物理层的PDU是指数据的最基本单位,即0和1。
- 数据链路层:帧(frame),数据链路层将网络层的数据包封装成帧,帧包含了源MAC地址、目的MAC地址、数据和校验信息。
- 网络层:数据包(packet),网络层将传输层的数据段封装成数据包,包含了源IP地址、目的IP地址、数据和其他控制信息。
- 传输层:段(segment),传输层将应用层的数据封装成段,包含了源端口、目的端口、数据和其他控制信息。在TCP协议中,PDU被称为TCP段;在UDP协议中,PDU被称为UDP数据报。
- 应用层:消息(message),应用层的PDU是指应用程序之间交换的数据,如HTTP请求、响应等。
局域网
一个局域网就是一个广播域。
CSMA/CD协议
这一部分了解即可
MAC地址
:::info
硬件地址又称为物理地址,或 MAC 地址。
IEEE 802 标准为局域网规定了一种 48 位的全球地址(简称为地址)是指局域网上的每一台计算机中固化在适配器的 ROM 中的地址。
:::
使用集线器的星型拓扑
星形拓扑的以太网一般都采用双绞线,集线器是用于物理层网络的设备,也被称为“中继器”。它通常用于将多个局域网或广域网的端口连接起来形成一个单一的网络部分。集线器可以通过放大电信号和消除噪声来加强信号并扩展网络距离。
:::info
集线器有多个数据端口,每个端口都可以连接一个计算机、服务器或其他网络设备。当其中一个设备发送数据时,集线器将数据从该端口复制到所有其他端口,以确保所有连接的设备都能接收到相同的信息。
:::
也就是说集线器采取的工作方式是广播。
集线器的特点:
- 使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行。
- 使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线。
- 很像一个多接口的转发器,工作在物理层。
- 采用了专门芯片,进行自适应串音回波抵消,减少了近端串音。
- 物理上星型结构,实际上是总线型
PPP的帧格式
:::info PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。 ::: | 字段 | 意义 | | —- | —- | | F | 连续两帧之间只需要用一个标志字段 | | A | 地址字段,只置为 0xFF。实际上不起作用 | | C | 控制字段,标识控制流程 | | 协议 | 标识上层协议的信息 | | FCS | 冗余码校验 |
碰撞域
如图所示,多个小的以太网可以通过集线器扩展成一个更大的以太网。
在碰撞发生期间,在共享介质的范围内有许多其他设备也可以监听这个通信。每个设备感知到的这一区域就是其碰撞域(又叫冲突域),即该设备所在的物理网络拓扑中与该设备直接相连的其他所有设备组成的范围。
采用集线器扩展以太网的优缺点如下:
优点:使原来属于不同碰撞域(冲突域)的计算机能够跨碰撞域通信。扩大了以太网覆盖的地理范围。
缺点:碰撞域增大了,总的吞吐量未提高。如果使用不同的以太网技术(如数据率不同),那么就不能用集线器将它们互连起来。
:::info
一般情况下,碰撞域越小越好。
:::
💡VALN
虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。
:::info
虚拟局域网其实只是局域网给用户提供的一种服务,并不是一种新型局域网。VLAN与物理位置无关。
:::
上图中同一水平面的属于一个局域网,VlAN像是对三个真实局域网的纵向切割。
在发送数据的时候,不同局域网的主机,只接受相同VLAN中主机发送的数据帧:
:::info
💡不同VLAN之间不能通信。
:::
以太网的自学习
数据链路层的三个基本问题
- 封装成帧:用于将接收到的比特流划分为若干个数据帧
- 透明传输:忽略控制信息中的部分值而不影响数据的正确传输
- 差错检测:检测数据传输过程中是否发生错误
第四章
书后习题详解
:::tips 题目:4-01
网络层向上提供的服务有哪两种?试比较其优缺点。 ::: 解析:
网络层向上提供的两种服务是面向连接的服务(虚电路服务)和无连接的服务(数据报服务)。
面向连接服务的可靠性高,但是需要额外的开销来建立和维护连接,会增加延迟和网络资源的消耗。无连接服务的网络开销相对比较低,适合对于实时性要求比较高的服务,但是不能保证数据的可靠性和顺序性。详细对比参见:
补充:虚电路只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,并不是真正建立了一条物理连接。
:::tips
题目:4-03
作为中间设备,转发器、网桥、路由器和网关有何区别?
:::
解析:
- 转发器在物理层使用
- 网桥在数据链路层使用
- 路由器在网络层使用
- 网关在网络层之上使用
:::tips
题目:4-07
说明IP地址和MAC地址的区别。并说明为什么要使用这两种不同的地址?
:::
解析:
MAC地址是数据链路层和物理层使用的地址,是一种物理地址,MAC 地址则放在 MAC 帧的首部;而IP地址是网络层和以上各层使用的地址,是一种逻辑地址,IP 地址则放在 IP数据报的首部。
使用不同的 MAC 地址。MAC 地址之间的转换非常复杂。IP 编址可以让连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便。
:::tips
题目:4-18
设某路由器建立了如下转发表,现共收到5个分组,其目的地址分别为:
(1)128.96.39.10(2)128,96.40.12(3)128.96.40.151
(4)192,4.153.17(5)192.4.153.90
试分别计算其下一跳。
:::
| 前缀匹配 | 下一跳 |
| —- | —- |
| 192.4.153.0/26 | R3 |
| 128.96.39.0/25 | 接口m0 |
| 128.96.39.128/25 | 接口m1 |
| 128.96.40.0/25 | R2 |
| 128.96.153.0/26 | R3 |
| *(默认) | R4 |
首先我们需要知道前缀匹配的子网掩码,以192.4.153.0/26
为例,/
前的前缀不用管,注意这里的26
,子网掩码总共**32位**
,分成四组,每组8位
,26
表示子网掩码的前26位
都是1
,也就是说192.4.153.0/26的子网掩码是:11111111 11111111 11111111 11000000
。
进入转发表的地址和转发表中所有的子网掩码进行与运算,结果与相应前缀相同,则说明匹配成功。例如xx.xx.xx.xx
和11111111 11111111 11111111 11000000
做与运算,结果是192.4.153.0
,说明匹配成功,该地址在这个路由表中的下一跳就是R3。
如果发现所有的前缀都不能匹配上,此时转发到默认前缀(*)的下一跳。
:::info
💡匹配前缀遵循两个原则:
- 匹配的时候优先选择前缀最长相似的一个作为匹配的前缀,可以加快查表
- 如果有多个前缀匹配,最终结果还是选择前缀最长相似的一个作为匹配的前缀
:::
除了默认路由,还有一个特殊的路由:主机路由,又叫做特定主机路由。是对特定目的主机的 IP 地址专门指明的一个路由。网络前缀就是 a.b.c.d/32放在转发表的最前面。
解析:(1)路由器收到的分组的目的地址D1= 128.96.39.10。检查转发表的第2行。<br />![GPA2DH@~S)5B{4A9A]CX}AB.png](https://cdn.nlark.com/yuque/0/2023/png/36196218/1687610949280-a6c31863-a57d-4c47-9f50-00a42497f437.png#averageHue=%23dadada&clientId=u077eb0b7-9367-4&from=paste&height=105&id=u0545651b&originHeight=116&originWidth=490&originalType=binary&ratio=1.100000023841858&rotation=0&showTitle=false&size=49374&status=done&style=none&taskId=u520ac433-101b-4fc0-98c2-f8f72896c3b&title=&width=445.4545357995784)<br />所得结果匹配,故选择下一跳为接口m0。<br />(2)路由器收到的分组的目的地址D2= 128.96.40.12。检查转发表的第4行。<br />![B0$XI6F[R09P84BELH_R@KQ.png](https://cdn.nlark.com/yuque/0/2023/png/36196218/1687611034031-2cc1dc66-6b95-43a3-af7a-53034752690f.png#averageHue=%23d5d5d5&clientId=u077eb0b7-9367-4&from=paste&height=105&id=u56d19a17&originHeight=115&originWidth=471&originalType=binary&ratio=1.100000023841858&rotation=0&showTitle=false&size=49387&status=done&style=none&taskId=u9347ef00-86eb-4b0c-aea3-05ca6c27641&title=&width=428.1818089012274)<br />所得结果匹配,故选择下一跳为R2。
3和4类似,节省篇幅就不写了。
(5)路由器收到的分组的目的地址D4= 192.4.153.90。检查转发表的第3行。
![NW7}%UD8@GJ32T{A9FQ@%5.png
所得结果不匹配。再试其他行,都不匹配。故选择下一跳为默认接口 R**4**。
:::tips
题目:4-19
某单位分配到一个地址块129.250/16。该单位有4000台计算机,平均分布在16个不同的地点。试给每一个地点分配一个地址块,并算出每个地址块中IP地址的最小值和最大值。
:::
解析:
首先我们需要知道网络的地址分为两块:
网络号 | 地址号 |
---|---|
总共32
位,网络号和地址号的关系就类似专业和班级的关系,一个网络号标识一个网络。
4000台计算机平均分布在16个不同的地点,每个地点有250台计算机。由于28 = 256 > 250
,因此,主机号有8位
就够了。这样,网络前缀可以选用32 - 8 = 24位
。
网络号 (24位) | 地址号(8位) |
---|---|
根据题意,这里的分配到的地址块是129.250/16
,也就是说网络号的前16位必须和这个地址块匹配。也就是说网络号的前16位
必须是1000001 11111010
即为网络号一定是129.250.x/24
的形式。
前16
位不可变。所以只能在x上进行划分,此时的x = {1,2,3,....,16}
。
这里怎么分配x都可以,只要是十六个即可。
最后可得
- 第一个地点:129.250.1/24,IP地址范围:129.250.1.0~129.250.1.255
- 第二个地点:129.250.2/24,IP地址范围:129.250.2.0~129.250.2.255
- ……
- 第十六个地点:129.250.16/24,IP地址范围:129.250.16.0~129.250.16.255
最后8位表示主机号,除了全0和全1可以随意分配,所以是1-254,ip地址的范围不局限与250个。
:::tips
题目:4-22
有如下的4个/24地址块,试进行最大可能的聚合。
212.56.132.0/24
212.56.133.0/24
212.56.134.0/24
212.56.135.0/24
:::
解析:这几个地址块的前面两个字节都一样,因此,只需要比较第三个字节。212.56.132.0/24
的第三个字节的二进制表示是**100001**00
212.56.133.0/24
的第三个字节的.二进制表示是**100001**01
212.56.134.0/24
的第三个字节的二进制表示是**100001**10
212.56.135.0/24
的第三个字节的二进制表示是**100001**11
。
可以看出,第三个字节仅最后2位
不一样,而前面6位都是相同的(用粗体字加下画线来表示)。这4个地址块的共同前缀是**22位**
:11010100 00111000 100001
.
最大可能的聚合的地址块是:212.56.132.0/22。
:::tips
题目:4-33
某单位分配到一个地址块136.23.12.64/26。现在需要进一步划分为4个一样大的子网。试问:
(1)每个子网的网络前缀有多长?
(2)每一个子网中有多少个地址?
(3)每一个子网的地址块是什么?
(4)每一个子网可分配给主机使用的最小地址和最大地址是什么?
:::
解析:
(1)原来网络前缀是26位,需要再增加2位
,才能划分为4个一样大的子网。因此,每个子网前缀是28位。
(2)每个子网的地址中有4位留给主机用,因此共有24 = 16
个地址。
(3) 由于网络前缀是28
位,所以前三个字节不变,一定是136.23.12
,变最后一个字节。
在原本26
位的时候,64
用二进制表示为**01**000000
,其中前两位是处于网络前缀中,此时扩展到28位
,也就是**01xx**0000
,这里的xx
就可以是00
、01
、10
、11
。对应转为点分十进制:
4个子网的地址块分别是:136.23.12.64/28
、136.23.12.80/28
、136.23.12.96/28
,136.23.12.112/28
。
(4) 网络前缀此时28位
,那么主机号就是4
位,表示范围是0000 - 1111
,但要注意:
:::info
💡指派主机号时,要扣除全 0 和全 1 。全 0 和全 1 有特殊含义和用途。
:::
所以实际有效的主机号只有16 - 2 = 14
个。主机号的范围实际是0001 - 1110
。所以:
- 第一个地址块136.23.12.64/28可分配的最小地址是136.23.12.65,最大地址是136.23.12.78
- 第二个地址块136.23.12.80/28可分配的最小地址是136.23.12.81,最大地址是136.23.12.94
- 第三个地址块136.23.12.96/28可分配的最小地址是136.23.12.97,最大地址是136.23.12.110
- 第四个地址块136.23.12.112/28可分配的最小地址是136.23.12.113,最大地址是136.23.12.126
:::tips
题目:4-47
某单位分配到一个地址块14.24.74.0/24。该单位需要用到三个子网,它们对三个子地址块的具体要求是:子网N1需要120个地址,子网N2需要60个地址,子网N3需要10个地址。请给出地址块的分配方案。
:::
解析:这个单位的地址块的网络前缀是24位,因此主机号有8位,即一共有256个地址。
可以拿128
个分配给子网N1(实际可用的地址数是126个)。这个地址块的网络前缀是25
位。
再拿64
个分配给子网N2(实际可用的地址数是62个)。这个地址块的网络前缀是26
位。
最后拿出16
个地址分配给子网N3(实际上可以使用的地址数是14个)。这个地址块的网络前缀是28
位。
最后剩下48个地址留给以后再用,综上:
分配给子网N1的首地址是14.24.74.0
,末地址是14.24.74.127
分配给子网N2的首地址是14.24.74.128
,末地址是14.24.74.191
分配给子网N3的首地址是14.24.74.192
,末地址是14.24.74.207
:::info
💡子网分配的地址个数都是2n个,注意预留特殊地址。
:::
考点补充
网络层
网络层的设计尽量简单,只向上层提供简单的、灵活的、无连接的、尽最大努力交付的数据报服务,不提供服务质量的承诺。
采用这种思路的优点如下:
- 造价低
- 运行方式灵活
- 可以使用多种应用
也就是说网络层的通信实际是不可靠的。主机中的运输层负责可靠的通信。
网际协议IP
网际协议IP主要有三个:
- 地址解析协议 ARP:一种用于在局域网中将IP地址映射到物理MAC地址的协议。
- 网际控制报文协议 ICMP:用于在网络中传输控制消息和错误报告。
- 网际组管理协议 IGMP:在IP网络中进行组播(Multicast)地址的管理协议
网络和网络之间会通过中间设备相连:
其中,转发器、网桥或交换机相对来说底层,所以仅把一个网络扩大了,仍然是一个网络。路由器连接的才是真正的不同网络之间的中间设备。
互联网就是在覆盖全球的 IP 网的上层使用 TCP 协议的网络。
IP地址
IP地址总共32
位,与十进制的转换如下:
:::info
互联网上的每台主机(或路由器)的每个接口分配一个在全世界唯一的 IP 地址
:::
IP地址都分为两段:
根据网络号,可以进行如下划分:
如果想要判断某一个IP地址的类别,就只需要把点分十进制转为二进制表示,再与上面的前缀进行匹配即可。
对于上述地址,有如下注意事项:
- A 类网络地址中, 网络号
0
和127
是保留地址,不指派。0 表示“本网络”,127 保留作为本地环回测试地址。 - B 类网络地址中,网络号 128.0 是被 IANA 保留的,不指派。采用无分类编址(CIDR)时可以指派。
- C 类网络地址中,网络号 192.0.0 是被 IANA 保留的,不指派。采用无分类编址(CIDR)时可以指派。
- 指派主机号时,要扣除全 0 和全 1 。全 0 和全 1 有特殊含义和用途。
采用上述分类方式的IP地址的优缺点:
优点:
管理简单;使用方便;
转发分组迅速;划分子网,灵活地使用。
缺点:
设计上不合理:大地址块,浪费地址资源;
即使采用划分子网的方法,也无法解决 IP 地址枯竭的问题。
CIDR
CIDR是无分类编址,也就是说不划分ABC类,而是通过子网掩码(地址掩码)决定IP地址属于哪一个网络。
CIDR 把网络前缀都相同的所有连续的 IP 地址组成一个 CIDR 地址块,如图所示:
关于子网掩码的计算前面的题目有讲解过,这里不再赘述。记住如下公式即可:
:::info
💡网络地址 = (二进制的 IP 地址) AND (地址掩码)
:::
默认的子网掩码:
ARP
ARP是地址解析协议,最主要的作用就是把IP地址转换为MAC地址。与之相对应的协议叫做RARP
,这个协议的主要作用是把MAC地址转换为IP地址。
ARP实现转换的主要方式是ARP 高速缓存,这里会存放 IP 地址到 MAC 地址的映射表。同时这个映射表会动态更新。表内容大致如下:
IP 地址 | MAC 地址 | 生存时间 (Age) | 类型 | 其他 |
---|---|---|---|---|
10.4.9.2 | 0030.7131.abfc | 00:08:55 | Dynamic | |
10.4.9.1 | 0000.0c07.ac24 | 00:02:55 | Dynamic | |
10.4.9.99 | 0007.ebea.44d0 | 00:06:12 | Dynamic |
超过生存时间的项目都从高速缓存中删除,以适应网络适配器变化。
💡IP数据报的格式
IP数据报总共两部分组成:首部 + 数据。
上图中
0-31
表示的是位
,一行32位也就是4字节,首部一共五行所以是20字节。
:::info 💡首部的长度固定部分有20字节,数据部分长度一般不超过1500字节。 ::: 各字段解释如下:
字段 | 解释 |
---|---|
版本 | 4 位,用于指明 IP 协议的版本 |
首部长度 | 4 位,可表示的最大数值是 15 个单位,这里的单位一般为 4 字节,所以IP 的首部长度的最大值是 60 字节(最小是20) |
区分服务 | 8位,用于区分服务,一般不用 |
总长度 | 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节 总长度必须不超过最大传送单元 MTU |
标识 | 16位,用于产生 IP 数据报的标识。 由于IP数据报常需要分组,同一个标识的数据报表明这些数据报来源于同一个分组。 |
标志 | 3 位,目前只有前两位有意义。 标志字段的最低位是 MF (More Fragment)。MF=1 表示后面还有分片,MF=0 表示最后一个分片。 标志字段中间的一位是 DF (Don’t Fragment) 。只有当 DF=0 时才允许分片(分组)。 |
片偏移 | 占 13 位,用于指出:分片后某片在原分组中的相对位置。 片偏移以 **8** 个字节为偏移单位 |
生存时间 | 8 位,记为 TTL,指数据报在网络中可通过路由器数的最大值 每通过一个路由器生存时间-1,时间为0就丢弃这个数据报 |
协议 | 8 位,指出此数据报携带的数据使用何种协议 |
首部检验和 | 16 位,检验数据报的首部是否正确 注意这里不检验数据部分 |
源地址 | 标识发送请求的起始IP地址 |
目标地址 | 标识发送请求的目的IP地址 |
可选字段 | 一些需要添加的附加信息,实际很少使用 |
填充 | 为了保证首部长度是4 的杯数,首部剩余部分都用0 填充,保证首部长度 字段可以准确表示。 |
IP数据报的分组偏移计算
如图,当最大传送单元 MTU = 1400字节的时候:
图中数据部分总共3800
字节,每个数据报的数据部分不超过1400
字节就需要分成如图所示三份,每一个数据报片的计算都是**原数据报的首地址 / 8**
获得。
IP的分组转发
IP的分组转发有两种形式:
- 基于终点的转发
- 基于目的网络的转发
基于终点的转发顾名思义就是每一个路由器当中都存放每一个主机的IP地址对应的端口,这样就相当于路由器和网络中的所有主机相连,压力很大。
基于目的网络的转发则是路由器只记录主机所处的网络IP即可,通过目的IP地址与网络IP的匹配知道该主机是否属于某一个网络,从而让路由表转发到相应的网络中去。进入到相应的网络之后再根据终点进行转发,这样可以大大减轻路由器的压力。
具体匹配方式如前面讲过的题目4-18
,在此不再赘述。
ICMP
ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告,是一种属于IP 层的协议。
ICMP协议的格式如下:
注意:ICMP协议书处于IP数据报的数据部分。
常用的 ICMP 报文类型如下:
ICMP 报文种类 | 类型的值 | ICMP报文的类型 |
---|---|---|
差错报告报文 | 3 | 终点不可达 |
11 | 时间超过 | |
12 | 参数问题 | |
5 | 改变路由 (Redirect) | |
询问报文 | 8 或 0 | 回送 (Echo) 请求或回答 |
13 或 14 | 时间戳 (Timestamp) 请求或回答 |
这个有个印象就好。
ICMP的应用举例最主要的有两个命令,记住就行:
(1)Ping
用来测试两个主机之间的连通性。使用了 ICMP 回送请求与回送回答报文。
是应用层直接使用网络层 ICMP 的例子,没有通过运输层的 TCP 或 UDP
ping mail.sina.com.cn
(2)Traceroute
用来跟踪一个分组从源点到终点的路径。
它利用 IP 数据报中的 TTL 字段、ICMP 时间超过差错报告报文和ICMP 终点不可达差错报告报文实现对从源点到终点的路径的跟踪。
tracert mail.sina.com.cn
路由算法
路由算法(也叫路由选择)决定了IP数据报需要发送给哪一个路由器或者主机,在IP数据报的转发过程中可能的情况如下:
如上图所示,A路由器的数据报可以通过A -> B - > E
转发到E路由器所在的网络,也可以通过A -> C -> D -> E
进行转发,路由算法就是决定该走哪一条路。它属于网络层控制层面的内容。
一般思路有两种:
- 为了更快到达
- 为了更稳定到达
路由算法有以下两类:
具体采用的哪一种“路径”需要取决于实际情况。
自治域
自治域是一个由多个网络、IP地址和路由器组成的一个网络域,可以理解为多个小网络组成一个大网络,自治域也可以叫自治系统,结构如图所示:
- 自治系统之间的路由选择叫做
域间路由选择
,常用协议有:BGP(BGP-4) 自治系统内部的路由选择叫做
域内路由选择
,常用协议有:RIP,OSPF💡RIP
RIP是一种分布式的、基于距离向量的路由选择协议,最大的优点就是简单。
RIP要求网络中的每个路由器都要维护从它自己到其他每一个目的网络的距离记录。
首先我们需要知道RIP对于距离的定义:
:::info 路由器到直接连接的网络的距离 = 1
路由器到非直接连接的网络的距离 = 所经过的路由器数 + 1 ::: 所以从上图可以看出:路由 A-B-E 的距离 = 2,路由 A-C-D-E 的距离 = 3。
RIP协议对于最佳路径的定义就是最短路径,比如上面例子中,最佳路径就是A-B-E
,左边网络中的数据报转发的时候就会走A-B-E这个路径转发到右边。
同时做了以下规定:一条路径最多只能包含 15 个路由器。
- “距离”的最大值为 16 时即相当于不可达。
当到某一个路由器距离为16的时候,会直接舍弃这条路径。
RIP协议有以下特点:
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
- 交换的路由信息为完整路由表,开销较大。
- 坏消息传播得慢,收敛时间过长。
需要交换信息的原因是网络是动态变换的,所以距离也是动态变换的,路由器之间需要通过信息的交换来更新与其他路由器之间的距离。
每个路由表的中的信息如下:
目的网络 | 距离(最短) | 下一跳地址 |
---|---|---|
路由器在刚刚开始工作时,路由表是空的。然后,得到直接连接的网络的距离(此距离定义为 1)。之后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
下面讲个例子说明:
:::tips
已知路由器 R6 有表 4-8(a) 所示的路由表。现在收到相邻路由器 R4 发来的路由更新信息,如表 4-8(b) 所示。试更新路由器 R6 的路由表。
:::
由图可知,左边是路由器R6
的原始路由转发信息,此时路由器R4
发来了它的更新路由信息,这个时候就需要更新路由器R6
,更新步骤如下:
首先复制一份R4
的表,做以下修改:
- 所有距离
+1
- 下一跳路由全部改为
R4
此时会获得下面这张表:
这就是R6
通过R4
这个路由器之后的可达网络的转发表。
因为
R6
需要通过R4
,也就是在原有路径上多经过了一个路由器,按照RIP对于距离的定义,距离需要+1
接下来只需要对比原始路由转发信息即可:
对比更新原则如下:
- 对于两张表中公有的网络,这里就是就是
Net2
和Net3
Net3
在c表
中的路由距离2
小于a表
中的路由距离4
,所以更新a表
中的Net3
的路由信息Net2
在c表
中的路由距离5
虽然大于a表
中的路由距离3
,但是两表关于Net3
的下一条路由都是R4
,这说明了此时网络结构发送了动态变化(否则同一路由下的距离不可能改变),所以此时同样需要更新a表
中的Net3
的路由信息
- 对于
a
表中没有的路由信息,而c
表中有的路由信息,则将该信息直接插入a
表中- 这里就是把
Net1
的路由信息直接插入到a
表中
- 这里就是把
最终R6
更新后的路由表为:
OSPF
OSPF同RIP一样,也是一种域内路由选择协议,原理很简单,但实现很复杂。主要使用了 Dijkstra 提出的最短路径算法 **SPF**
。
主要特点如下:
- 采用洪泛法,向本自治系统中所有路由器发送信息。
- 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
- 链路状态:说明本路由器都和哪些路由器相邻,以及该链路的度量 (metric)。
- 当链路状态发生变化或每隔一段时间(如30分钟),路由器才用洪泛法向所有路由器发送此信息。
OSPF通过更新路由器之间的链路状态来选取最佳路径,重要优点是OSPF 更新过程收敛速度快。
OSPF 将自治系统划分为两种不同的区域:
:::info
💡主干区域的作用是用于连通其他下层区域。
:::
对于上述路由器也做了划分:
- R3、R4、R7:区域边界路由器 ABR(在圆圈上)
- R5:主干路由器 BR
- R6:自治系统边界路由器 ASBR(在圆圈内)
了解即可
OSPF的优缺点:
优点:
减少了整个网络上的通信量。
减少了需要维护的状态数量。
缺点:
交换信息的种类增多了。
使 OSPF 协议更加复杂了。
其他特点:
- 对于不同类型的业务可计算出不同的路由。
- 可实现多路径间的负载均衡(load balancing)。
- 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。支持可变长度的子网划分和无分类编址 CIDR。
- 32 位的序号,序号越大状态就越新。全部序号空间在 600 年内不会产生重复号。
BGP-4
BGP协议用于自治系统 AS 之间的路由选择。由于互联网的规模太大,使得自治系统AS之间路由选择非常困难,所以BGP协议力求选择出一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要计算出一条最佳路由。
在BGP协议中,每一个自治域都要选出一个BGP发言者,类似OSPF协议中的边界路由器,所有需要域间路由的都需要通过这个BGP发言者。
BGP发言者也有一张类似RIP的路由表,不过其中记录的信息如下:
目的网络的前缀 | 自治域路径 | 下一跳的自治域 |
---|---|---|
RIP、OSPF、BPG对比
第五章
:::tips
题目:5-3
当应用程序使用面向连接的TCP和无连接的UDP时,这种传输是面向连接的还是无连接的?
:::
解析:这要在不同层次来看。在运输层是面向连接的,而在网络层则是无连接的。
:::tips
题目:5-9
端口的作用是什么?为什么端口号要划分为三种?
:::
解析:端口是应用层的各种协议进程与运输实体进行层间交互的地点。两个计算机中的进程要互相通信,不仅必须知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。
端口号的划分为三种,即:被熟知端口、登记端口和短暂端口,主要是为了提高端口号的管理和分配效率,以及确保端口号的唯一性。
:::tips
题目:5-13
一个UDP用户数据报的数据字段为8192字节。在链路层要使用以太网来传送。试问应当划分为几个P数据报片?说明每一个IP数据报片的数据字段长度和片偏移字段的值。
:::
解析:UDP用户数据报的长度=8192+8= 8200 B
因为UDP的首部长度固定为
8
字节。
以太网数据字段最大长度是**1500**
B。若IP首部为20
B,则P数据报的数据部分最多只能有1480 B。8200= 1480 x 5+ 800,因此划分的数据报片共6个。
数据字段的长度:前5个是1480字节,最后一个是800字节。
第1个数据报片的片偏移字节是0。
第2个数据报片的片偏移字节是1480 B。
第3个数据报片的片偏移字节是1480 ×2= 2960 B。
第4个数据报片的片偏移字节是1480 × 3 =4440 B。
第5个数据报片的片偏移字节是1480× 4 = 5920 B。
第6个数据报片的片偏移字节是1480 x 5= 7400 B.
图T-5-13给出了以上结果。
把以上得出的片偏移字节数除以8,就得出片偏移字段中应当写入的数值。因此片偏移字段的值分别是:0,185,370,555,740和925(字节数除以8)。
:::tips
题目:5-18
假定在运输层使用停止等待协议。发送方在发送报文段M0后在设定的时间内未收到确认,于是重传M0,但M0又迟迟不能到达接收方。不久,发送方收到了迟到的对M0的确认,于是发送下一个报文段M1,不久就收到了对M1的确认。接着发送方发送新的报文段M0,但这个新的M在传送过程中丢失了。正巧,一开始就滞留在网络中的M0现在到达接收方。接收方无法分辨出M0是旧的。于是收下M0,并发送确认。显然,接收方后来收到的M0是重复的,协议失败了。
试画出双方交换报文段的过程。
:::
解析:双方交换报文段的过程如图T-5-18所示。
我们可以看出,旧的 M0被当成了新的M0可见运输层不能使用停止等待协议(编号只有0和1两种)。
:::tips
题目:5-23
主机A向主机B连续发送了两个TCP报文段,其序号分别是70和100。试问:
(1)第一个报文段携带了多少字节的数据?
(2)主机B收到第一个报文段后发回的确认中的确认号应当是多少?
(3)如果B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中的数据有多少字节?
(4)如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认。试问这个确认号应为多少?
:::
解析:分别求解如下:
(1)第一个报文段的数据序号是70到99,共30字节的数据。
(2)B期望收到下一个报文段的第一个数据字节的序号是100,因此确认号应为100.
(3)A发送的第二个报文段中的数据的字节数是180 - 100 =80字节。
(4)B在第二个报文段到达后向A发送确认,其确认号应为70。
运输层概述
作用:运输层为它上面的应用层提供通信服务。 :::info 在OSI七层参考模型中,运输层是面向通信的最高层,也是用户功能的最底层。 ::: 传输层两大重要的功能:复用 和 分用。
- 复用:在发送端,多个应用进程公用一个传输层;
- 分用:在接收端,传输层会根据端口号将数据分派给不同的应用进程。
普遍来说,一个端口号对应一个应用进程。
和网络层的区别:
- 网络层为不同主机提供通信服务,而传输层为不同主机的不同应用进程提供通信服务。
- 网络层只对报文头部进行差错检测,而传输层对整个报文进行差错检测。
运输层主要两大协议:
不同进程之间使用端口号进行标识,端口号只具有本地意义,只是为了标志本计算机应用层中的各进程。
端口号总共16
位,允许有65,535
个不同的端口号,进行如下划分:
- 熟知端口:0-1023
- 登记端口:1024-49151
- 短暂端口:59152-65535
常用端口:
重点记住
Http
、Https
、DNS
、FTP
和SMTP
对应的端口号。
UDP
UDP的主要特点:
- 无连接。发送数据之前不需要建立连接。
- 使用尽最大努力交付。即不保证可靠交付。
- 面向报文。UDP 一次传送和交付一个完整的报文。
- 没有拥塞控制。网络出现的拥塞不会使源主机的发送速率降低。很适合多媒体通信的要求。
- 支持一对一、一对多、多对一、多对多等交互通信。
- 首部开销小,只有
**8**
个字节。
UDP首部格式如下:
(1) 源端口:源端口号。在需要对方回信时选用。不需要时可用全 0。
(2) 目的端口:目的端口号。终点交付报文时必须使用。
(3) 长度:UDP 用户数据报的长度,其最小值是 8(仅有首部)。
(4) 检验和:检测 UDP 用户数据报在传输中是否有错。有错就丢弃。
在计算检验和的时候UDP会添加一个12字节的伪首部:
:::info
💡伪首部仅仅是为了计算检验和,不会添加到UDP数据报的首部当中。
:::
计算UDP的检验和过程如下:
- 首先把UDP首部的检验和这一部分全部使用
0
填充 - 在把UDP数据报的数据部分用
0
填充到数据报的大小是4B
的整数倍
可以得到如下示意图:
此时把伪首部
、首部
、数据
三部分全部转为二进制,并且以2B
为单位全部相加,求出的结果求反码:
这个反码就是计算得出的检验和,替换原来检验和的全0即可:
在接收端想要检验的话,就直接进行替换检验和之后的加法运算,如果得到的结果全是1
,说明没有出错,反之则出错。
TCP
TCP特点:
- TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。
- TCP 提供可靠交付的服务。
- TCP 提供全双工通信。
- 面向字节流
- TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。
- 面向字节流:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
简单来说,UDP发送数据是按照数据报打包发送的,而TCP是按照字节发送的。
接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
TCP 报文段首部的**前20**
个字节是固定的,后面有 4n 字节是根据需要而增加的选项 (n 是整数)。因此 TCP 首部的最小长度是 20 字节。
各字段含义如下:
字段 | 含义 |
---|---|
源端口和目的端口 | 16位,表示数据包发送方\接收方的端口号 |
序号 | 32位,用于标识发送方发送的数据字节流的顺序,以便接收方能够对接收到的数据包进行排序和重组。 |
确认号 | 32位,表示接收方期望收到的下一个字节的序列号 |
数据偏移 | 4位,表示TCP首部的长度,以32位(4字节)为单位。数据偏移字段的最小值为5(即20字节),最大值为15(即60字节) |
保留 | 6位,保留供将来使用,发送时设置为0 |
URG | 当设置为1时,表示紧急指针字段有效 此时该字节会被优先发送 |
ACK | 当设置为1时,表示确认号字段有效 |
PSH | 当设置为1时,表示接收方应立即将数据提交给应用程序,而不是等待缓冲区填满后再提交阿 |
RST | 当设置为1时,表示发送方要求重置连接 |
SYN | 当设置为1时,表示这是一个连接请求或连接接受报文,用于建立连接 |
FIN | 当设置为1时,表示发送方已完成数据发送,请求关闭连接 |
窗口 | 2位,表示发送方允许接收方发送的数据量,以字节为单位。窗口大小可以随着网络拥塞程度的 |
选项部分最初只规定最大报文段长度MSS,即 TCP 报文段中的数据字段的最大长度。
重点需要知道这里的序列:
TCP可靠传输
TCP实现可靠传输需要通过停止等待协议,这个协议规定了发送方每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组,其过程如下:
这里会遇到两种情况:
- B接收到的M1信息出现错误,此时不会发送ACK
- M1在传输过程中被遗弃,B同样不会发送ACK
由于停止等待协议,A会一直等待B发送ACK才会发送下一个分组,所以这时引入了超时重传机制,规则如下:
- A 为每一个已发送的分组设置一个超时计时器。
- A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。
- 若 A 在超时计时器规定时间内没有收到 B 的确认,就认为分组错误或丢失,就重发该分组。
:::info
停止等待协议的特点就是:简单,但信道利用率太低
:::
为了提高信道利用率,可以采用流水线传输:
连续 ARQ 协议和滑动窗口协议采用流水线传输方式。
连续 ARQ 协议会维护一个发送窗口,位于发送窗口内的分组都可被连续发送出去,而不需要等待对方的确认。接收方对按序到达的最后一个分组发送确认,表示:到这个分组为止的所有分组都已正确收到了。此时接受法发送一个累计确认ACK。
TCP的传输大致过程如下:
发送方会维持一个窗口,同时接收方也会维持一个同等大小的窗口,发送方的窗口大小取决于接收方的窗口大小。这里的文件的数据,会以字节为单位进入TCP缓存中,也就是进入到对应的窗口当中。比如这里需要发送字节123
的时候,就会把字节**123**
加上首部封装成一个TCP报进行发送。
传送的时候采用累计确认的方式进行传送,比如此时我们先发送123
这三个字节过去,接收方接收到了这三个字节以后会返回一个ACK
表示确认收到,同时会告知发送方接下来期待发送的TCP报文序号是多少。这里很明显就是4
。后面就会发送以4
开头的TCP报文,也就是456
。
如果在发送456
和78
两个报文的时候,456
在发送的过程中丢失,接收方只接受到78
,接收方返回ACK
的时候还是会让TCP报文序号=4,即:
这样发送方接收到这个ACK的时候,就会再次发送456
。
:::info
注意:
对于发送方来说,一般当TCP缓存中的所有字节按照顺序全部发送出去之后,TCP缓存才会统一清空。
对于接收方来说,一般当TCP缓存中的所有字节全部接受完毕之后,TCP缓存才把所有的字节交付给应用层。
:::
例外就是,当TCP报文中的URG
字段为1的时候,发送方会优先发送,比如78
对应的TCP报文的URG
为1
时且123
和456
的URG
为0
的时候,此时78
这个TCP报文会优先发送。同样,如果78
这个TCP报文的**PSH**
为**1**
的时候,在接收方就可以直接从TCP缓存中转到应用层。
这里就出现了一个问题:如果接收方的ACK一直发送不过来的话,那么发送方和接收方都会处于等待状态。此时需要的就是重传机制。当TCP的发送方在重传时间内容没有收到对应ACK的时候,就会发起超时重传。
TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)。
这个只要了解就好
除了上述方式还可以用滑动窗口的方式:
看PPT了解即可
TCP流量控制
所谓流量控制主要是针对发送方,控制发送方的发送速率降低一些,接收方来不及接收数据导致大量数据丢失。对于发送方需要维护的窗口叫做发送窗口,对于接收方需要维护的窗口叫做接收窗口(rwnd)
流量控制过程如下:
首先假设:A 向 B 发送数据,**MSS = 100 字节**
。在连接建立时,B 告诉 A:“我的接收窗口 rwnd = 400(字节)”(这也意味着发送窗口也是400字节)。
图中seq
表示的就是TCP报文的**序号**
。在第三步发送seq = 201
的报文的时候发生了丢失,此时发送窗口的状态为:
seq = 1 | seq = 101 | seq = 201 | seq = 301 | seq = 401 | seq = 501 |
---|---|---|---|---|---|
背景灰色部分为发送窗口,蓝色字体表示以发送到。
这个时候B会认为此时发送发发送太快,需要进行流量控制,所以此时返回一个确认报文,ACK= 1
表示确认报文有效,ack = 201
表示201前面的字节全部收到了,rwnd
就表示需要缩小接受窗口到300
,同时接收方窗口大小也改为300
。由于ack = 201
,所以发送窗口就直接移动到seq = 201
,如下所示:
seq = 1 | seq = 101 | seq = 201 | seq = 301 | seq = 401 | seq = 501 |
---|---|---|---|---|---|
后续先发送401
和501
,接下来补发201
,此时接收放已满,统一返回一个确认信息。ack = 501
表示序号501之前的都接收到了,rwnd = 100
又缩小了窗口大小,如下所示:
seq = 1 | seq = 101 | seq = 201 | seq = 301 | seq = 401 | seq = 501 |
---|---|---|---|---|---|
后续同理,不在赘述,当发送的确认信息中rwnd = 0
,此时说明所有字节传输完毕,TCP的连接也就关闭了。
同样为了防止发送方一直接收不到这个零窗口通知,也设立一个计时器:
TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值。若窗口仍然是0,那么发送方就重新设置持续计时器。
TCP拥塞控制
拥塞的出现是因为网络对于资源的需求的总和 > 可用资源,所以是网络性能问题,拥塞控制类似流量控制,就是希望发送放发送慢一点。产生拥塞的原因有以下几点:
- 节点缓存容量太小
- 链路容量不足
- 处理机处理速率太慢
- 拥塞本身会进一步加剧拥塞
:::info
💡增加资源不一定能解决拥塞,因为未提高输出链路的容量和处理机的速度,排队等待时间将会大大增加,引起大量超时重传,解决不了网络拥塞。
:::
拥塞控制
防止过多的数据注入到网络中,避免网络中的路由器或链路过载。
是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。
流量控制
抑制发送端发送数据的速率,以使接收端来得及接收。
点对点通信量的控制,是个端到端的问题。
拥塞控制就需要额外一个窗口叫拥塞窗口(cwnd),用于表示当前网络下最大可以维护的TCP窗口大小。
此时发送窗口的大小为:Min(rwnd,cwnd)
。
- 接收窗口:接收方根据接受缓存设置的值,并告知给发送方,反映接收方容量。
- 拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。
拥塞控制主要依赖以下四种算法:
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
这四种算法主要针对拥塞窗口
举例说明:
上图中纵轴是拥塞窗口的大小,横轴是往返时间,对应一个RTT表示一次发送和确认的来回时间,ssthresh
表示的是门限值,是算法的分界线。
在0
时刻,拥塞窗口大小默认为**1**
,在0-12
的时间内,执行的是慢开始算法,cwnd的大小随时间不断乘以2,cwnd大小**1 -> 2 -> 4 -> 8 ->16**
。当cwnd到达门限值16的时候,此时cwnd每次随着时间只加一变大。
当cwnd = 24的时候,此时出现了网络拥塞,此时需要执行拥塞避免算法,cwnd大小回到初始的0
,与此同时门限值大小变为拥塞时窗口大小的一半,也就是**ssthresh = 24/2 = 12**
。
这个时候重新执行慢开始算法,cwnd大小从1 -> 2 -> 4 -> 8
之后由于门限值变为12,所以当RTT = 17的时候,cwnd不是16
而是12
。**节点4**
的时候又遇到了拥塞,此时因为拥塞,接收方接受不到相应的TCP报文,接收方会不断的发送相同的确认信息,要求发送方发送对应的TCP报文,发送方连续收到 3 个对同一个报文段的重复确认(记为 3-ACK)。发送方改为执行快重传和快恢复算法。
快重传就是发送方只要连续收到三个重复的确认,就立即进行重传,快恢复就是不再让cwnd下降到1
而是直接下降到门限值,同时每次cwnd
持续加一。
使用快重传可以使整个网络的吞吐量提高约 20%。快重传算法要求接收方立即发送确认,即使收到了失序的报文段,也要立即发出对已收到的报文段的重复确认。
TCP的三次握手和四次握手
TCP 建立连接的过程叫做握手。
采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误。过程如下:
- 第一次握手(SYN):客户端发送一个带有 SYN(同步序列编号)标志的数据包给服务端,并选择一个初始的序列号(sequence number)X,表示发送数据的起始字节。此时客户端进入 SYN-SENT(同步已发送)状态。
- 第二次握手(SYN+ACK):服务端收到客户端的请求后,会回复一个带有 SYN 和 ACK(确认序列编号)标志的数据包作为应答。同时,服务端也选择一个初始的序列号Y,并将客户端的序列号加1作为确认号(ack),表示期望接收客户端的下一个字节。此时服务端进入 SYN-RECEIVED(同步已接收)状态。
- 第三次握手(ACK):客户端收到服务端的应答后,会向服务端发送一个确认消息,确认号为服务端的序列号加1。服务端收到这个确认消息后,双方完成了三次握手,建立起了可靠的连接。此时客户端进入 ESTABLISHED(已建立连接)状态,服务端也进入 ESTABLISHED 状态,可以开始进行数据传输。
通过三次握手,客户端和服务端都确认了对方的接收能力和发送能力,并就初始序列号达成一致,建立了双向可靠的连接,以确保数据的可靠传输。
TCP的四次握手是用于关闭TCP连接。
步骤如下:
- A发送一个
**FIN报文段**
给B,表示A已经完成数据发送,请求关闭连接。这个FIN报文段中的序列号设置为A的序列号u
。 - B收到FIN报文段后,发送一个ACK报文段给主动关闭方,表示已经收到了关闭请求。这个ACK报文段的确认号设置为
ack = u+1
,表示B期望收到B的下一个数据字节的序列号。同时,这个ACK报文段的序列号设置为B当前的序列号v
。此时,主动关闭方进入FIN_WAIT_2状态,等待被动关闭方发送其自己的FIN报文段。 - 当B完成数据发送后,它会发送一个FIN报文段给A,表示B也准备好关闭连接了。这个FIN报文段的序列号设置为B当前的序列号
**w**
。 - A收到被动关闭方的FIN报文段后,发送一个ACK报文段给B,表示已经收到了关闭请求。这个ACK报文段的确认号设置为
**ack = w+1**
,表示A期望收到B的下一个数据字节的序列号。同时,这个ACK报文段的序列号设置为seq = u+1
。此时,A进入TIME_WAIT状态,等待一段时间后,确保B收到了ACK报文段,最终关闭连接。
上图中还设置了MSL
,用来防止在 TCP 连接出现长时期空闲。一旦超过这个时间还没有收到客户的信息,它就发送探测报文段。
第六章
应用 | 应用层协议 | 运输层协议 |
---|---|---|
名字转换 | DNS | UDP |
文件传输 | TFTP | UDP |
路由选择协议 | RIP | UDP |
IP地址配置 | DHCP | UDP |
网络管理 | SNMP | UDP |
远程文件服务器 | NFS | UDP |
IP电话 | 专用协议 | UDP |
流式多媒体通信 | 专用协议 | UDP |
多播 | IGMP | UDP |
电子邮件 | SMTP | TCP |
远程终端输入 | TELNET | TCP |
万维网 | HTTP | TCP |
文件传输 | FTP | TCP |
参考
计算机网络.docx
(官方答案)计算机网络(第八版)(谢希仁).pdf
运输层功能详解_运输层的主要功能_lzcWHUT的博客-CSDN博客
计算机网络原理(谢希仁第八版)_爱栗创的博客-CSDN博客