计算机网络 | 自顶向下

1 应用层

1.1 体系结构

1.1.1 C/S 体系结构

客户端和服务端通过网络连接进行通信, 客户端向服务端发送请求, 服务端对请求进行处理, 并返回响应; 请求和响应数据流向一般都是单向的, 服务端在处理请求时, 可以访问本地的数据和资源, 能够提供更加复杂的服务和功能.

1.1.2 P2P 体系结构

节点之间没有明显的客户端和服务端之分, 每个节点在网络中都具有相同的地位, 可以进行请求和响应; 数据流动方式一般是双向的, 所有节点都可以提供和接收数据, 服务和资源.

1.2 HTTP

HTTP (HyperText Transfer Protocol) 即超文本传输协议, 定义了 Web 客户向 Web 服务器请求 Web 页面的方式以及服务器向客户传送 Web 页面的方式.
HTTP 协议默认使用 80 端口.

1.2.1 非持续连接与持续连接

非持续连接即非永久性 HTTP, 每个请求和响应都需要建立和关闭一次连接, 如 HTTP 0.9 采用非持续连接:

  1. TCP 连接开启;
  2. 最多一个对象通过该 TCP 连接发送;
  3. 该 TCP 连接关闭.

持续连接即永久性 HTTP, 可以在一次连接中传输多个请求和响应, 如 HTTP 1.1 采用持续连接:

  1. TCP 连接开启;
  2. 多个对象通过该 TCP 连接发送;
  3. 该 TCP 连接关闭.

1.2.2 HTTP 报文格式

请求报文

  • 请求行: 包含请求方法, URL 和 HTTP 协议版本;

  • 首部行: 包含请求信息, 比如客户端类型, 能接收的文档类型, 浏览器支持的压缩类型等;

  • 空行: HTTP 协议规定请求头部必须以一个空行结束;

  • 实体体: POST 请求才有.

响应报文

  • 状态行: 包含 HTTP 版本, 状态码和状态信息, 状态码用来表示服务器的响应状态;

  • 首部行: 包含响应信息, 比如数据类型, 响应长度, 服务器类型等;

  • 空行: HTTP 协议规定响应头部必须以一个空行结束;

  • 实体体: 服务器返回的具体数据, 例如 HTML 页面, 图片, JSON 数据等.

Cookie 既存在于本地客户端, 又存在于云端服务器, 如 Web 站点识别用户并跟踪记录, 共有 4 个组件:

  1. HTTP 响应报文的 cookie 首部行;

  2. HTTP 请求报文的 cookie 首部行;

  3. 用户端系统中保留一个 cookie 文件;

  4. 位于 Web 站点的一个后端数据库.

1.4 Web 缓存

Web 缓存又称代理服务器, 如本地浏览器缓存, 请求过程如下:

  1. 浏览器创建一个到 Web 缓存器的 TCP 连接, 并向 Web 缓存器中的对象发送一个 HTTP 请求;

  2. Web 缓存器进行检查, 看看本地是否存储该对象副本, 如果有, Web 缓存器向客户返回该对象;

  3. 如果缓存器中没有该对象, 它打开一个与该对象的初始服务器的 TCP 连接, Web 缓存器向初始服务器发送请求, 并得到初始服务器的响应;

  4. 当 Web 缓存器接受对象后, 在本地创建给对象的副本, 并向客户发送响应报文返回该对象.

1.5 其他应用层协议

HTTPS 与 HTTP 格式相同, 只是在 HTTP 的基础上额外添加了 SSL/TLS 加密层, 默认使用 443 端口;

SMTP (Simple Mail Transfer Protocol) 是简单邮件传输协议, 使用 25 端口; FTP (File Transfer Protocol) 是文件传输协议, 使用两个不同的端口进行数据传输, 客户端使用 21 端口发送控制信号检索数据, 然后使用随机端口进行数据传输; IMAP (Internet Mail Access Protocol) 是互联网邮件访问协议, 定义了邮件客户端如何从邮件服务器上获取邮件, 与邮局协议 POP3 (Post Office Protocol Version 3) 类似, 但比 POP3 功能更为强大.

Telnet 是一种远程登录协议, 它能让用户通过互联网或局域网连接到远程计算机并在上面执行命令或操作; SSH 是一种更安全的远程登录协议, 使用加密技术对登录凭据, 数据传输过程等进行了保护.

它们都基于 TCP.

RTP (Real-time Transport Protocol) 是一种用于在 IP 网络上传输实时数据的协议. RTP 主要应用于音频, 视频或模拟数据的传输, 如 VoIP (Voice over IP), 视频会议和流媒体应用等.

DHCP (Dynamic Host Configuration Protocol) 是一种自动分配 IP 地址的网络协议, 它允许计算机在联网时自动获取 IP 地址, 子网掩码, 默认网关等网络参数, 同时还可以自动获取 DNS 服务器和 WINS 服务器的 IP 地址. 当设备连接到路由器时, 路由器可以通过 DHCP 协议自动为设备分配 IP 地址.

DNS (Domain Name System) 的主要任务是主机名到 IP 地址转换的目录服务, 同一个局域网内的每个主机通常具有相同的 DNS 服务器, 一个主机的本地 DNS 通常等于默认网关的地址. 用户也可以自定义 DNS 服务器, 如设置为 8.8.8.8 或 114.114.114.114 等公共 DNS 服务器. 主机向本地域名服务器的查询一般都是采用递归查询 (Recursive query), 客户端只发一次请求, 要求对方给出最终结果. 本地域名服务器向根域名服务器的查询是迭代查询 (Iterative query), 客户端发出一次请求, 对方如果没有授权回答, 它就会返回一个能解答这个查询的其它名称服务器列表, 客户端会再向返回的列表中发出请求, 直到找到最终负责所查域名的名称服务器, 从它得到最终结果.

它们都基于 UDP.

TLS/SSL 既可视为应用层, 也可视为 "表示层" 的加密协议, 包括数据加密和身份验证等功能.

2 传输层

2.1 UDP

2.1.1 UDP 报文段结构

  • 源端口号: 16 位;

  • 目的端口号: 16 位;

  • 长度: 16 位, 表示报文段的总长度;

UDP 报文段的首部长度固定为 8 字节.

  • 检验和: 16 位, 报文段中所有 16 位字的和进行反码运算;

假定所有 16 位字的和为 0100101011000010, 反码运算结果则为 1011010100111101, 接收方相加应得到全部为 1; 若这些之一是 0, 则判断分组出现差错.

  • 应用数据: 应用层的报文.

2.1.2 UDP 传输过程

  1. 发送端将数据打包成 UDP 数据包, 附加上目的地址和端口号等信息;
  2. UDP 数据包通过网络传输到接收端;
  3. 接收端接收到 UDP 数据包后, 将其中的数据提取出来, 不进行任何数据完整性检查;
  4. 接收端完成数据的接收并进行应用程序处理.

由于 UDP 是无连接的, 不提供数据包确认机制的协议, 也不具备重传机制.
UDP 协议不能保证数据的可靠性, 但是它具有数据传输速度快, 开销小等优点, 在实时性要求较高, 但数据完整性不是很关键的应用场景中被广泛使用, 如在线游戏, 电话会议, DNS 服务等.

2.2 可靠数据传输原理

2.2.1 rdt 协议

rdt1.0

发送端

  1. 等待上层调用, 通过 rdt_send(data) 接受高层数据分组发送, 等待下一次调用.

接收端

  1. 等待下层调用, 通过 rdt_rcv(packet) 从底层接受分组传至高层, 等待下一次调用.

rdt2.0(停等协议)

发送端

  1. 等待上层调用 rdt_send(data);

  2. 等待 ACK 或 NAK, 若 rdt_rcv(rcvpkt)&&isNAK(rcvpkt) 则重新发送, 若 rdt_rcv(rcvpkt)&&isACK(rcvpkt) 则等待下一次调用.

接收端

  1. 等待下层调用, 若 rdt_rcv(rcvpkt)&&corrupt(rcvpkt) 则发送 NAK, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt) 则发送 ACK 并将数据传至高层, 等待下一次调用.

rdt2.1 (组序号)

发送端

  1. 等待上层调用 0, rdt_send(data);
  2. 等待 ACK 或 NAK 0, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt)) 则重新发送, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&isACK(rcvpkt) 则等待下一次调用 1;
  3. 等待上层调用 1, rdt_send(data);
  4. 等待 ACK 或 NAK 1, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt)) 则重新发送, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&isACK(rcvpkt) 则等待下一次调用 0.

接收端

  1. 等待下层调用 0, 若 rdt_rcv(rcvpkt)&&corrupt(rcvpkt) 则发送 NAK, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&has_seq0(rcvpkt) 则发送 ACK 将数据传至高层并等待下一次调用 1, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&has_seq1(rcvpkt) 则发送 ACK 并继续等待调用 0;
  2. 等待下层调用 1, 若 rdt_rcv(rcvpkt)&&corrupt(rcvpkt) 则发送 NAK, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&has_seq1(rcvpkt) 则发送 ACK 将数据传至高层并等待下一次调用 0, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&has_seq0(rcvpkt) 则发送 ACK 并继续等待调用 1.

rdt2.2(去除 NAK)

发送端

  1. 等待上层调用 0, rdt_send(data);
  2. 等待 ACK 0, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,1)) 则重新发送, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&isACK(rcvpkt,0) 则等待下一次调用 1;
  3. 等待上层调用 1, rdt_send(data);
  4. 等待 ACK 1, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt,0)) 则重新发送, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&isACK(rcvpkt,1) 则等待下一次调用 0.

接收端

  1. 等待下层调用 0, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq1(rcvpkt)) 则发送 ACK 1 继续等待调用 0, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&has_seq0(rcvpkt) 则发送 ACK 0 将数据传至高层并等待下一次调用 1;
  2. 等待下层调用 1, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq0(rcvpkt)) 则发送 ACK 0 继续等待调用 1, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&has_seq1(rcvpkt) 则发送 ACK 1 将数据传至高层并等待下一次调用 0.

rdt3.0 (比特交替协议)

发送端

  1. 等待上层调用 0, rdt_send(data), 开启定时器;
  2. 等待 ACK 0, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,1)) 或超时则重新发送, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&isACK(rcvpkt,0) 则等待下一次调用 1, 停止计时;
  3. 等待上层调用 1, rdt_send(data), 开启定时器;
  4. 等待 ACK 1, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt,0)) 或超时则重新发送, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&isACK(rcvpkt,1) 则等待下一次调用 0, 停止计时.

接收端

  1. 等待下层调用 0, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq1(rcvpkt)) 则发送 ACK 1 继续等待调用 0, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&has_seq0(rcvpkt) 则发送 ACK 0 将数据传至高层并等待下一次调用 1;
  2. 等待下层调用 1, 若 rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq0(rcvpkt)) 则发送 ACK 0 继续等待调用 1, 若 rdt_rcv(rcvpkt)&&notcorrupt(rcvpkt)&&has_seq1(rcvpkt) 则发送 ACK 1 将数据传至高层并等待下一次调用 0.

2.2.2 流水线传输协议

GBN (回退 N 步协议)

GBN (Go-Back-N) 协议使用一个固定大小的窗口来控制发送方发送的数据数量, 在发送窗口内的数据包都被发送出去之后, 发送方等待接收方发送确认. 当接收方接受到其中一个分组, 接收方会判断分组序号是否为上一个已确认分组的序号 +1, 如果不是那么丢弃该分组, 也不返回对应的 ACK, 发送方将其判定为超时.

  1. GBN 采用累计确认方式, 数据必须按序交付, 只要是在发送方超时时间之内成功接到了接收方返回的一串应答中的最后一个, 则包含了前面全部的确认信息;

  2. 发送方收到确认时窗口滑动, 分组丢失时从最早未确认的分组开始重传;

  3. 接收方的窗口大小为 1, 会丢弃所有失序分组;

  4. GBN 只有一个定时器.

SR (选择重传协议)

SR (Selective Repeat) 协议不会强制重传整个窗口内的数据包, 每个发送的数据包都被单独确认. 如果接收方只接收到窗口内部分数据包, 则它只需向发送方反馈缺失的数据包, 而不必重传窗口内的所有数据包.

  1. SR 采用逐个确认方式, 数据不必按序交付, 窗口大小不能超过序号空间的一半;

  2. 发送方通过超时判定分组是否丢失;

  3. 接收方的窗口大小大于 1, 接收分组时不管是否按序, 失序的分组将被缓存直到所有序号更小的分组都被收到, 窗口才会移动;

  4. SR 为每个发送的分组都设置了一个定时器.

2.3 TCP

TCP 协议在 IP 协议之上提供了一种可靠的, 有序的数据传输服务.

2.3.1 TCP 报文段结构

  • 源端口号: 16 位;

  • 目的端口号: 16 位;

  • 序号: 32 位, 即 Seq;

  • 确认号: 32 位, 即 ACK;

  • 首部长度: 4 位, 表明 TCP 首部长度;

TCP 报文段的首部长度固定为 20 字节.

  • 标志字段: 6 位, 包括 SYN, FIN, RST, ACK, PSH, URG;

SYN 用于建立 TCP 连接, FIN 用于释放 TCP 连接, RST 用于重置 TCP 连接, ACK 用于确认 TCP 报文段是否被正常接收到, PSH 用于要求对方立即传输数据, URG 表示该段数据是紧急数据.

  • 接受窗口: 16 位, 用于流量控制;

  • 因特网检验和: 16 位;

  • 紧急数据指针: 16 位;

  • 选项: 可选与变长;

  • 数据: 应用层的报文.

2.3.2 TCP 可靠数据传输

建立连接-三次握手

  1. 客户端向服务端发送 SYN 报文 (SYN = 1, Seq = J);

  2. 服务端收到 SYN 报文后,需要确认客户端数据发送的 SYN 报文,向客户端返回 ACK 报文 (SYN = 1, ACK = 1, ACK# = J + 1, Seq = K);

  3. 客户端收到服务端回复的数据包后, 需要向服务端发送确认报文 (ACK = 1, ACK# = K + 1).

其中 ACK 指的是 ACK flag, ACK# 指的是 ACK number.

传输数据

ACK 等于 Seq 与发送字节的和.

ACK 表示对方下一次发送数据的首字节, Seq 表示本次发送数据的首字节. SYN = 1, FIN = 1 作为一个字节.

断开连接-四次挥手

  1. 客户端发送一个 TCP 连接释放报文段 (FIN = 1, Seq = M);

  2. 服务器接收到连接释放报文段后, 向客户端发送一个确认报文段 (ACK = 1, ACK# = M + 1);

  3. 服务器已经没有数据要传输给客户端时, 发送一个连接释放报文段 (FIN = 1, Seq = N);

  4. 客户端接收到服务器的连接释放报文段后, 向服务器发送一个确认报文段 (ACK = 1, ACK# = N + 1).

2.3.3 TCP 流量控制与拥塞控制

流量控制

流量控制是指发送方根据接收方的接收能力, 控制发送速率, 以避免过多的数据拥塞接收方的缓存区或者导致数据丢失.

接收方的 rwnd (receive window) = 0 时, 发送方停止发送数据.

拥塞控制

拥塞控制是指网络中的数据流量过大, 导致网络的负载超过了它所能承受的极限, 从而影响网络的性能和可靠性.

拥塞控制算法分为 4 种.

  • 慢启动: 慢启动时 cwnd (congestion window) 从 1 个 MSS (maximum segment size, 最大报文段长度) 开始, 每经过 1 个 RTT 将每个拥塞窗口增加一个 MSS, 直到到达 ssthresh (slow-start threshold), 此时执行拥塞避免.

  • 拥塞避免: 拥塞避免阶段采用线性增长 (加性增), 如果网络拥塞 (未收到 ACK 并且重传计时器超时) 那么将 ssthresh 设置为当前一半 (乘性减), 更新 cwnd 为 1, 重新慢启动; 如果仅收到 3 个重复确认那么认为是正常丢包, 重传丢失的分组, 执行快重传和快恢复.

  • 快重传: 发送方一旦收到 3 个连续的重复确认, 就将相应的报文立即重传, 而不必等待超时.

  • 快恢复: 将 ssthresh 和 cwnd 都设置为当前窗口的一半 (乘性减), 然后执行拥塞避免算法.

3 网络层

3.1 网络通信方式

3.1.1 单播

单播是一种一对一的网络通信方式, 数据包只经过一条通信链路, 只有目的主机可以接收到该数据包.

3.1.2 广播

广播是一种向同一网络上的所有主机传输数据的方式, 即发送端发送的数据包被所有在同一网络上的主机所接收. 在 IPv4 协议中, 广播地址是指 IP 地址中主机号全部为 1 的地址.

3.1.3 多播

多播又称组播, 是一种在网络中向一组接收者传输数据的方式, 即只有属于特定多播组的主机才能接收到发送端发送的数据包. 在 IPv4 协议中, 多播地址是指 IP 地址中第一个字节的高位为 1110, 即 224.0.0.0 到 239.255.255.255 之间的地址.

3.2 IPv4

IPv4 是早期互联网使用的协议, 目前大部分互联网设备仍然使用 IPv4 协议进行通信. 没有扩展的 IPv4 数据报的首部长度固定为 20 字节.

3.2.1 IPv4 数据报格式

  • 版本号: 4 位, 决定是 IPv4 还是 IPv6;

  • 首部长度: 4 位, 表示 IP 数据报的首部长度;

  • 服务类型: 8 位, TOS (Type of Service) 现已不用于判优;

  • 数据报长度: 16 位, 表示 IP 数据报的总长度;

  • 标识: 16 位, 与 IP 分片有关;

  • 标志位: 3 位, 包括 DF (Don't Fragment), MF (More Fragments), Reserved;

DF=1 表明不允许分片, MF=1 表明已进行了分片, IPv4 的 Reserved=0.

  • 片偏移: 13 位;

片位移等于当前分片数据的第一个字节在原始数据的位置除以 8,因为数据长度最多为 16 位,片偏移只有 13 位,相差 8 倍;

  • 寿命: 8 位, 每经过一次路由器处理, TTL--;

  • 上层协议: 8 位, 表明使用哪一个运输层协议, 如 TCP 和 UDP;

  • 首部检验和: 16 位, 首部每 2 个字节作为 1 个数反码求和;

  • 源 IPv4 地址: 32 位;

  • 目的 IPv4 地址: 32 位;

  • 选项: 首部的扩展, 非必需;

  • 数据: 承载的数据.

3.2.2 IP 切割与重组

切割: 切割的数据报继承 16 位标识号, MF 和片偏移值发生变化, 算法如下:

假定原始数据 1110 字节, 每段不超过 512 字节 (最大传输单元 MTU), 除去首部 20 字节后划分为 488+488+134, 除最后一段分片必须为 8 的倍数.

重组: 重组仅发生在最终接收方, 算法如下:

将各个分片按照偏移量从低到高依次排列, 然后去掉每个分片中的 IP 头部, 将数据部分拼接起来得到原始数据报.

3.2.3 IPv4 编址

分类编址

分类编址的 IPv4 由 x 位网络号 (也称网络地址, 网段), 32-x 位主机号组成. 主机号全 0 表示网络地址, 全 1 表示广播地址.

  • A 类地址是 1.0.0.0 到 126.0.0.0 的地址, 用于大型网络 (00000001-01111110), 其中 10.X.X.X 是私有地址, 127.X.X.X 是环回地址 (Loopback Address), 等效于 localhost 或本机 IP;
  • B 类地址是 128.0.0.0 到 191.255.0.0 的地址, 用于中等规模的网络 (10000000-10111111), 其中 172.16.0.0-172.31.255.255 是私有地址;
  • C 类地址是 192.0.0.0 到 223.255.255.0 的地址, 用于小规模的网络 (11000000-11011111), 其中 192.168.X.X 是私有地址;
  • D 类地址是 224.0.0.0 到 239.255.255.255 的地址, 用于多播 (11100000-11101111);
  • E 类地址是 240.0.0.0 到 247.255.255.255 的地址, 保留用于将来使用 (11110000-11110111).

常见的内网地址: 10.0.0.1, 172.16.0.1, 192.168.0.1 等等.

无分类编址

无分类编址 (CIDR) 的 IPv4 使用可变长子网掩码 (VLSM) 可以提高地址的利用率, 格式为高位 1 低位 0, 1 的个数即网络号长度.

假定 CIDR 为 192.100.0.0/19, 表示这是一个 IP 地址段, 其中 19 位用作网络前缀, 剩余的 13 位用于标识主机.
这个 CIDR 可以划分出多个 IP 地址, 其范围是从 192.100.0.0 到 192.100.31.255, 其中 192.100.0.0 是网络地址, 192.100.31.255 是广播地址, 剩余的 192.100.0.1 到 192.100.31.254 可供使用.
子网掩码为 255.255.224.0, 也可以写成 11111111.11111111.11100000.00000000, 从左边数来前 19 位设置为 1, 后 13 位设置为 0. 使用 192.100.0.0/19 CIDR 的网络可以容纳 8190 个主机.

3.3 路由器

路由表采取最长前缀匹配规则, 即在该表中寻找最长的匹配项, 向与最长前缀匹配相关联的链路接口转发分组. 但是如果最长前缀项在路由表中位于其他匹配项的后面,路由器会将数据包转发到其他匹配项所指向的下一跳.

这些都基于分组交换机制, 以及存储转发机制.

路由表中的每一个路由项都具有以下内容:

  • 目的地址/子网掩码;

  • 下一跳路由器: 指定下一个路由器的 IP 地址;

  • 出接口: 指定数据包发送到目标网络时的物理接口;

  • 路由度量: 标识到达目标地址的距离, 直接相连一般为 0.

路由器也被称为网关设备.

3.3.1 转发机制

  • 数据包抵达路由器: 当数据包到达路由器的输入接口时, 路由器会检查数据包的目标 IP 地址.

  • 查找路由表: 路由器会顺序查找其路由表, 以找到与目标 IP 地址匹配的路由项.

  • 最长前缀匹配: 路由器会在路由表中顺序查找直到路由表中的目标网络号 = 目标地址 & 子网掩码, 最长前缀匹配正是通过路由表的顺序实现的.

  • 转发数据包: 路由器根据选定的路由项确定下一跳地址和输出接口, 然后路由器将数据包转发到相应的输出接口, 以便数据包沿着路径继续传输.

3.3.2 算法

  1. 路由器启动时, 会向与其相邻的路由器发送路由信息, 包括本路由器到其他路由器的距离和路径信息. 这些信息将被存储在路由表中.

  2. 路由器通过路由表中的信息来决定将数据包转发给哪个相邻路由器. 当路由器接收到一个数据包时, 它会查找路由表, 找到到达目标地址的最佳路径.

  3. 当链路状态发生改变时, 例如某个链路断开或者新的链路建立时, 路由器会重新计算路由表. 这个过程叫做路由表的更新, 路由器会向相邻的路由器发送更新信息, 以保持网络中各个路由器的路由表信息是最新的.

  4. 当路由器收到更新信息时, 它会比较更新后的信息和本地存储的路由表信息, 如果更新后的信息更优, 则会更新路由表. 如果更新后的信息比本地存储的信息更劣, 则会忽略更新.

  5. 路由器会通过交换路由信息来计算每个目标地址的最短路径. 每个路由器会向相邻的路由器发送其到达目标地址的距离和路径信息, 收到这些信息后, 路由器会计算出到达目标地址的最短路径, 并更新路由表.

  6. 路由器定期地发送路由信息, 以保持网络中路由表信息的实时性, 这个时间间隔被称为路由更新间隔.

3.3.3 网络地址转换

路由器接收到内部主机的数据包后,将它的目的地址换成外部主机的 IP 地址; 路由器接收到外部主机发送回来的数据包, 再次修改数据包中的目的地址为内部主机的 IP 地址和端口号; 通过 NAT 的转换过程, 内部网络中的私有 IP 地址被映射为公共 IP 地址.

3.4 IPv6

IPv6 是对 IPv4 的升级和扩展, 它没有首部长度字段, 也没有因特网校验和. IPv6 有更简化的报头格式, 更好的支持多播, 更强大的安全性和可扩展性等. IPv6 的首部为 40 字节.

3.4.1 IPv6 数据报格式

  • 版本号: 4 位, 值为 6;

  • 流量类型: 8 位, 用于标识数据报的优先级;

  • 流标签: 20 位, 用于标识属于同一数据流的数据包;

  • 承载数据的长度; 16 位;

  • 下一个报头: 8 位, 指示该报头之后的报头类型;

  • 跳数限制: 8 位, 指示数据报文的最大传输距离, 类似于 IPv4 的 TTL;

  • 源 IPv6 地址: 128 位;

  • 目的 IPv6 地址: 128 位;

  • 可选扩展头: 用于对数据传输做出一些特殊操作, 如分片头部, 认证, 加密等;

  • 承载的数据.

3.5 动态路由协议

常见的三种动态路由协议:

  1. RIP (Routing Information Protocol)
    RIP 协议是一种基于距离矢量的路由协议, 用于在小型内部 IP 网络中进行路由选择. 它基于距离矢量算法.

  2. OSPF (Open Shortest Path First)
    OSPF 协议是一种基于链路状态的路由协议, 用于在中型内部 IP 网络中选择最优的路径. 它基于 Dijkstra 算法.

  3. BGP (Border Gateway Protocol)
    BGP 协议是一种自治系统之间的路由选择协议, 用于在大型外部 IP 网络实现路由选择和自治系统之间的互联. 它基于外部路由算法.

另外 ICMP 协议是一种报告协议, 用于在 IP 网络中传递控制信息和错误消息, 例如 ping 命令就是利用 ICMP 协议来测试网络连通性的.

3.6 VLAN

VLAN (Virtual Local Area Network) 即虚拟局域网, 是将一个物理的 LAN 在逻辑上划分成多个广播域的通信技术. 每个 VLAN 是一个广播域, VLAN 内的主机间可以直接通信, 而 VLAN 间则不能直接互通. 这样, 广播报文就被限制在一个 VLAN 内.

VLAN 的主要作用和优势包括提高网络安全性, 减小广播域, 简化网络管理, 实现逻辑上的网络划分等.

4 链路层

4.1 链路层提供的服务

4.1.1 成帧

在每个网络层数据报经链路传输前, 所有链路层协议都用链路层帧封装起来. 一个帧由一个数据字段和多个首部字段组成, 网络层的数据报位于数据字段中.

数据载荷是 46 到 1500 字节, 考虑到封装成帧的开销, 以太网帧的最小尺寸是 64 字节, 最大尺寸是 1518 字节.

4.1.2 链路接入

MAC (Media Access Control Address) 地址是网络适配器 (如网卡) 的唯一标识符, 用于在局域网中标识设备, 共 48 位, 也被称为物理地址. MAC 协议规定了帧在链路上传输的规则.

4.1.3 可靠交付

与 TCP 相似, 链路层可以通过帧确认, 超时重传, 序列号, 差错检测和纠正, 流量控制等方式实现可靠数据交付.

4.1.4 差错检测和纠正

链路层使用循环冗余校验 (CRC) 等机制来检测数据帧中的错误, 并尝试纠正这些错误. 如果纠正失败, 则链路层将丢弃这个数据帧并请求重新发送.

差错分为信道本身的错误, 以及多个帧同时传输导致的错误.

4.2 信道编码

链路层的信道编码机制是一种数据传输技术, 它可以将数字信号转换为一种更可靠, 更适合传输的模拟信号, 一般可以分为线性码和非线性码. 线性码主要包括奇偶校验码, CRC 码和海明码等, 而非线性码主要包括卷积码和卷积码的变形等.

4.3 MAC 协议

MAC 协议 (Media Access Control, 媒体访问控制协议) 用于协调共享信道 (如以太网, 无线局域网等) 上的接口设备的通信行为, 消解冲突. 它分为信道划分协议, 随机接入协议和轮流协议.

它提供了寻址及媒体存取的控制方式, 协同局域网上的所有计算机发送帧的行为, 有效避免帧冲突的发生, 提高了共享信道的利用率.

目的 MAC 地址始终是下一跳节点对应的 MAC 地址.

4.3.1 信道划分协议

信道划分协议是一种用于共享信道网络的无冲突型协议, 它通过将共享信道分为多个子信道, 让不同的节点在不同的子信道上进行数据传输, 从而实现多节点同时进行数据传输, 提高网络的效率和可靠性. 信道划分协议主要包括以下几种:

时分多路复用 (TDMA)

TDMA 是将共享信道按照时间划分为多个时隙, 每个时隙只分配给一个节点使用, 节点在规定的时间内进行数据传输, 传输完成后释放信道, 以便其他节点使用;

频分多路复用 (FDMA)

FDMA 是将共享信道按照频率划分为多个子信道, 每个子信道只分配给一个节点使用, 节点在自己的子信道上进行数据传输, 从而避免节点之间的干扰;

波分多路复用 (WDMA)

WDMA 是将光信道按照波长划分为多个子信道, 每个子信道只分配给一个节点使用, 节点在自己的子信道上进行数据传输, 从而避免节点之间的干扰;

码分多路复用 (CDMA)

CDMA 是将共享信道使用一组不同的码分为多个子信道, 每个子信道同时被多个节点使用, 节点在不同的码上进行数据传输, 接收方通过解码特定的码来接收自己需要的数据, 从而实现多节点同时进行数据传输.

这些信道划分协议的选择取决于不同的应用场景和需求, TDMA 适用于需要严格时间同步的应用, FDMA 适用于需要多种不同数据传输速率的应用, WDMA 适用于需要高速光传输的应用, CDMA 适用于需要多节点同时进行数据传输的应用.

信道划分协议也有其缺点, 它可能浪费一些没有数据发送的时隙.

4.3.2 随机接入协议

随机接入协议是一种共享信道的有冲突型协议, 它不需要预先分配信道资源, 而是允许多个节点同时访问信道, 因此具有更高的灵活性和适应性. 随机接入协议主要包括以下几种:

ALOHA 协议

ALOHA 协议是最早的随机接入协议之一, 它允许节点在任意时间访问信道并发送数据包, 如果多个节点同时访问信道, 数据包可能会冲突, 发生碰撞. 节点在发现碰撞后 (发送机接受自己发出的信号判断是否受到干扰) 等待一段随机时间再重新发送数据包, 以避免继续发生碰撞.

对于 Slotted ALOHA, 它仅允许在已划分的时间段的起始时刻发送数据. Unslotted ALOHA 允许在任意时间发送数据.

CSMA 协议

CSMA (Carrier Sense Multiple Access, 载波侦听多路访问) 协议是一种在发送数据包之前先监听信道状态的协议, 如果信道忙, 则等待一段时间再尝试发送数据包, 以避免与其他节点的数据包发生碰撞. 当多个节点同时发送数据包时, 仍可能发生碰撞, 这时节点等待一段时间后再次尝试发送数据包.

CSMA/CD 协议

CSMA/CD 协议是在 CSMA 协议的基础上增加了碰撞检测 (Collision Detection) 机制, 当节点发现自己发送的数据包与其他节点的数据包发生碰撞时, 立即停止发送数据包, 并发送一个特殊的信号 (阻塞信息) 表示发生了碰撞, 其他节点收到该信号后等待一段随机时间再重新发送数据包, 以避免继续发生碰撞. CSMA/CD 不能完全避免冲突.

链路最小数据帧长度等于争用期长度与数据传输速率的乘积. 其中争用期为端到端传输时延 t 的两倍, 如果主机发送信号后出现冲突则在 2t 时间内必能检测到并停止发送, 如果发送信息的时间短于争用期, 则在检测到冲突之前信息就已经发送完毕, 所以发送数据帧的时间应长于争用期.

CSMA/CA 协议

CSMA/CA 协议是一种在无线网络中广泛使用的随机接入协议, 它采用了碰撞避免 (Collision Avoidance) 机制, 节点在发送数据包之前发送一个短的信号进行预约, 表示将要占用信道, 其他节点在接收到该广播信号后暂时不发送数据包, 以避免与预约节点发生碰撞. 如果信道忙, 则等待一段时间再次尝试发送预约信号.

随机接入协议的主要优点是灵活性高, 可以适应不同的网络规模和节点数量, 但由于节点在发送数据包之前需要等待一段时间, 因此效率相对较低, 容易发生碰撞和数据包丢失. 因此, 随机接入协议通常用于低负载, 低速率的网络中, 而在高负载, 高速率的网络中, 信道划分协议更为常见.

4.3.3 轮流协议

轮流技术是一种无冲突型多路复用技术, 用于将多个信号按照一定的顺序依次传输到同一个信道上. 它通常用于需要在多个通信方之间轮流分配信道资源的场景.

轮流协议采用令牌传递机制 (Token Passing). 当一个设备需要发送数据时, 它必须等待令牌到达自己的位置. 一旦设备获得了令牌, 它就可以发送数据, 并将令牌传递给下一个设备. 这个过程一直持续到所有的设备都发送了数据, 然后令牌会回到网络的起点, 等待下一轮传输.

FDDI 采用了轮流协议, 它是一种基于光纤的高速局域网技术.

4.4 无线网络的组成

无线通讯通常存在于局域网内部, 位于链路层传输的边缘.

RTS/CTS 是一种用于无线网络中的碰撞避免机制, 它可以减少因多个终端设备同时传输数据而导致的冲突和数据包丢失的情况 (隐藏站点). 在发送数据之前, 发送节点首先向接收节点发送一个 RTS (请求发送) 帧. 如果接收节点准备好接收数据, 它会回复一个 CTS (清除发送) 帧. 在这个过程中, 两个节点之间建立了一个明确的通信路径, 确保了数据在通信过程中不会与其他节点的数据发生冲突.

移动用户将链路层帧无线发送到附近的基站中, 基站将帧拆开后根据数据报首部选择出链路并重新用帧封装, 通过缆线等有线传输方式传送到另一个基站, 最终通过无线发送到目标地址.

蓝牙技术主要用于短距离数据传输, 适用于设备之间的快速, 低功耗通信.

4.5 分组交换机

物理层的集线器 (Hub) 相当于多端口的中继器 (Repeater). 相比于集线器, 链路层的交换机 (Switch) 的连接网口更多, 速度比集线器快得多. 集线器向所有端口转发帧, 交换机仅向特定端口转发帧.

4.5.1 转发机制

分组交换机通过侦听获得每一个接口对应的主机依据.

若不存在依据, 则向每一个接口泛转发; 若存在依据, 则向对应接口转发.

4.5.2 算法

分组交换机的算法可以概括为以下几个步骤:

  1. 接收数据包: 当一个数据包到达交换机时, 交换机将其存储在缓冲区中.

  2. 查找目标地址: 交换机查找数据包的目标地址, 以确定数据包应该转发到哪个端口.

  3. 转发数据包: 一旦目标地址被确定, 交换机将数据包转发到相应的端口.

  4. 更新交换表: 当交换机学习到新的目标地址时, 它将在交换表中记录该地址和相应的端口. 如果目标地址已经存在于交换表中, 交换机将更新该地址的对应端口.

  5. 广播数据包: 如果交换机无法确定数据包的目标地址, 它将广播数据包以便其他设备可以处理它.

  6. 处理冲突: 当多个数据包同时到达交换机的同一端口时, 交换机使用一些算法来处理这些冲突, 例如使用队列, 随机延迟等.

和路由器一样, 分组交换机也会定期向邻居报告转发表.

5 习题

\(\text{Qn1}\quad\) 已知 CIDR 为 192.9.200.13/24, 计算网络号和主机号.

\(\text{Sol}\quad\)
先转换为二进制
IP 地址: 11000000 00001001 11001000 00001101
子网掩码: 11111111 11111111 11111111 00000000
与运算得到 11000000 00001001 11001000 00000000
即网络号为 192.9.200.0
子网掩码取反与运算得到 00000000 00000000 00000000 00001101
即主机号为 0.0.0.13

\(\text{Qn2}\quad\) 在某个网络中, R1 和 R2 为相邻路由器, 其中表 (a) 为 R1 的原路由表, 表 (b) 为 R2 广播的距离向量报文, 请根据 RIP 协议更新 R1 的路由表, 并写出更新后的路由表.

(a)

目的网络 距离 下一跳
10.0.0.0 0 直接
30.0.0.0 7 R7
40.0.0.0 3 R2
45.0.0.0 4 R8
180.0.0.0 5 R2
190.0.0.0 10 R5

(b)

目的网络 距离
10.0.0.0 4
30.0.0.0 4
40.0.0.0 2
41.0.0.0 3
180.0.0.0 5

\(\text{Sol}\quad\)
根据 RIP 协议, R1 先接受邻居 R2 的路由项并对距离字段加 1, 后判断:

  1. 该项不在原路由表中: 添加到路由表中;
  2. 该项在原路由表下一跳也为 R2: 无条件替换;
  3. 该项在原路由表下一跳不为 R2, 且距离缩短: 更新路由表的下一跳为 R2, 更新距离.
目的网络 距离 下一跳
10.0.0.0 0 直接
30.0.0.0 5 R2
40.0.0.0 3 R2
41.0.0.0 4 R2
45.0.0.0 4 R8
180.0.0.0 6 R2
190.0.0.0 10 R5

\(\text{Qn3}\quad\) 根据下图所示回答问题.

(1) 填写路由器 RG 所有路由表项.

目的网络/掩码长度 下一站 IP 地址 RIP 距离 出接口

(2) 如果在不改变路由表项的前提下, 请写出在路由器 RF 上最多可再连接的路由器数量.

(3) 如果部分内网需要访问外网, 需要使用哪两个配置命令.

(4) 如果将 192.168.17.128/25 划分 3 个子网, 其中一个子网能容纳 50 台主机, 另外两个子网能容纳 20 台主机, 要求网络地址从小到大依次分配给 3 个子网, 给出第二个子网的掩码和可用的 IP 地址段.

\(\text{Sol}\quad\)
(1) 首先确定有哪些网段:

  1. 192.168.1.233, 192.168.1.234;
  2. 192.168.1.237, 192.168.1.238;
  3. 192.168.1.241, 192.168.1.242, 192.168.1.243;
  4. 192.168.1.249, 192.168.1.250, 192.168.1.251;
  5. 192.168.16.0/24, 192.168.17.0/24, 192.168.18.0/24, 192.168.19.0/24;
  6. 192.168.32.0/24, 192.168.33.0/24, 192.168.34.0/24, 192.168.35.0/24.

以 5 为例, 将这些 IP 地址进行路由汇聚:
11000000 10101000 00010000 00000000
11000000 10101000 00010001 00000000
11000000 10101000 00010010 00000000
11000000 10101000 00010011 00000000
因此网段为 11000000 10101000 00010000 00000000
即目标地址/掩码长度为 192.168.16.0/22

请记住全 0 全 1 是网络地址和广播地址, 它们不是可用地址.

目的网络/掩码长度 下一站 IP 地址 RIP 距离 出接口
192.168.1.232/30 直接相连 0 S0
192.168.1.236/30 直接相连 0 S1
192.168.1.240/29 192.168.1.234 1 S0
192.168.1.248/29 192.168.1.238 1 S1
192.168.16.0/22 192.168.1.234 2 S0
192.168.32.0/22 192.168.1.238 2 S1

RG 已经是边界, 最后可以加一个默认路由项向外网 Internet 转发

目的网络/掩码长度 下一站 IP 地址 RIP 距离 出接口
0.0.0.0/0 - - G0

(2) RF 的 E0 端口所在的子网掩码是 29 位, 主机号有 2^3-2=6 个可用地址. 图中已用去 3 个, 还剩下 3 个可连.

(3) FW 需使用 NAT 转换内部地址, 以及使用 global 所指定的地址池进行对外访问.

(4) 192.168.17.128/25 的可用地址有 2^7-2=126 个, 先将子网掩码扩展一位得到 62 个可用地址的 192.168.17.192/26, 再扩展一次得到 30 个可用地址的 192.168.17.224/27, 因此第二个网络地址为 192.168.17.192/27, 可用地址段为 192.168.17.193-192.168.17.222.

请记住网络划分中子网必须遵循二进制边界, 即子网内的 IP 地址数量必须是 2 的整数次幂.

\(\text{Qn4}\quad\) 根据 R1 的路由表画出连接图.

目的网络/掩码长度 下一站 IP 地址 出接口
140.5.12.64/26 180.15.2.5 m2
130.5.8.0/24 190.16.6.2 m1
110.71.0.0/16 直接相连 m0
180.15.0.0/16 直接相连 m2
190.16.0.0/16 直接相连 m1
0.0.0.0/0 110.71.4.5 m0

\(\text{Sol}\quad\)

首先确定 R1 有几个出接口 (m0, m1, m2) 和几个下一站路由器 (110.71.4.5, 190.16.6.2, 180.15.2.5), 接下来将各个网段镶嵌其中.

\(\text{Qn5}\quad\) 填写下面的 TCP 传输图:
(1)

(2)

\(\text{Qn6}\quad\) 简答题.
(1) Internet 基于分组交换还是电路交换?
(2) 每个层是如何标记通信双方的? 如何编址?
(3) 路由器和分组交换机的区别?
(4) 分别解释 TCP/IP 模型和 OSI 模型的每一层次, 并分别列举一些协议.
(5) NAT 是如何缓解 IPv4 的数量问题的?
(6) 什么是 VPN? 解释正向代理和反向代理.
(7) 组播和广播前如何建立连接?
(8) 数据包的延迟有哪四种?
(9) 常见的有线网络有哪些? 无线网络有哪些?
(10) 流量控制和拥塞控制有何异同?
(11) 说明 ARP 协议的主要功能, 并简述其工作过程.
(12) TCP 和 UDP 协议有哪些本质区别?

\(\text{Sol}\quad\)
(1) 分组交换.

分组交换技术 (如 TCP/IP 协议) 将数据分割成较小的数据包 (即分组), 并在每个分组中包含目的地址和源地址等控制信息. 在传输数据时, 每个分组独立传输, 并通过路由器在网络中转发, 最终到达目的地, 这些分组在目的地再次组装成完整的数据. 分组交换具有灵活性和可扩展性, 适用于数据量小, 数量多且传输不连续的场景, 如网页浏览和电子邮件等.

电路交换技术在通信前需要先建立一条专用的物理连接, 直到通信结束才释放该连接. 在电路交换中, 通信双方占用了整个物理连接, 数据可以按照固定的速率传输, 因此具有一定的实时性和稳定性, 适用于需要传输大量连续数据的场景.

(2) 在计算机网络中, 每个通信层都会使用不同的标识符来标记通信双方和编址. 下面是各层使用的标识符和编址方法的简要介绍:

物理层: 物理层使用 MAC 地址来标识通信双方. MAC 地址是一个 48 位的二进制数, 通常表示为六个十六进制数. 在以太网中, 每个设备都有一个唯一的 MAC 地址, 用于标识网络上的每个设备. 物理层的编址方式是由设备厂商预先配置的.

链路层: 链路层使用 MAC 地址来标识通信双方, 并通过 MAC 地址来实现数据帧的传输. 在链路层中, 每个设备的 MAC 地址可以用来进行无连接通信或面向连接通信. 链路层中的编址方式可以分为两种: 静态地址和动态地址. 静态地址是由设备厂商预先配置的, 动态地址则是由网络管理员分配的.

网络层: 网络层使用 IP 地址来标识通信双方, 并通过 IP 地址来实现数据包的传输. IP 地址是一个 32 位的二进制数, 通常表示为四个十进制数. 在 Internet 中, 每个设备都有一个唯一的 IP 地址, 用于标识网络上的每个设备. 网络层的编址方式是由网络管理员分配的.

传输层: 传输层使用端口号来标识通信双方, 并通过端口号来实现数据段的传输. 端口号是一个 16 位的二进制数, 用于标识一个应用程序在一个设备上的通信端点. 传输层的编址方式是由应用程序开发人员指定的.

应用层: 应用层使用不同的协议和标识符来标识通信双方和编址. 常用的应用层协议包括 HTTP, FTP, SMTP, POP3 等, 这些协议都定义了不同的标识符和编址方式. 在 Web 浏览器和 Web 服务器之间的通信中, 浏览器会向服务器发送 HTTP 请求消息, 该消息包含了目标服务器的主机名或 IP 地址, 以及服务器上要访问的资源的路径. Web 服务器会向浏览器返回 HTTP 响应消息, 该消息包含了数据和其他相关信息, 例如状态码和内容类型.

(3) 路由器工作在网络层, 用于实现不同网络之间的通信, 不同端口分割了广播域; 分组交换机工作在数据链路层, 用于在同一个网络中转发数据包, 不同端口分割了冲突域. 可以说在一个路由器下有很多的交换机.

(4) TCP/IP 模型 (也称 TCP/IP 协议簇):

  • 物理层 (Physical Layer): 负责管理网络物理媒介, 例如电缆, 光纤等, 以及在物理媒介上传输比特流.

  • 数据链路层 (Data Link Layer): 负责对数据进行分组和封装, 以便在物理层上传输, 同时还负责进行错误检测和纠正.

  • 网络层 (Network Layer): 负责将数据包从源地址传输到目标地址, 实现路由选择和流量控制等功能.

  • 传输层 (Transport Layer): 负责提供端到端的数据传输服务, 包括可靠的数据传输, 流量控制和拥塞控制等.

  • 应用层 (Application Layer): 负责提供特定的应用程序服务, 如文件传输, 电子邮件, 网页浏览等.

OSI 模型:

  • 物理层 (Physical Layer): 这一层负责在物理媒介上传输数据比特流 (Bit Stream), 包括数据传输介质, 传输速率, 电气特性等.

  • 数据链路层 (Data Link Layer): 这一层负责将比特流转换为帧 (Frame), 在不可靠的物理线路上进行可靠的数据传递, 常见协议有 MAC.

  • 网络层 (Network Layer): 以分组 (Packet) 或称数据报 (Datagram) 为单元完成主机到主机的通信服务, 实现路由选择等功能, 常见协议有 IP, ICMP, ARP, RARP, RIP, OSPF, BGP.

  • 传输层 (Transport Layer): 以报文段 (Segment) 为单位在终端用户之间提供透明的数据传输, 包括可靠的数据传输, 流量控制和拥塞控制等, 常见协议有 TCP, UDP, SCTP.

  • 会话层 (Session Layer): 负责在网络中的两节点之间建立和维持通信, 常见协议有 ASDP, RTCP.

  • 表示层 (Presentation Layer): 为不同终端的上层用户提供数据和信息的格式化方法, 如加密解密, 常见协议有 TLS, SSL.

  • 应用层 (Application Layer): 负责对软件提供接口以使程序能够使用网络服务, 如文件传输, 电子邮件, 网页浏览等, 常见协议有 HTTP, FTP, SMTP, SSH.

(5) 当使用内网 IP 地址连接到因特网时, 通常需要通过网络地址转换 (NAT) 来实现访问互联网. NAT 是一种将私有地址转换为公共地址的技术, 可以将多个内部主机的私有地址映射到一个或多个公共IP地址上. 这样, 在内部网络中, 多台设备可以共享同一个公共 IP 地址上网, 从而减少了公共 IP 地址的使用. 这个公共 IP 地址是外界可以看到的, 但并不能直接区分每一个内网的主机. 为了解决这个问题, NAT 技术引入了端口映射 (Port Mapping) 的概念. 在 NAT 设备上维护一个端口映射表, 将内网主机的私有 IP 地址和端口映射到一个公共 IP 地址和端口上. 当一个外部请求到达 NAT 设备时, NAT 设备会根据端口映射表, 将请求数据包中的目标端口映射到内网主机的私有 IP 地址和端口上, 然后再将请求数据包发送到内网主机上.

(6) 虚拟专用网络 (Virtual Private Network) 通过在用户和互联网之间建立加密通道, 从而使数据无法被其他人窃听或篡改. 在绕过地理限制中, VPN 起到的作用是对连接进行加密并改变用户的网络位置, 相当于一个正向代理.

正向代理 (Forward Proxy) 是客户端向服务器请求数据时, 代理服务器充当中间人的角色, 将请求转发给目标服务器, 然后将目标服务器返回的数据再转发给客户端. 正向代理主要用于访问被屏蔽的网站, 隐藏客户端的真实IP地址, 提高访问速度等.

反向代理 (Reverse Proxy) 是当客户端请求服务器数据时, 代理服务器充当服务器的角色, 将请求转发给实际的服务器, 接收服务器返回的数据后再转发给客户端. 反向代理主要用于负载均衡, 隐藏服务器的真实IP地址, 缓存静态资源等.

(7) 组播或广播通过发送方与组播地址 (即 D 类地址) 或广播地址的最小生成树建立连接, 接下来发送数据.

(8) 总延迟 = 分组处理延迟 + 分组排队延迟 + 分组传输延迟 + 信号传播延迟.
其中传输时延是指发送端将整个数据包传输到链路中所需的时间. 它取决于数据包的大小和链路的带宽, 与发送端与接收端之间的距离无关. 传输时延等于数据包大小除以链路带宽.

而传播时延是指信号从发送端传输到接收端所需的时间. 它取决于信号在介质中传播的速度 (通常接近光速) 和发送端与接收端之间的距离. 传播时延与数据包的大小无关, 主要受到物理距离和传播速度的影响. 传播时延等于距离除以信号传播速度.

(9) 常见的有线网络主要包括:

  • 以太网: 一种广泛使用的有线局域网技术, 通过物理媒介 (如网线) 在计算机之间传输数据.

  • 因特网的核心层: 核心层是因特网的骨干网络, 由大量的高速路由器和链路组成, 承载着全球的数据传输. 在核心层中, 主要使用的是有线网络技术, 如光纤和卫星等. 事实上在和大洋彼岸的人们通信时, 数据真的在海底电缆上传输. 蜂窝基站之间也是有线连接的.

常见的无线网络主要包括:

  • 因特网的边缘层: 边缘层是最靠近用户的一层, 包括了所有连接到因特网的终端设备, 如电脑, 手机, 平板, 这些设备可以通过无线网络如 Wi-Fi, 蜂窝移动网络等接入到接入层网络中.

(10) 流量控制主要解决的是发送端和接收端速度不匹配的问题, 其目的是防止发送端发送数据过快, 导致接收端来不及处理而发生数据丢失. 流量控制主要在两个通信实体之间进行, 通常通过滑动窗口等方法来控制发送端的发送速率, 确保接收端能够及时处理到达的数据.

拥塞控制主要解决的是网络中数据传输拥塞的问题. 当网络中的数据流量过大, 超过了网络设备 (路由器, 交换机) 的处理能力时, 就可能发生拥塞, 导致数据包丢失和延迟增加. 拥塞控制的目的是防止数据传输过程中拥塞的发生或减轻拥塞的程度, 从而提高网络的传输效率.

(11) ARP 协议的主要功能是将 32 位 IP 地址转换为 48 位物理地址.

首先每台主机都会在缓冲区建立一个 ARP 列表, 以表示 IP 与 MAC 的对应关系. 当有数据包发送时, 会先检查 ARP 列表中是否存在该 IP 对应的 MAC 地址, 如果有, 则直接将包发送到这个 MAC 地址, 如果没有, 就向本地网段发起一个 ARP 请求的广播包, 网络中所有主机收到这个 ARP 包后, 会先检查自己的 IP 是否与包中的 IP 地址一致, 如果不一致则忽略, 如果一致, 则向发送端发送一个响应包, 发送方收到该响应包后将接收方的 IP 与 MAC 添加到自己的 ARP 列表中, 然后开始数据的传输.

(12) TCP 是面向连接的可靠的数据传输协议 (顺序传输, 确认应答, 超时重传, 流量控制, 拥塞控制), 不支持广播和组播.

UDP 是无连接的, 不可靠的数据传输协议, 不支持流量控制和拥塞控制, 支持广播和组播.

\(\text{Qn7}\quad\) 名词解析.

Circuit Switching: 电路交换是一种通信技术, 通过在通信节点之间建立一条物理连接, 实现通信.
Packet Switching: 分组交换是一种将数据分成小块分组进行传输的技术, 每个分组都包含源和目的地址以及其他信息, 可以通过不同的路径到达目的地.
FDM (frequency-division multiplexing): 频分复用是一种将信号划分为多个频率段并同时传输的技术, 每个信号占据一个特定的频率范围, 以便在接收端进行分离.
TDM (time-division multiplexing): 时分复用是一种将信号按时间片分隔并顺序传输的技术, 每个信号占用一个固定的时间片, 以便在接收端进行分离.
Queuing delay: 排队时延是指数据包在路由器或其他网络设备的缓冲区等待传输的时间.
Transmission delay: 传输时延是指在发送数据包时所需的时间, 通常与数据包的大小和链路的带宽有关.
Propagation delay: 传播时延是指信号在链路上从源到目的地传播所需的时间, 与链路的长度和信号的传播速率有关.
Throughput: 吞吐量是指单位时间内成功传输的数据量, 通常用比特/秒 (bps) 表示.
RTT (round-trip time): 往返时间是指数据包从源到目的地再返回源的总时间.
Web proxy caches: Web 代理缓存是一种服务器, 它可以缓存经过的 Web 页面, 以便在后续的请求中更快地提供内容.
Out-of-band: 带外是指在通信系统中与数据通信独立的信道, 用于传输控制信息.
In-band: 带内是指在通信系统中与数据通信在同一信道上的控制信息.
User agent: 用户代理是一个软件, 它代表用户与服务器之间进行通信, 浏览器是最常见的用户代理.
Top-level domain (TLD) servers: 顶级域名服务器是管理顶级域名 (如 .com, .org 等) 的 DNS 服务器.
Authoritative DNS servers: 权威 DNS 服务器是负责某个域名的 DNS 服务器, 提供该域名下主机的 IP 地址信息.
Iterative queries: 迭代查询是指客户端与 DNS 服务器之间的一种查询方式, 客户端向 DNS 服务器发送请求, 如果 DNS 服务器无法提供答案, 则会返回一个更接近目标的 DNS 服务器地址, 客户端将继续查询直至找到答案.
Non-persistent HTTP: 非持久性 HTTP 是一种早期的 HTTP 传输模式, 每个请求/响应对需要建立一个新的 TCP 连接.
Persistent HTTP: 持久性 HTTP 是一种允许在同一 TCP 连接上进行多个请求/响应对的 HTTP 传输模式, 可提高传输效率.
Peer-to-Peer (P2P) Network: 点对点网络是一种去中心化的网络结构, 其中每个节点都充当客户端和服务器, 可以直接与其他节点交换数据.
Cookie: Cookie 是一种小型文本文件, 由 Web 服务器发送给用户的浏览器, 并在用户计算机上存储.
Encapsulation: 封装是将数据包装在协议头中的过程, 以便在网络中传输.
Decapsulation: 解封装是从协议头中提取数据的过程.
Multiplexing: 复用是将多个信号或数据流组合成一个信号或数据流的过程.
Demultiplexing: 解复用是将一个信号或数据流分解为多个信号或数据流的过程.
Positive acknowledgments: 正确认知是一种确认机制, 接收方向发送方发送一个确认消息, 表示成功接收数据.
Cumulative acknowledgment: 累计确认是一种确认机制, 接收方向发送方发送一个确认消息, 表示已成功接收的最后一个连续数据包序列号.
Checksum: 校验和是一种检测数据完整性和准确性的方法, 通过计算数据包中所有字节的和并附加到数据包中.
Stop and wait: 停止等待是一种基本的流控制协议, 发送方在发送一个数据包后必须等待接收方的确认, 然后再发送下一个数据包.
Pipelined protocols: 流水线协议是一种允许在没有收到确认的情况下发送多个数据包的流控制协议.
Go-back-N: Go-back-N 是一种流水线协议, 发送方维护一个固定大小的发送窗口, 如果某个数据包未被确认, 发送方会重发该数据包及其后的所有数据包.
Selective Repeat: 选择性重传是一种流水线协议, 发送方仅重发未被确认的数据包.
Fast Retransmit: 快速重传是一种 TCP 协议的拥塞控制策略, 当发送方接收到连续的重复确认时, 立即重发未被确认的数据包, 而不等待超时.
Flow Control: 流量控制是一种在发送方和接收方之间调节数据传输速率的机制, 以防止接收方被发送方发送的数据量淹没.
Three way handshake: 三次握手是一种在 TCP 连接建立过程中使用的机制, 由三个步骤组成: SYN, SYN-ACK 和 ACK.
Congestion Control: 拥塞控制是一种在网络中调节数据传输速率的机制, 以防止链路过载导致的拥塞.
Additive increase: 加法增加是一种拥塞控制策略, 通过逐渐增加发送窗口大小来提高传输速率.
Multiplicative decrease: 乘法减少是一种拥塞控制策略, 通过减小发送窗口大小来降低传输速率.
Slow Start: 慢启动是一种 TCP 拥塞控制策略, 通过逐步增加发送窗口大小来探测可用带宽.
Congestion-avoidance: 拥塞避免是一种 TCP 拥塞控制策略, 在慢启动阶段后采用加法增加策略逐渐提高传输速率.
Fast recovery: 快速恢复是一种 TCP 拥塞控制策略, 在发生丢包时减小发送窗口大小, 然后采用加法增加策略逐渐提高传输速率.
Forwarding table: 转发表是网络设备 (路由器) 用于存储目的地址和输出端口映射关系的表格.
Virtual-circuit networks: 虚拟电路网络是一种在分组交换网络中建立逻辑连接的技术, 数据包沿着预先建立的路径传输.
Datagram networks: 数据报网络是一种无连接的分组交换网络, 每个数据包独立传输, 可能采用不同的路径.
Head-of-the-line (HOL) blocking: 队头阻塞是一种在交换设备中, 由于一个数据包阻塞而导致其他数据包无法通过的现象.
DHCP: 动态主机配置协议是一种用于动态分配 IP 地址的网络协议.
Classless interdomain routing (CIDR): 无类别域间路由是一种用于 IP 地址分配和路由聚合的方法, 用于替代旧的分类地址系统.
Reverse path forwarding (RPF): 反向路径转发是一种用于防止 IP 地址欺骗的技术, 路由器根据源 IP 地址验证数据包的正确性.
Longest prefix matching: 最长前缀匹配是一种在路由表中查找最佳路径的方法, 根据目标 IP 地址与表中前缀的匹配长度来确定下一跳.
Network Address Translation (NAT): 网络地址转换是一种在私有网络和公共网络之间转换 IP 地址的技术, 允许多个设备共享一个公共 IP 地址.
NAT traversal: NAT 穿越是一种允许位于 NAT 后的设备直接通信的技术, 例如 STUN, TURN 和 ICE.
Tunneling: 隧道技术是一种在不同网络层之间传输数据的方法, 将一个协议的数据包封装在另一个协议的数据包中.
Dual-stack: 双栈是一种同时支持 IPv4 和 IPv6 协议的网络技术, 允许设备在两种 IP 地址版本之间进行通信.
Hierarchical Routing: 分层路由是一种将网络分为多个层次的路由技术, 简化了路由选择和地址分配.
Autonomous systems: 自治系统是一组在单一技术和管理控制下的网络设备和路由器, 自治系统之间通过 BGP 协议进行路由交换.
BGP (Border Gateway Protocol): 边界网关协议是一种用于自治系统之间交换路由信息的协议.
Poisoned Reverse: 毒性逆转是一种在距离矢量路由协议中防止路由环路的技术, 通过广播一个无穷大的距离来表示不可达目的地.
ICMP: 因特网控制报文协议是一种用于在 IP 网络中传输控制信息的协议.
MAC: 媒体访问控制地址是一个在局域网中唯一标识网络接口的 48 位地址.
NIC (Network Interface Card): 网络接口卡 (网卡) 是一种连接计算机和网络的硬件设备.
EDC (Error Detection Code): 错误检测码是一种用于检测数据传输中的错误的编码方法.
FEC (Forward Error Correction): 前向纠错是一种通过发送冗余数据来实现错误检测和纠正的技术.
CRC: 循环冗余校验是一种用于检测数据传输中的错误的校验方法.
CSMA: 载波监听多路访问是一种以太网中的一种媒体访问控制协议, 用于检测信道状态并避免冲突.
CDMA: 码分多址是一种利用扩频技术允许多个用户在同一频谱上同时通信的技术.
MPLS (Multiprotocol Label Switching): 多协议标签交换是一种高性能的数据转发技术, 通过短标签来实现快速路由选择.
SNR (Signal-to-Noise Ratio): 信噪比是衡量信号质量的指标, 表示信号强度与背景噪声之间的比例.
CSMA/CD: 载波监听多路访问/碰撞检测是一种在以太网中用于检测和解决数据包碰撞的协议.
CSMA/CA: 载波监听多路访问/碰撞避免是一种在无线局域网中用于避免数据包碰撞的协议.
ARP (Address Resolution Protocol): 地址解析协议是一种用于将 IP 地址映射到物理地址 (MAC) 的协议.
RARP (Reverse Address Resolution Protocol): 反向地址解析协议是一种用于将物理地址 (MAC) 映射到 IP 地址的网络协议.
Hidden terminal problem: 隐藏终端问题是一种在无线网络中终端之间无法检测到彼此信号的现象, 可能导致数据包碰撞.
PDU (Protocol Data Unit): 协议数据单元用于表示在特定协议层次上传输的数据单位.

\(\text{Qn8}\quad\) 常见缩写.

M (Message / Media / Multiple / Mail / Multiplexing): 报文 / 媒体 / 多路 / 邮件 / 复用.
P (Protocol / Path): 协议 / 路径.
I (Internet / Information / Interface): 因特网 / 信息 / 接口.
C (Control / Collision / Configuration / Carrier): 控制 / 碰撞 / 配置 / 载波.
R (Reverse / Resolution / Routing): 逆向 / 解析 / 路由.
B (Border / Band / Bit): 边界 / 带 / 比特.
G (Gateway): 网关.
O (Open): 开放.
S (Shortest / Sense / Simple / Security / Socket / Segment): 最短 / 侦听 / 简单 / 安全 / 套接字 / 报文段.
F (First / Forward): 优先 / 转发.
A (Address / Access / Avoidance / Area): 地址 / 访问 / 避免 / 区.
D (Division / Dynamic / Domain / Datagram): 划分 / 动态 / 域 / 数据报.
H (Host / Hyper): 主机 / 超.
N (Name / Network): 名称 / 网络.
T (Text / Translation / Transmission / Transfer / Transport): 文本 / 转换 / 传输.
L (Local / Layer / Link): 局域 / 层 / 链路.
V (Virtual): 虚拟.
U (User): 用户.
F (Frame): 帧.

posted @ 2023-03-22 13:18  rainrzk  阅读(289)  评论(0)    收藏  举报