Chapter 1 —— Computer Networks And The Internet

本章节涉及到的术语

主机 host 端系统 end system

通信链路 communication link

分组交换机 packet switch

分组 packet

传输速率 transmission rate

路径 route | path:一个分组所经历的一系列的通信链路和分组交换机称为通过网络的路径

因特网服务提供商 Internet Service Provider ISP

传输控制协议 Transmission Control Protocol TCP

网际协议 Internet Protocol IP

因特网标准 Internet standard

因特网工程任务组 Internet Engineering Task Force IETF

请求评论 Request For Comment RFC:IETF的标准文档

嵌套字接口 socket interface:端系统提供嵌套字接口,规定运行在一个端系统上的应用程序向另一个端系统上的应用程序交付数据的方式,是一套规则的集合

物联网 Internet of Things IoT

边缘路由器 edge router:边缘路由器端系统到任何一个远程端系统路径上的第一个路由器

用户数字线 Digital Subscriber Line

混合光纤同轴 Hybrid Fiber Coax HFC

光纤到户 Fiber To The Home FTTH

物理媒体 physical medium

报文 message

转发表 forwarding table

路由选择协议 routing protocol

节点处理时延 nodal processing delay

排队时延 queuing delay

传输时延 transmission delay

传播时延 propagation delay

协议栈 protocol stack

封装 encapsulation

有效载荷字段 payload field

恶意软件 malware

僵尸网络 botnet

自我复制 self-replicating

病毒 virus

蠕虫 worm

拒绝服务攻击 Denial-of-Service (DoS) attack

分布式DoS攻击 Distributed Dose (DDOS) attack

分组嗅探器 pakcet sniffer

IP哄骗 IP spoofing


什么是因特网(Internet)

可以由两种方式回答这个问题

  • 具体构成描述,因特网是一个世界范围内的计算机网络,它通过硬件和软件实现的端系统、通信链路和分组交换机构成。
  • 服务描述,因特网是为分布式应用程序提供服务的基础设施。

区别Internet & internet

Internet被翻译为因特网,特指那个覆盖全球的计算机网络,是一个专有名词,Internet是全球最大的internet实例。

internet常被翻译为互连网或者网迹网,泛指通过路由器将多个物理网络连接起来的逻辑网络,理论上是不限定协议的,尽管现实中绝大数时候使用TCP/IP协议。(此处使用互连网,而不是互联网,是因为后者往往被理解为因特网这个网络实体)。

通过类比人类活动,我们可以给出协议的定义:

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

网络边缘

接下来,我们从网络边缘到网络核心,具体研究计算机网络的部件。

端系统,因处于计算机网络的边缘而得名,而其容纳(运行)应用程序,也被称为主机,本书不做二者的概念区分。

接入网

为了方便汇总,根据使用场景,本书分为三类,家庭接入、企业(家庭)接入、广域无线接入。

DSL

传统的电话线拨号接入使用0-4khz。

DSL使用现有的电话线,0-4khz为电话,4-50khz为上行数据,50khz-1mhz为下行数据

image-20260707220539434

图中几个概念

DSL调制解调器 DSL modem

分配器 splitter,将数据信号和电话信号分开

数字用户线接入复用器 DSLAM DSL access multiplexer

本地中心局 central office

DSL可以提供12Mbps下行&1.8Mbps上行、55Mbps下行和15Mbps上行的多种速率,再1.6km以上,就要选择其他的接入方式了。

DSL modem

电缆

电缆因特网接入 cable Internet access 使用电视公司的同轴电缆

image-20260707221905830

一个重要特征是共享广播媒体

此外,有混合光纤同轴HFC的系统

HFC

电缆调制解调器

光纤到户 FTTH

分为有源光纤网络Active Optical Network和无源光纤网络Passive Optical Network

AON本质上就是交换以太网

这里主要考虑PON,有以下设备概念:

  1. OLT Optical Line Terminal 光线路终端 在运营商机房。
  2. ONU Optical Network Unit 光网络单元
  3. ONT Optical Network Terminal 光网络终端
  4. splitter (光纤)分配器

ONT是ONU的一种特殊版本,服务单用户。

FTTH

以下是这些设备的典型型号图片:

华为SmartAX MA5800系列含MA5800-X17/X15/X7/X2等产品,为用户提供超宽、绿色、智能的全光接入网络。(OLT)

OLT

华为EchoLife EG8040C-10是华为全光接入解决方案的桥接型ONU(ONU)。

ONU

EchoLife EG8040H6是室内型光网络终端(ONT)。

ONT

PLC splitter

盒式分光器

机架式分光器

卫星接入

同步轨道卫星 && 低轨道卫星

不做赘述

以太网接入

使用最为广泛的有线接入

WIFI接入

使用最为广泛的无线接入

如今,当你提到“无线局域网”时,几乎就等于在说 Wi-Fi。IEEE 802.11标准的成功,使得“Wi-Fi”在公众认知中完全取代了“无线LAN”这个技术名词。

广域无线接入

3G LTE(Long Term Evolution) 5G

物理媒体

物理媒体分为两类:引导型媒体guided media & 非引导型媒体unguided media

双绞线

最便宜、最常用的引导型媒体

无屏蔽双绞线Unshielded Twisted Pair UTP & 屏蔽双绞线 Shielded Twisted Pair STP

同轴电缆

能被用作共享媒体(shared medium)

光纤

高成本的光设备阻碍了其在短途传输中的应用

陆地无线电信道

优势在于

  • 穿透墙壁
  • 提供与移动用户的连接
  • 长距离承载信号的能力

信道特性极大地取决于传播环境

  • 路径损耗&遮挡损耗(跨距离传播和绕过/通过阻碍物理时的信号强度降低)
  • 多径衰落(由于干扰对象的信号反射)
  • 干扰(其他传输或电磁信号)

大体上分为三类

  • 短距离(1-2m)
  • 局域(百十米)
  • 广域(数万米)

卫星无线电信道

同步卫星geostationary satellite

近地轨道卫星 Low-Earth Orbiting LEO

网络核心

分组交换(packet switching)

端系统彼此交互报文(messaeg),源端口将报文划分为一个较小的数据块,称之为分组(packet),通过分组交换机(packet switch)传送,分组交换机主要有路由器(router)和链路层交换机(link-layer switch)。

以下的讨论我们定义:

分组为Lbit。

链路传输速率为Rbps,即推出比特的速率。

采用存储转发传输(store-and-forward transmission),不考虑处理时延和传播时延的基础上,通过N条速率均为R的链路组成的路径,从源到目的地发送P个分组,端到端时延(存储转发时延)为:
$$
d_{端到端} = N(P-1)\frac{L}{R}
$$
分组交换机有一个输出缓存(output buffer),或者说是输出队列(output queue),还要考虑输出缓存的排队时延(queuing delay),因为缓存有限,会出现分组丢失(packet loss),即丢包

这里补充一点,有些教科书提到分组交换包括数据报和虚电路两种传输方式,值得注意的是,TCP/IP协议栈严格遵循数据报模型,在MPLS中借鉴了虚电路的思想。教科书提及的虚电路在 X.25、ATM中,用的很少了。

电路交换(circuit switching)

在端系统通信会话期间,预留了路径通信所需的资源。

电路是通过频分复用(Frequency-Division Multiplexing FDM)或者时分复用(Time-Division Multiplexing TDM)实现。

报文交换(Message Switching)

这是补充的,有些教科书会提到。

它是基于存储-转发传输的,同样要考虑传播时延、存储转发时延、排队时延,不同点在于节点接收和传送的是完整的报文。

网络的网络

我们开始构建一个网络核心的模型

**网络结构1:**单一全球ISP互联所有的接入ISP

耗资巨大,但是有利可图,必然会产生与之竞争的ISP。

**网络结构2:**多个全球ISP互联部分接入ISP,这些全球ISP互联

事实上,全球性的ISP是很难的,现实中有与之类似的概念——第一层ISP(tier-1 ISP),比如Level 3Communication、AT&T、Sprint、NTT。

没有哪个官方的机构规定,他们是第一层ISP,这是事实上的结果。

**网络结构3:**区域中也有竞争的区域ISP

**网络结构4:**增加存在点(Point of Presence,PoP)、多宿、对等、因特网交换点

除接入ISP之外,PoP可存在于的所有层,对其他ISP提供接入服务。

除第一层ISP之外,可存在多宿,与多个ISP连接。

相同等级的ISP可以实现对等(peer)。

第三方公司可以创建因特网接入点(Internet Exchange Point,IXP),多个ISP在这里一起对等。

**网络结构5:**在第一层ISP旁边添加内容提供商(content provider network)

ISP互联

分组交换的时延、丢包、吞吐量

节点时延

节点总时延 total nodal delay

  • 节点处理时延 nodal processing delay 处理分组所需的时间 微秒或者更低级别
  • 排队时延 queuing delay 分组在队列中等待的时间 毫秒到微秒级别
  • 传输时延 transmission delay 将分组推向链路的时间 毫秒到微秒级别
  • 传播时延 propagation delay 链路上传输的时间 毫秒级别

$$
d_{nodal} = d_{proc} + d_{queue} + d_{trans} + d_{prop}
$$

书里给出一个JAVA小程序,体会传输时延和传播时延的区别

https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/transmission-vs-propogation-delay/transmission-propagation-delay-ch1/index.html

传输时延>传播时延

JAVA2

JAVA3

传输时延<传播时延

JAVA1

丢包

与其他三项不同点在于,对于不同的分组,排队时延可能不同!所以我们使用统计量度量,比如平均排队时延、排队时延的方差、排队时延超过特定值的概率

a pkt/s表示分组到达队列的平均速率

R b/s表示队列推出比特的速率

则有:
$$
流量强度(traffic-intensity) = ρ = \frac{La}{R}
$$
流量强度绝对不能大于1

考虑流量强度小于1的情况,分组到达的性质就重要了

考虑流量强度为1的极端情况下分组平均到达的特例情况:

每L/R秒到达一个分组,则不会有排队时延

每NxL/R秒到达N个分组,第一个分组没有,第n个分组有(n-1)xL/R个排队时延

平均排队时延为:
$$
d_{queue} = \frac{(N-1)L}{2R}
$$
考虑流量强度为一般情况下的分组随机到达的一般情况:
$$
d_{quque} = \frac{ρL}{(1-ρ)R}
$$
Figure_1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import numpy as np
import matplotlib.pyplot as plt

# --- 设置中文字体 ---
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签(Windows常用黑体)
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

# 设置图形
plt.figure(figsize=(8, 5))

# 横轴:流量强度 rho,从 0 到 0.99(避开 rho=1 的无穷点)
rho = np.linspace(0, 0.99, 500)
# 平均排队时延(以 L/R 为单位):W_q = rho / (1 - rho)
Wq = rho / (1 - rho)

# 绘制 M/M/1 理论曲线
plt.plot(rho, Wq, 'b-', linewidth=2, label='M/M/1 随机到达')

# 标注趋向无穷
plt.annotate(r'$\rho \to 1, W_q \to \infty$', xy=(0.95, 20), fontsize=12,
color='blue', bbox=dict(boxstyle="round,pad=0.3", fc="lightblue", ec="blue"))

# 用虚线标出我们确定性例子的值(例如取 N=10,平均排队时延 = (N-1)/2 = 4.5)
N = 10
Wq_det = (N - 1) / 2 # 当 L/R = 1 时
# 在 rho=1 处画一个标记点(尽管曲线不包含 rho=1,我们单独添加)
plt.scatter([1], [Wq_det], color='red', s=80, zorder=5, label=f'确定性批量到达 (ρ=1, N={N})')
plt.axhline(y=Wq_det, color='red', linestyle='--', alpha=0.5)

# 添加文本说明
plt.text(0.85, Wq_det + 0.8, f'确定性 ρ=1\n平均排队时延 = {Wq_det}·L/R', color='red',
bbox=dict(facecolor='white', edgecolor='red', alpha=0.7))

# 坐标轴与标题
plt.xlabel('流量强度 ρ', fontsize=13)
plt.ylabel('平均排队时延 $W_q$ (单位: L/R)', fontsize=13)
plt.title('流量强度与平均排队时延的关系', fontsize=14)
plt.grid(True, linestyle=':', alpha=0.6)
plt.legend(loc='upper left')

# 设置纵轴范围,避免无限大
plt.ylim(0, 25)
plt.xlim(0, 1.05)

plt.tight_layout()
plt.show()

JAVA小程序演示:https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/queuing-loss-applet/index.html

丢包

端到端时延

$$
d_{end-end} = N(d_{proc} + d_{trans} + d_{prop})
$$

其中
$$
d_{trans} = L/R
$$
考虑不同节点有不同的时延,每个节点存在平均排队时延的情况下,对该公式进行一般化处理。

设分组经过 ( N ) 个节点(路由器)和 ( N ) 条链路,则端到端时延为:

$$
d_{\text{end-end}} = \sum_{i=1}^{N-1} \left( d_{\text{proc},i} + d_{\text{queue},i} + d_{\text{trans},i} + d_{\text{prop},i} \right)
$$

当然了,在端系统方面还有其他的时延,比如应用程序、WIFI等导致的时延。

我们使用traceroute体验下端到端时延:http://www.traceroute.org

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Executing exec(traceroute -m 30 -q 3 183.202.208.95 140)
traceroute to 183.202.208.95 (183.202.208.95), 30 hops max, 140 byte packets
1 gw.ihep.ac.cn (202.38.128.2) 0.112 ms 0.081 ms 0.091 ms
2 202.122.36.1 (202.122.36.1) 2.923 ms 2.974 ms 2.839 ms
3 192.168.1.25 (192.168.1.25) 1.535 ms 2.167 ms 1.943 ms
4 159.226.254.161 (159.226.254.161) 1.565 ms 159.226.254.157 (159.226.254.157) 1.929 ms 1.907 ms
5 159.226.254.74 (159.226.254.74) 1.523 ms 159.226.254.70 (159.226.254.70) 1.536 ms 159.226.254.74 (159.226.254.74) 1.731 ms
6 * * *
7 221.183.94.25 (221.183.94.25) 2.668 ms 2.717 ms 221.183.94.21 (221.183.94.21) 1.999 ms
8 * * 221.183.230.246 (221.183.230.246) 9.416 ms
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
0traceroute -m 30 -q 3 183.202.208.95 140 took 25secs. Total script traceroute.pl time=25secs, user=apache@www2.ihep.ac.cn, OS=linux

吞吐量

考虑一个A主机给B主机发送大文件的场景

文件Fbit组成,用于Ts

平均吞吐量 = F / T bps

瞬时吞吐量 = 接收方收到文件的速率

在今天因特网中对吞吐量的限制因素通常是接入网,如下图a:

吞吐量

a表明,吞吐量取决于数据流过链路的传输速率。

一般的,b表明,吞吐量不仅取决于联络传输速率,还取决于干扰流量。

协议层次

协议分层提供了一种结构化的方式来讨论系统组件,模块化使得更新系统组件更容易。

批评者认为

  • 可能每一层都冗余了较低层的功能
  • 有些功能的实现必须破坏分层

各层的所有协议被称为协议栈(protocol stack)

OSI/RM

这是书里没有的内容,补充的

  • 应用层 Application Layer

    实现功能:1.满足下层模型无法解决的问题 2.产生不同的数据 3.验证手段、加密手段

  • 表示层 Presentation Layer

    实现功能:负责数据的编译、解码

  • 会话层 Session Layer

    实现功能:可以实现应用级别不同服务进程间的通信

  • 传输层 Transport Layer

    实现功能:1.TCP UDP 按照协议决定是否实现纠错功能 2.区分不同设备【端口】

    无法实现:1.有可能无法实现纠错 2.无法实现应用级别不同服务的区分

  • 网络层 Network Layer

    实现功能:1.从全局的角度上定位设备【IP】 2.路由

    无法实现:1.纠错 2.无法实现一个设备不同应用的区分

  • 数据链路层 Data Link Layer

    实现功能:1.差错检测 2.提供链路层地址信息【MAC】

    无法实现:1.纠错 2.无法从全局的角度分析地址信息

  • 物理层 Physical Layer

    作用:规范传输介质的标准

    传输介质:光纤、双绞线、自由空间

    实现功能:1.实现了设备的连接 2.实现了数据的传输

    无法实现:1.差错检测

总结:OSI/RM的每一层定义十分明确、各司其职,下层永远为上层提供服务

问题:1. 每一层过于明确,导致应用开发相对复杂 2.OSI/RM定义了每一层的职责,但是没有定义每一层的标准、协议

TCP/IP

TCP/IP—定义了具体的协议

  • 应用层 Application Layer —— 报文 message
  • 传输层 Transport Layer —— 报文段 段 segment
  • 网际层 Internet Layer —— 数据报 datagram 包 packet
  • 网络接口层 Network Access Layer —— 帧 frame
  • 物理层

体现了一种思想:封装(encapsulation),即首部字段 + 有效载荷字段(payload field)

面向攻击的网络

恶意软件 malware

僵尸网络 botnet

自我复制 self-replicating

病毒 virus

蠕虫 worm

拒绝服务攻击 Denial-of-Service (DoS) attack

分布式DoS攻击 Distributed Dose (DDOS) attack

分组嗅探器 pakcet sniffer

IP哄骗 IP spoofing


因特网在设计之初,就是基于“一群相互信任的用户,连接到一个透明的网络”上的模型

植入有害程序

被恶意软件感染的设备组成的网络,称之为僵尸网络,可以用于发送DDos攻击或者垃圾邮件分发等操作,这些恶意软件大多是自我复制的。

  • 病毒是一种需要某种形式的用户交互来感染用户设备的恶意软件
  • 蠕虫是无需任何明显用户交互就能进入设备的恶意软件

攻击服务器和网络基础设施

Dos攻击,大概分为三类:

  1. 弱点攻击。发送制作精细的报文。
  2. 带宽泛洪。发送大量分组。
  3. 连接泛洪。创建大量的全开或者半开的TCP连接。

DDos攻击

  • 服务器端更难以检测
  • 可以产生足够大的流量

嗅探分组

记录每个流经的分组副本的被动接收机称为分组嗅探器,由于是被动的,很难检测,防御嗅探往往和密码学相关。

wireshark就是典型的~

伪装

将具有虚假源地址的分组注入因特网,称为IP哄骗。

我们需要端点鉴别,让我们能确信一个报文的源头。