计算机网络 -- 自顶向下

第 1 章:计算机网络与英特网

1.1 什么是英特网

从两个角度解释什么是因特网。其一从因特网的具体构成,即构成因特网的基本硬件和软件组件;其二从为应用程序提供服务的基础设施

1.1.1 具体构成描述

因特网是一个世界范围的计算机网络,互联了遍及全世界数十亿计算设备的网络

image-20220124141910816

因特网主要由主机(端系统)通信链路分组交换机构成

主机(端系统)几乎涵盖了所有终端设备,如:PC、服务器、便携机、智能手机、iPad、电视、游戏机、温度调节装置、家用安全系统、家用电器、手表、眼镜、汽车、运输控制系统等

通信链路:连接各种设备之间的链路,上图中一条条的线就是抽象的链路。包括同轴电缆、铜线、光纤和无线电频谱,不同的链路能够以不同的速率传输数据,链路的传输速率(比特/秒 bit/s bps)

分组交换机:链路层交换机(Link-layer switch) && 路由器(Router)。分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组,类似充当中转转发的作用

 

端系统通过通信链路分组交换机连接到一起

 

端系统通过英特网服务提供商(ISP)接入英特网。可以简单的理解为如果一个设备需要联网,就必须通过ISP接入英特网

ISP本质就是一个由多台分组交换机和多段通信链路组成的网络,如上图所示

ISP包括:住宅区ISP、公司ISP、大学ISP、公共场合提供WiFi接入的ISP以及提供移动设备接入的蜂窝数据ISP

 

端系统 & 分组交换机 & 其他因特网部件都要运行一系列协议(protocol),这些协议控制英特网中信息的接受和发送

1.1.2 服务描述

不同端系统中的应用程序之间的通信需要依赖英特网的基础设施,如需要借助链路传输数据,需要借助分组交换机转发数据以到达正确的目的地等

应用程序运行在端系统上,并不运行在网络核心中的分组交换机中,分组交换机只负责端与端之间的数据交换

问题:运行在一个端系统上的应用程序怎样才能通过因特网向运行在另一个端系统上的软件发送数据呢???

解决方案:提供套接字接口

套接字接口规定了运行在一个端系统上的程序请求英特网基础设施向运行在另一个端系统上的特定目的地程序交付数据的方式。套接字接口是一套发送程序必须遵守的规则集合

1.1.3 协议的概念

协议定义了在两个或多个通信实体之间交换的报文的格式和顺序、以及发送报文或接收报文或处理其他事件所采取的动作

1.2 网络边缘

网络边缘主要由端系统构成,这部分是用户直接使用,用来进行通信(传递数据、音频或视频)和资源共享

端系统 <-> 主机

主机进一步划分为:客户 & 服务器

如下图所示,网络边缘即蓝色粗线部分

image-20220124152503058

1.2.1 接入网

接入网指将端系统物理连接到其边缘路由器(edge router)的网络

边缘路由器是端系统到任何其他远程端系统的路径上的第一台路由器

 

接入方式

1.2.2 物理媒体

物理媒体是接入技术所使用的媒体

引导型媒体:电波沿着固体媒体前行,如:光缆、双绞铜线、同轴电缆

非引导型媒体:电波在空气或外层空间中传播,如:在无线局域网或数字卫星频道中

 

分类:

1.3 网络核心

网络核心主要由分组交换机和链路构成,这部分是为边缘部分提供服务(提供连通性和交换)

如下图所示,网络边缘即蓝色粗线部分。显而易见,网络边缘 ➕ 网络核心 构成了整个因特网,二者刚好互补

image-20220124152739186

1.3.1 分组交换

端系统彼此交换报文,从源端系统向目的端系统发送一个报文,源端将长报文划分为较小的数据块,称之为分组。在源和目的地之间,每个分组都通过通信链路和分组交换机传送

分组以该链路最大传输速率通过通信链路。L 比特的分组,链路传输速率为 R bit/s,则传输该分组的时间为 L/R

存储转发传输

存储转发传输是指在交换机能够开始向输出链路传输该分组的第一个 bit 之前,必须接收到整个分组

image-20220124163325075

计算:从源开始发送分组到目的地收到整个分组所经过的时间

例 1:两条链路(一个路由器),一个分组的情况 -> d=2L/R

例 2:两条链路(一个路由器),三个分组的情况 -> d=4L/R

例 3:N 条链路(N-1 个路由器),一个分组的情况 -> d=NLR

例 4:N 条链路(N-1 个路由器),P 个分组的情况 -> d=(P1+N)LR

小 Tips:主要分析最后一个分组所需要的时间,如例 4,最后一个分组从源端开始发出的时候,需要等待前面 P-1 个分组发出完毕,所需时间为 (P1)LR;而最后一个分组从源端到目的端所需时间为 NLR,故总耗时为 (P1+N)LR

排队时延和分组丢失

如果到达的分组需要传输到某条链路,但发现该链路正忙于传输其他分组,该到达分组必须在输出缓存中等待。故除了存储转发时延以外,分组还需要承受输出缓存的排队时延

缓存空间的大小是有限的,如果一个达到的分组可能发现该缓存已被其他等待传输的分组完全充满,则会出现分组丢失(丢包),到达的分组或已经排队的分组之一将被丢弃

转发表和路由选择协议

路由器怎样决定它应当向哪条链路进行转发呢?

当一个分组到达网络中的路由器时,路由器检查该分组的目的地址的一部分,并向一台相邻路由器转发该分组。每台路由器具有一个转发表,用于将目的地址映射成为输出链路。当某分组到达一台路由器时,路由器检查该地址,并用这个目的地址搜索其转发表,以发现适当的出链路

路由表的配置是根据路由选择协议

1.3.2 电路交换

在端与端准备通信时,需要先建立一条源端到目的端的连接,即预留了带宽,则发送方能够以确保的恒定速率向接收方传送数据

复用

频分复用:在连接期间链路为每条连接专用一个频段

时分复用:时间被划分为固定期间的帧,并且每个帧又被划分为固定数量的时隙;网络在每个帧中为每个连接指定一个时隙

image-20220124171340993

分组交换 & 电路交换 对比

1.3.3 网络的网络

通过将 ISP 分层化,且对等的 ISP 之间不进行结算

image-20220124172958919

1.4 分组交换中时延 & 丢包 & 吞吐量

1.4.1 时延

总时延 = 处理时延 + 排队时延 + 传输时延 + 传播时延即:

dnodal=dproc+dqueue+dtranc+dprop

image-20220124195747979

处理时延:检查分组首部 & 决定将该分组导向何处所需要的时间;同时也包括检查比特级别的差错所需要的时间(微秒或更低的数量级)

排队时延:取决于正在等待向链路传输的分组数量(毫秒 - 微秒数量级)

传输时延:将分组中所有比特推向链路所需要的时间(毫秒 - 微秒数量级)

传播时延:比特从链路一端传播到链路另外一端所需要的时间(毫秒数量级)

⚠️ 传输时延 & 传播时延 对比

1.4.2 排队时延 & 丢包

L:每个分组的长度为 L 比特

R:传输速率(bit/s)

a:分组到达队列的平均速率(分组/秒)

La:比特到达队列的平均速率

La/R:流量强度

image-20220124210036281

1.4.3 端到端时延

上述讨论的都是单台路由器上的时延,现在考虑端到端的时延

假设:源主机和目的主机之间有 N-1 台路由器,网络无拥塞(排队时延可忽略不计),在每台路由器和源主机上的处理时延时 dproc,每台路由器和源主机的输出速率是 R bps,每条链路的传播时延是 dproc。则端到端时延:

dendend=N(dproc+dtrans+dprop)

1.4.4 吞吐量

瞬时吞吐量:在任何瞬间主机接收到文件的速率

平均吞吐量:主机接收到文件 F 所有比特所需时间 T,则平均吞吐量为 F/T

吞吐量受两主机之间所有链路传播速率最小值的影响

1.5 协议层次 & 服务模型

1.5.1 分层的体系结构

在讲述分层体系结构之前,先举一个现实中活生生的例子 -- 如何描述一个航线系统

当一个人乘坐某个航班时,需要采取的一系列动作:购买机票 -> 托运行李 -> 登机 -> 飞机起飞 -> 按路线飞行 -> 飞机着陆 -> 离机 -> 行李认领 -> 评价

可以观察到上述的流程是关于 按路线飞行 对称的,正好如下图所示

image-20220128015730947

如下图所示,每个层次与其下面的层次结合在一起,实现了某些功能 & 服务

image-20220128020616047

综上所述:上层直接使用下层提供的服务

所以,当每一层发生改变时,只要保证该层对其上面的层次提供相同的服务(接口),并且使用来自下层的相同服务即可,至于每一层中服务具体实现的细节并不关心

和面向接口编程很像,只要保证提供的接口功能不变,并不关心具体实现细节,层与层之间的耦合性低

1. 协议分层

网络设计者以分层的方式组织 协议以及实现这些协议的网络硬件和软件

每层通过在该层中执行某些动作或直接使用下层的服务来提供服务,如:第 n 层提供的服务 = 第 n-1 层提供的服务 ➕ 第 n 层自己的功能

每层的协议分布在网络的端系统、分组交换机和其他组件中

协议的三要素

  • 语法,即数据与控制信息的结构或格式
  • 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应
  • 同步,即事件实现顺序的详细说明

层次划分(top-down)

2. OSI 模型

应用层 -> 表示层 -> 会话层 -> 运输层 -> 网络层 -> 链路层 -> 物理层

1.5.2 封装

主机:实现了 5 个层次

路由器:实现了 3 个层次

链路层交换机:实现了 2 个层次(通过 MAC 地址寻址)

image-20220128025549301

从上图中可以明显的看到,每一层都在分组的前面加上了 首部字段

在每一层,一个分组由两部分组成,即:首部字段(来自本层) ➕ 有效载荷字段(来自上层)