第一章 计算机网络
一、Internet
计算机网络
两台以上具有独立操作系统的计算机通过某些介质连接成的相互共享软硬件资源的集合体。
计算机网络向用户提供的最重要的两大功能
- 连通性
- 共享
Internet
具体构成描述
- 数以亿计的计算互连设备
- 主机(host)=端系统(end system)
- 运行网络应用程序
- 通信链路 (link)
- 双绞线 光纤 , 无线电频谱 , 卫星
- 传输速率 = 带宽 (bandwidth)
- 分组(交换)
- 路由器( Router )和交换机(Switch)
Internet 提供的服务
- 提供网络应用基础架构
- 允许终端系统上运行分布式应用程序,并彼此交换数据
- Web, email, games, e commerce, database, VOIP, P2P file sharing
- 为分布式应用程序提供的 通信服务接口
- 无连接服务 connectionless
- 面向连接服务 connection oriented
- 不提供数据传递时间保证(发送端到接收端)的服务
协议
协议:定义了两个或多个通信实体间所交换报文的格式和次序 ,以及在报文发送和或接收或者其他事件方面所采取的行动( 响应)
基本要素:语法、语义、同步
二、网络边缘部分
端系统、客户和服务器
端系统/主机
- 运行网络应用程序
- 处在网络的边缘
- 传统主机 网络计算机和瘦客户
客户/服务器 C/S 模型
- 客户请求,并接收服务器提供的服务
- e.g. Web browser/server; email client/server
端对端模型 peer peer model:
- 极少或不采用专门服务器
- e.g. Gnutella, KaZaA
物理介质
- 物理链路:在发送方和接受方间 传播位( bit )信号
- 导引型媒体:信号在固态介质中有向传播 , 如:光纤、双绞线和同轴电缆等
- 非导引型媒体:信号在大气空间或外太空空间自由传播,如无线电
三、网络核心部分
如何传输数据
电路交换 : 每次会话预留沿其路径(线路)所需的独占资源-电话网
分组交换 : 数据以离散的数据块通过网络来发送
电路交换
多路复用(Multiple Access):在一条传输链路上同时建立多条连接,分别传输数据。 • 分片分配到会话 • 分片没有被会话使用的情况下,分片空载(不共享) • 电路级性能(有保证) • 要求呼叫建立--建立一个专门的端到端 线路(意味着每个链路上预留一个线路)
- 链路带宽分片
- 频分-frequency division
- 时分-time division
例:已知文件长 640kb,传输速率 1.536Mb/s,每条链路使用 24 个时隙的 TDM,创建端到端电路 500ms,求发送文件的时间
解:
分组交换
分组交换也称为包交换, 每个分组通过一系列链路和分组交换机传送,直到目的端,在目的端在把接收到的分组, 按顺序 组装起来,恢复原报文。 每个 端到端的数据流被划分成分组
- 所有分组共享网络资源
- 每个分组使用全部链路带宽
- 资源按需使用
资源竞争
资源需求总量可以大于可获得资源的总量 拥塞: 采用分组队列 , 等待使用链路 存储转发: 分组每次转发 1 站
- 在 1 个链路上传输
- 每经过 1 个链路转发 1 次
- 转发分组前,要求收到完整分组
分类为
- 数据报网络 TCP/IP
- 分组目的地址决定下一跳
- 会话期间路由可以改变
- 比方 : 驱车逐段问路
- 虚电路网络:X.25,FR,ATM
- 每个分组有 1 个标签 虚电路号 ,virtual circuit ID), 标签决定下 1 跳
- 连接建立时确定固定的路径 , 并且将保持于整个会话期间
- 路由器必须为每个连接维护状态信息
四、Internet 结构组成
- 国家/国际级 ISP
- 区域级 ISP
- 本地 ISP 或接入 ISP
五、分组交换网络中的延迟、丢失和吞吐量
分组延迟分为
- 节点处理延时
- 检查错误位
- 选择输出链路
- 处理延迟——微秒级
- 排队时延
- 等待被发送到输出链路上的时间,取决于路由器拥塞速度
- 传输时延
- 发送分组比特流的时间
- L:分组长度,R:链路带宽
- 发送分组比特流的时间
- 传播时延
:物理链路长度, :介质的信号传播速度
往返时延 RTT
- 从发送发发送数据开始到发送方收到来自接收方的确认经历的总时间
- 可用来判断网络的通断性、测试网络实验、计算丢包率等
排队时延
不同分组其排队时延不同
使用统计量测度:如平均排队时延、排队时延方差
排队时延大小取决于流量到达该队列的速率、链路传输速度和到达流量的性质
流量强度:比特到达队列的速率与比特从队列推出的速率比
:平均排队时延小,几乎没有分组到达或间隔很大 :分组陆续到达,形成队列,时延变大 :更多“分组”到达,超出服务能力,平均时延无穷大
设计系统时需保证流量强度不大于
分组丢失
通常,一条链路的缓存队列容量有限。
分组丢失: 当到达的分组发现队列已满,没有空间存储,被丢弃 。
丢失的分组可能由前面的节点或由源端系统重传,或根本不重传。
吞吐量
网络吞吐量
- 单位时间内整个网络传输数据的速率或分组数
- 单位: bps 或 data packets per second
吞吐量
- 接收端接收到数据的比特速率
- 瞬时吞吐量、平均吞吐量
六、协议层及其服务模型
ISO/OSI 七层参考模型
层号 | 名称 | 英文 |
---|---|---|
7 | 应用层 | Application |
6 | 表示层 | Presentation |
5 | 会话层 | Session |
4 | 传输层 | Transport |
3 | 网络层 | Network |
2 | 数据链路层 | Data Link |
1 | 物理层 | Physical |
TCP/IP 参考模型
层号 | 名称 |
---|---|
5 | 应用层 |
4 | 传输层 |
3 | 网络层 |
2 | 数据链路层 |
1 | 物理层 |
应用层( application)
- 支持网络应用,报文传送
- FTP, SMTP, STTP …
传输层( transport)
- 主机进程间数据段传送
- TCP, UDP
网络层( network)
- 主机(源目标节点)间分组传送
- 主要是 IP 协议 , 路由协议
链路层(link)
- 相邻网络节点间数据帧传送
- PPP, Ethernet
物理层
- 物理介质上的比特传送
逻辑通信
分布式
在各节点的网络实体(entities) 实现了各层的功能——主机实现 5 层功能,路由器和交换机实现 2-3 层功能。
网络实体完成功能动作, 对等实体交换消息
实体: 定义自身功能的硬/软件的集合
对等实体: 两台计算机上同一层所属的程序、进程或实体称为该层的对等程序、对等进程或对等实体
协议分层与数据
各层发方从上层到下层,收方从下层到上层传递数据 发方添加头部信息创建新的数据单元,收方去掉头部 传递新的数据单元到下层 上层 各层传送不同的协议数据单元 PDU
七、攻击威胁下的网络
植入恶意软件
病毒:潜伏,自我复制,破坏 蠕虫:主动在网络中传播的病毒 僵尸网络: 通过各种手段在大量计算机中植入特定的恶意程序,使控制者能够通过相对集中的若干计算机直接向大量计算机发 送指令的攻击网络。攻击者通常利用这样大规模的僵尸网络实施各种其他攻击活动。
攻击服务器和网络基础设施
拒绝服务攻击( DoS 三种类型
- 弱点攻击
- 带宽洪泛
- 连接洪泛
嗅探分组
分组嗅探器:记录每个流经的分组拷贝的被动接收机
容易受到攻击的网络:无线网络和以太网 LAN
第二章 应用层
一、应用层协议原理
客户机/服务器体系结构
服务器
- 总是打开的主机
- 具有固定的、众所周知的IP地址
- 主机群集常被用于创建强大的虚拟服务器
客户机
- 同服务器端通信
- 可以间断的同服务器连接
- 可以拥有动态IP地址
- 客户机相互之间不直接通信
纯P2P体系结构
- 没有总是打开的服务器
- 任意一对主机直接相互通信
- 对等方间歇连接并且可以改变IP地址
- 例如:Gnutella
- 优点:自扩展性
- 缺点:难以管理
进程通信
进程:运行在端系统中的程序 同一主机上的两个进程通过内部进程通信机制进行通信 不同主机上的进程通过交换报文相互通信
进程与计算机网络的接口-套接字
进程通过它的套接字在网络上发送和接收报文
- 套接字类比于门户
- 发送进程把报文推出门户
- 发送进程假定门户到另外一侧之间有运输设施,该设施可以传送报文到接收进程
- 套接字又叫做应用程序编程接口API
- 用户通过API对传输层的控制仅限于:
- 选择传输协议;
- 能设定几个参数
- 用户通过API对传输层的控制仅限于:
主机上的进程标识包括 IP 地址和 端口号 常用应用程序的端口号:
- Web 服务: 80
- 邮件服务: 25
应用层协议
交换的 报文类型 :如请求报文和应答报文
报文类型的语法: 报文中的各个字段及其详细描述
字段 的语义: 即包含在字段中的信息的含义
规则: 进程何时、如何发送报文及对报文进行响应
运输协议提供的服务
- TCP 服务
- 面向连接
- 可靠传输
- 流量控制
- 拥塞控制
- UDP 服务
- 不可靠传输
二、Web 应用和 HTTP 协议
HTTP 概述
网页( Web 页,或称文档) 由许多对象组成。
对象就是文件,可以是 HTML 文件 , JPEG 图像 , Java applet, 音频文件
多数网页由单个基本 HTML 文件和若干个所引用的对象构成
每个对象被一个 URL (Uniform Resource Locator 统一资源定位符)寻址
使用 TCP 协议
- 客户初始化一个与 HTTP 服务器 80 端口的TCP 连接 创建套接字
- HTTP 服务器接受来自客户的 TCP 连接请求 , 建立连接
- Browser (HTTP client) 和 Web 服务器(HTTP server) 交换 HTTP 消息 应用层协议消息 包括 HTTP 请求和响应消息
- 最后结束(或叫 关闭 )TCP 连接
HTTP 连接
非持久HTTP 连接
- 每个 TCP 连接上只传送一个对象,下载多个对象需要建立 多个 TCP 连接
- HTTP/1.0 使用非持久 HTTP 连接
持久 HTTP 连接
- 一个 TCP 连接上可以传送多个对象
- HTTP/1.1 默认使用持久 HTTP 连接
响应时间模型
RTT:一个小分组从客户主机到服务器再到客户主机的时间
响应时间
- 一个 RTT 用于建立 TCP 连接
- 一个 RTT 用于 HTTP 请求/响应消息的交互
- html 文件传输时间
持久 HTTP 连接
- 非流水线方式: 客户机只能在 前一个响应接收到之后才能发出新的请求。
- 客户机为每一个引用对象的请求和接收都使用一个 RTT 时延。
- 会浪费一些服务器资源:服务器在发送完一个对象,等待下一个请求时,会出现空闲状态。
- 流水线方式: 客户机可一个接一个 连续产生请求
(只要有引用就产生)即在前一个请求接收到响应之前可以产生新的请求。服务器一个接一个
连续发送响应对象 。
- 节省 RTT 时延, 可能所有引用对象 只花费一个 。
- TCP 连接空闲时间很短。
- 默认方式: 流水线方式的持久连接。
方法类型
HTTP/1.0
- GET
- POST
- HEAD
HTTP/1.1
- GET, POST, HEAD
- PUT
- DELETE
Cookies
- Cookie 头部行在 HTTP 响应消息
- Cookie 头部行在 HTTP 请求消息
- Cookie 文件保存在用户主机上并由浏览器管理
- Cookie 也保存在 Web 站点的后端数据库
Web 缓存(代理服务器)
目标:代表起始服务器满足 HTTP 请求
所有 HTTP 请求指向缓存
- 对象在缓存中:缓存器返回对象
- 否则缓存器向起始服务器发出请求,接收对象后转发给客户机
为什么需要Web 缓存器
减少对客户机请求的响应时间
减少内部网络与接入链路上的通信量
能从整体上大大降低因特网上的 Web 流量
三、文件传输协议 FTP
client/server 模式
client: 发起传输的一方
server: 远程主机
ftp: RFC 959
ftp 服务器 : 端口号 21
FTP 客户首先发起建立 1 个与 FTP 服务器端口号 21 之间的 TCP 控制连接 ,指定 TCP 作为传输层协议
客户在建立的控制连接上获得身份认证
客户在建立的控制连接上发送命令来浏览远程主机的目录
当服务器接收到 1 个文件传输命令时 , 在服务器端口号 20 创建 1 个与客户的 TCP 数据连接
1 个文件传输后 服务器结束这个 TCP 数据连接
FTP 数据连接建立方式
主动模式
- 客户端发送 PORT 命令 PORT h1,h2,h3,h4,p1,p2(h1 h4 是 IP 地址, p1 p2 是端口号)
- 服务器根据 PORT 命令指定的客户端地址和端口号发起数据连接
被动模式
- 客户端发送 PASV 命令
- 服务器返回监听的地址和端口号
- 客户端发起数据连接
四、电子邮件协议 SMTP, POP3, IMAP
主要组成部分:
- 用户代理user agents
- 邮件服务器mail servers
- 简单邮件传送协议和邮件接收协议
用户代理:
- 允许用户阅读,回复,转发,保存,编辑邮件消息
- 例如:Outlook, foxmail等
- 发送, 接收邮件消息到/从服务器
- 运行邮件协议
邮件服务器
- 邮箱mailbox 存放用户接收的邮件消息
- 外出报文队列outgoing message queue
- 运行邮件协议
SMTP
端口号 25
命令/应答的交互
- 命令 ASCII 文本格式
- 应答 : 状态码及其短语
邮件消息必须是 7 bit ASCII
邮件消息的格式
信头-头部行。如:
- To:
- From:
- Subject:
- 这些头部不同于 SMTP 命令
信体
- 邮件消息也必须是 ASCII
多媒体拓展
MIME: Multipurpose Internet mail Extensions 多用途因特网邮件扩展, RFC 2045, 2046
增添额外的信头头部声明 MIME content type
IMAP
邮件访问协议,从服务器获取邮件消息
端口号 143
更多功能特征(更复杂!)
允许用户像对待本地邮箱那样操纵远程邮箱的邮件
POP
端口号 110
Post Office Protocol 邮局协议[RFC 1939]
身份认证(代理<-->服务器) 并下载邮件消息
会话是无状态的
可选下载并保留/下载并删除
HTTP
Hotmail , Yahoo! Mail, etc.
五、DNS
端口号 53
使用 UDP
分布式数据库
查询方法
- 迭代查询
- 被查询的名字服务器回复可以被查询的名字服务器的 IP 地址
- 递归查询
一旦 DNS 服务器获得 DNS 映射, 它将缓存该映射到局部内存
服务器在一定时间后将丢弃缓存的信息
本地 DNS 服务器可以缓存 TLD 服务器的 IP 地址
因此根 DNS 服务器不会被经常访问
第三章 传输层
一、传输层服务
- 在两个不同的主机上运行的应用程序之间提供逻辑通信。进程之间的逻辑通信
- 传输层协议运行在端系统
- 发送方:将应用程序报文分成数据段传递给网络层
- 接收方:将数据段重新组装成报文传递到应用层
- 运输层和网络层协议的作用范围不同,IP 协议提供主机间逻辑通信,TCP 等协议则是进程间逻辑通信。
不可用的服务:
- 时延保证
- 带宽保证
二、多路复用和多路分解
在接收主机多路分解
将接收到的数据段传递到正确的套接字(多路分解)
在发送主机多路复用
从多个套接字收集数据, 用首部封装数据,然后将报文段传递到网络层(多路复用)
UDP
UDP 套接字由两个因素 指定
- 目的 IP 地址
- 目的端口号
当主机收到 UDP 数据段
- 检查数据段中的目的端口号
- 用端口号指示 UDP 数据段属于哪个套接字
- 具有不同的源 IP 地址且 或源端口号,但具有相同的目的 IP 地址和目的端口号的 IP 数据报,指向同样的套接字
TCP
TCP 套接字由 4 部分指定 :
- 源 IP 地址
- 源端口号
- 目的 IP 地址
- 目的端口号
接收主机使用所有四个值将数据段定位到合适的套接字
服务器主机可同时支持很多个 TCP 套接字
每个套接字用 4 部分来表示
以 Web 服务器为 例:对 每个连接的客户都有不同的套接字
非持久 HTTP 将对每个请求有一个不同的套接字
三、无连接传输 UDP
UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。
虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。
UDP 是无连接的,即发送数据之前不需要建立连接。
UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
UDP 没有拥塞控制,很适合多媒体通信的要求。
UDP 支持一对一、一对多、多对一和多对多的交互通信。
UDP 的首部开销小,只有 8 个字节。
UDP 是面向报文的。发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。
UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
应用层交给 UDP 多长的报文, UDP 就照样发送,即一次发送一个报文。
接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
应用程序必须选择合适大小的报文。
UDP 校验和
发送方:
- 将数据段(首部和数据)看成 16bit 的整数序列,末位不足 16bit 补零
- 校验和:数据段内容相加(高位溢出回卷),最终结果取反。
- 将校验和放入 UDP 的校验和域
接收方:
- 计算收到数据段的校验和
- 检查相加和是否全为 1:
- NO - 检测到错误
- YES - 没有检测到错误,不代表没有错误
四、可靠传输原理
rdt1.0
- 假设:使用最完美可靠的通道情况
- 没有 bit 错误
- 没有分组丢失
- 发送方,接收方分离的 FSMs :
- 发送方发送数据到下层信道
- 接收方从下层信道接收数据
rdt2.0
- 假设:下层信道可能让传输分组中的 bit 受损
- 校验和将检测到 bit 错误
- 问题: 如何从错误中恢复
- 确认(ACKs): 接收方明确告诉发送方 分组接收正确
- 否认 (NAKs):接收方明确告诉发送方 分组接收出错
- 发送方收到 NAK 后重发这个分组
- 在 rdt2.0 的新机制 (在 rdt1.0 中没有的):
- 差错检测
- 接收方反馈: 控制信息 (ACK,NAK) rcvr->sender
- FSM 多了
- make_pkt(data, checksum)
- isNAK(rcvpkt)
- isACK(rcvpkt)
rdt2.1:处理混乱的 ACK/NAK:加入序号(1bit),状态数乘 2。
rdt2.2:给 ACK 引入了序号,因此可以无需 NAK,只用 ACK。
rdt3.0
因为 rdt 3.0 的分组序号在 0 和 1 之间交替,因此 rdt 3.0 有时被称为比特交替协议
假设:下层信道丢失报文,已有的设施不能完全进行处理。
方法:添加倒计时定时器。
由于 3.0 出现了 timeout,因此重传分组改在 timeout 执行。
所有 rdt 都为停等协议。
Go Back N(GBN)
- 接收方仅发送累积 ACK
- 发送方超时重发:已发送但未被确认的报文。
- 设序号空间为 n,窗口大小为
。 - “窗口”, 允许的连续未确认的报文
- 只有一个定时器记录最早的未确认报文的发送时间
- ACK-only: 总是为正确接收的最高序号的分组发送 ACK。
- 可能生成重复的 ACKs
- 接收到失序分组:
- 丢弃(不缓冲) -> 没有接收缓冲区!
- 重发最高序号分组的 ACK
Selective Repeat(SR)
- 接收方为每个分组发送单独的 ACK
- 必要时,缓冲报文, 最后按序提交给上层
- 发送方超时重发:超时的分组。
- 对每个没有确认的报文发送者都要启动一个定时器(每个未被确认的报文都有一个定时器)
- 设序号空间为 n,窗口大小为
(小于等于接受空间大小的一半)
五、面向连接传输 TCP
TCP 概述
- 全双工数据:
- 同一个连接上的双向数据流
- MSS: TCP 报文段中数据字段的最大长度,而 MSS 通常根据 MTU(最大链路层帧)来设置。
- 面向连接:
- 在数据交换前握手(交换控制信息) 初始化发送方和接收方的状态
- 流量控制🌊:
- 发送方不会淹没接收方
- 拥塞控制🚧:
- 根据网络的拥塞情况来确定。
- TCP 在 IP 不可靠服务之上创建 rdt 服务
- 流水线技术处理报文段
- 累积确认
- TCP 使用单个重发定时器,即所有已发出去未收到的报文使用一个定时器
- 触发重发:
- 超时事件
- 重复确认
首部固定长度为 20 字节,"首部长度"字段为 4bit,以 4bytes 为单位。故 TCP 首部总长度为 20bytes~60bytes 不等(但是是 4bytes 的倍数)。
- 检验和:包括首部和数据两部分,计算检验和时,要在报文段(首部+数据,此时检验和为 0)前加 12 字节的伪首部(IPv4,IPv6 的是另一种伪首部),该伪首部有源 IP 地址、目的 IP 地址等信息。(具体信息应该不做要求)
- 序号:
- 数据段中第一个字节在数据流中的位置编号
- 确认号:
- 期望🤩从另外一边收到的下一个字节的序号
- 累积确认
估计时延
- 估计 RTT
- 样本 RTT(SampleRTT)样本 RTT 均值(EstimatedRTT),这里的具体数值为典型值。
- 估计安全余量
- EstimtedRTT 加上 “安全余量”
- EstimatedRTT 变化大 -> 更大的安全余量
- 根据 SampleRTT 偏离 EstimatedRTT 多少来估计
- EstimtedRTT 加上 “安全余量”
- 定时器
连接管理
- 三次握手建立连接
- 🙌客户端发送 SYN 请求建立连接,指定初始序号。
- 🤝服务器回复 SYN 和 ACK 同意连接,指定服务端初始序号。
- ✉客户端回复 ACK 表示收到,可能包含数据。
- 四次挥手关闭连接:
- 客户端发送 FIN 请求关闭连接(不能发送只能接收数据了)
- 服务器回复 ACK 并进行扫尾工作(扫尾时还可以发送数据)
- 服务器回复 FIN 表示可以关闭了
- 客户端回复 ACK 表示收到,随后进入超时等待
可靠数据传输
- 流水线💦技术处理报文段
- 累积确认
- 重发:
- 超时
- 重复确认:收到 3 个对同样报文段的确认,则认为该报文段之后的数据丢失,启动快速重传:在定时器超时之前重发。
流量控制
- 接收方在 TCP 头部消息中 rwnd 字段"通知"发送方剩余缓存区大小
- rwnd 为零的时候还会继续发送探测报
- 发送方限制🚦已发送但是未被确认的数据量不超过 rwnd:
六、拥塞控制原理
拥塞的原因和代价
- 场景:多个发送者/接收者,链路可靠,无限大缓存,分组的到达速率接近链路容量时 , 分组经历巨大的排队时延。
- 有限缓冲区,假设连接可靠:丢失数据,需要重传,因此增加了许多不必要的重发,发送方必须执行重传以补偿因为缓存溢出而丢弃 ( 丢失 ) 的分组。
- 同上场景,发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本。
- 当一个分组沿一条路径被丢弃时 , 每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了 。
拥塞控制的方法
- 端到端拥塞控制
- 没有从网络中得到明确的反馈
- 从端系统观察到的丢失和延迟推断出拥塞
- TCP 采用的方法
- 网络辅助的拥塞控制
- 路由器给端系统提供反馈
- 单 bit 指示拥塞 (SNA, DECnet , TCP/IP ECN, ATM)
- 指明发送者应该发送的速率
七、TCP 拥塞控制
端到端控制 没有网络辅助 发送方限制发送
大体上
发送方如何感知拥塞
- 丢失事件 = 超时或者 3 个重复的 ACKs
- TCP 发送方在丢失事件发生后降低发送速率 CongWin
三个机制
- 慢启动
- AIMD
- 对拥塞事件作出反应
- 连接开始时,cwnd(拥塞窗口) = 1 MSS , ssthresh (slow start threshold)=64 KB
- 慢启动:以 2 的指数方式增加速率🚀,cwnd 达到 ssthresh 阈值时结束慢启动进入拥塞避免 情景:倘若 cwnd 此时为 2,阈值为 3,那么慢启动状态下,下一个 cwnd 为 3。
- 拥塞避免:线性增加速率🚲
- (无论哪种状态)超时丢包:cwnd 变为 1mss ssthresh 阈值变为 cwnd 的一半,然后慢启动
- (慢启动、拥塞避免)三次冗余 ACK 丢包(快速重传):
- TCP Tahoe:和超时丢包相同 cwnd 变为 1mss ssthresh 变为 cwnd 的一半
- TCP Reno:cwnd 减半加三 ssthresh 变为原来 cwnd 的一半(快速恢复)
- 快速恢复(TCP Reno 才有):收到三个重复的确认则减半 +3。快速恢复状态每收到一个重复的 ACK 增加 MSS,若收到新的 ACK 则设置 ssthresh 阈值为当前窗口大小 cwnd
- 当 CongWin 低于阀值 , 发送方处于慢启动阶段 , 窗口指数增长
- 当 CongWin 高于阀值 , 发送方处于拥塞避免阶段 , 窗口线性增长
- 当三个重复的 ACK 出现时 阀值置为 CongWin /2 并且 CongWin 置为阀值加上 3 个 MSS 并进入快速恢复阶段,此时每收到一个重复的 ACK 拥塞窗口增加 1MSS ,如果收到新的 ACK 则拥塞窗口置成阀值)
- 当超时发生时 ,阀值置为 CongWin /2 并且 CongWin 置为 1 MSS.
第四章 网络层(数据平面)
一、网络层服务
- 主机之间的逻辑通信
- 数据平面实现的唯一功能:转发,将分组从一个输入链路接口转移到适当的输出链路接口。硬件实现
- 控制平面实现的功能:路由选择,确定分组从源到目的地所采取的端到端路径。软件实现
- 传输层和网络层提供的服务对比:
- Transport: 两个进程(process)之间
- Network: 两台主机(host)之间
现在的因特网网络层并没有提供服务质量保证,因特网只提供了尽力而为的服务
二、虚电路和数据报网络
类比于 TCP/UDP 的面向连接 / 无连接的传输层服务: 任何网络中的网络层只提供两种服务之一,不会同时提供。
- 虚电路网络 :提供连接服务。
- 数据报网络
虚电路不同于路由,其建立了固定的源至目的端的路径。
- 数据传输前,建立虚电路;传输完毕则拆除虚电路。
- 在源-目的路径上的每个路由器都需要维护相应的链路的状态信息形成转发表:输入链路 VC 号,输出链路 VC 号以完成转发,其中,不同链路的 VC 号可以不同。
一条 VC 的组成:
- 源-目的路径
- VC 号,路径上每段链路一个 VC 号。
- 沿着该链路的每台路由器的转发表项。
每个 VC 上的分组都有当前的 VC 号,在经过不同链路时需要更新为相应的 VC 号。
三、路由器结构
路由器的两个核心功能:
- 运行路由算法 协议 (OSPF, RIP, BGP)
- 将分组从路由器的输入链路传送到正确的输出链路。
输入端口功能
- 线路端接:将物理链路段接到路由器的物理层
- 数据链路处理:实现路由器的数据链路层功能
- 查找与转发:实现查找与转发,以便分组通过路由器交换结构转发到适当的输出端口
交换结构
- 经内存交换
- 分组被拷贝到系统内存
- 速度受内存带宽限制(每个分组需要两次经过总线)
- 传统计算机,交换在 CPU 直接控制下完成。
- 经总线交换
- 分组从输入端口缓存经过一根共享总线到达输出端口缓存
- 通过标签来控制进入哪个输出端口。
- 总线竞争: 交换速率受总线带宽限制
- 经互联网络交换
- 克服总线带宽限制,非阻塞。
输出端口
- 取出存放在输出端口内存的分组,传输到输出链路上
- 当交换结构交付给输出端口的速率超过输出链路速率,就需要排队和缓存管理功能
排队
输入端口排队: 当交换速度比所有输入端口的综合速度慢时
此时产生 HOL(线头阻塞),排在队列前面的分组阻止队列中其他的分组向前移动。
输出端口排队:当分组从交换结构到达的速率快于输出链路速率时丢失
需要缓存,排队造成延迟 ,缓存溢出会导致分组丢失
四、IP 协议
IP 头部固定长度 20 字节
TCP 头部固定长度 20 字节
数据包长度:首部+数据,理论 IP 数据报最大长度为 65535 字节。
分片 & 重组
一个链路层帧能承载的最大数据量叫做最大传输单元 (MTU),不同的链路类型有不同的 MTU, MTU 严格限制着 IP 数据报的长度。所以大的 IP 数据报在网络中被分片🐾,并只能在目的地进行重组。
- IP 首部的一些 bit 用于标识和保证分片的顺序。
offset
偏移量 = 数据域长度 / 8fragflag=0
标志比特改分片为原始数据报的最后一个片ID
标识号:初始数据报的标识号。来判断不同的段是否属于同一个分组
IPv4 编址
IP 地址中前 5 位用于标识 IP 地址的类别 A 类地址的第一位为 0 B 类地址的前两位为 10 C 类地址的前三位为 110 D 类地址的前四位为 1110 E 类地址的前五位为 11110 。 其中 A 类 、 B 类与 C 类地址为基本的 IP 地址 。
- IP 地址: 高位为网络部分,低位为主机部分。
- 准确来说,IP 地址与接口(主机和物理链路间的边界)关联,一个主机上有多个接口,因此一个主机可以有多个 IP 地址。
- 子网:设备接口的 IP 地址具有相同的网络部分,没有路由器的接入,物理上能够相互抵达。
- 具体定义:为了确定子网,分开主机和路由器的每个接口,从而产生了几个分离的网络岛🏝️,这些独立网络中的每一个叫做一个子网
A类(网络号8位):1. 0. 0. 1 127.255.255.254
B类(网络号16位):128.0.0.1 191.255.255.254
C类(网络号24位):192.0.0.1 223.255.255.254
特殊 IP 地址段
本地回环地址
127.0.0.1-127.255.255.254 这是预留的一组 IP 地址,主要是用来识别主机本身的地址。也叫做 "localhost",一般用来测试。
私有地址 Private address
10.x.x.x, 172.16.x.x-172.31.x.x, 192.168.x.x 这三个地址段被称为私有 IP 地址段 也就是局域网所使用的地址段,在公网上不能被路由
0.0.0.0
这个地址严格上来说都不是真正意义上的 IP 地址。主要是用来标识不清楚的网络和主机的。系统遇到无法识别的网络或主机的时候会统一的归纳到这个地址
255.255.255.255
这个地址是受限的广播地址。主要指一个网段内的所有主机
子网掩码
功能:给定 IP 地址和子网掩码,获得该 IP 地址主机所在的网络地址(或网络号)
步骤:IP 地址与子网掩码按位进行 AND 运算
IP 寻址 - CIDR (无类别域际路由选择)
- CIDR 是一种 IP 地址分配方法
- 地址中的网络部分可以任意长
- 地址格式:
a.b.c.d/x
, 这里 x 是地址网络部分的 bit 数
层次编址与路由聚合
- 路由聚合:使用单个网络前缀通告多个网络。
- 路由聚合后不包含的网络可以采用:添加更加具体的路由,利用最长前缀匹配实现路由跳转
网络地址转换 - NAT🎗️
作用: 实现私有 IP 与公有 IP 之间的转换。
优点:
一个公有 IP 地址用于私有网络中所有设备。
在本地网络改变设备 IP 地址不用通知外部世界。
变更 ISP 而不用改变本地网络设备的地址。
本地网络设备不能被外部世界寻址(安全)。
16-bit 端口号:
- 一个局域网地址可以同时支持 60,000 个并发连接!
NAT 存在争议
- 路由器只应该处理到第三层
- 违反了端到端主张,应用程序设计者在设计时不得不将 NAT 加以考虑,如 P2P 应用程序
- 应使用 IPv6 来解决地址短缺问题💊
IPv6
初始目的: 32-bit 地址空间即将耗尽。
数据报格式:
- 首部固定长度 40 字节,无变动。
- 不允许分片
- 地址空间 128 位。
第五章 网络层(控制平面)
一、路由算法
路由算法确定了通过网络的端到端路径 转发表确定了在路由器上的本地转发
路由的基本概念
默认路由器:与主机直接相连的路由器,又叫第一跳路由器。每当主机发送一个分组时,都先传送给它的默认路由器。
源路由器:源主机的默认路由器。
目的路由器:目的主机的默认路由器。
从源主机到目的主机的选路归结为从源路由器到目的路由器的选路。
路由算法:是确定一个分组从源路由器到目的路由器所经路径的算法
路由算法的关键:在给定的一组路由器以及连接路由器的链路中,找到一条从源路由器到目的路由器的最低费用的路径。
最低费用路径: 该路径上 链路费用之和最小 。若所有链路的费用相同,则最低费用路径就是最短路径,即 在源和目的地之间经过链路最少的路径 。
路由算法分类
全局的还是分散的?
- 全局
- 所有路由器都有完整的网络拓扑结构、链路开销信息
- “链路状态”(LS)算法
- 分散
- 路由器知道物理相连的邻居和到邻居的开销
- 邻居间反复进行计算处理,交换信息
- “距离矢量”(DV)算法
静态的还是动态的?
- 静态
路由变化很慢,通常由人工进行设置
- 动态
路由变化很快:
A. 周期性更新
B. 直接响应链路开销变化
链路状态算法
即 Dijkstra 算法,基本思想如下:
- 初始化:将源节点到其它各节点的距离设为无穷大,源节点到自身的距离为 0,所有节点的前驱节点设为无穷大或 NULL。
- 选择源节点:从源节点开始,先将源节点加入已确定最短路径的节点集合 S 中。
- 更新距离:遍历源节点的邻居节点,计算它们到源节点的距离,如果这个距离比已经记录的距离更短,则更新邻居节点的距离。同时更新邻居节点的前驱节点为源节点。
- 选择最短路径:从未确定最短路径的节点中,选择距离源节点最近的一个节点👋,并将其加入已确定最短路径的节点集合 S 中。
- 重复步骤 3 和 4,直到所有节点都被加入到已确定最短路径的节点集合 S 中为止,此时得到了源节点到其他所有节点的最短路径。
问题:
- 时间复杂度
- 存在拥塞敏感的路由选择振荡
构建最低费用路径树
根据 目的节点找出顺序 和其 费用 以及 前驱节点 ,可以画出源节点 u 到所有目的节点的 最低费用路径树。 根据得到的所有目的节点的完整路径,或最低费用路径树,可以生成源节点的转发表。
转发表:
存放从源节点到每个目的节点的最低费用 路径上的下一跳节点。 即指出对于发往某个目的节点的分组,从该节点发出后的下一个节点。
距离向量算法
距离向量路由算法是一种迭代的、异步的和分布式的算法。
分布式: 每个节点都 从其直接相连邻居接收信息 ,进行计算,再将 计算结果分发给邻居。
迭代: 计算过程一直持续到 邻居之间无更多信息交换为止。
异步: 不要求所有节点相互之间步伐一致地操作。
自我终结: 算法能自行停止。
Bellman-Ford 算法,
- 主要思想:
- 每个节点周期性⏳的给相邻节点发送自己的距离向量估值
- 当节点 x 从它的任何一个邻居 v 收到一个新的距离向量估值,就使用 B-F 方程更新自己的距离向量估值
- 在简单正常的情况下, 距离向量估值 Dx(y) 收敛到实际的最小路径开销 dx(y)
- B-F 方程📝:
- 节点
x
有多个邻居v
,计算x
到y
的最短距离,即从所有邻居中选择一个v
,使得x
到v
的距离加上v
到y
的距离最小。 c(x,v)是 x 到 v 的距离,是 v 到 y 的距离。
开销变化
- 好消息传得快✈️:开销减小的好消息能迅速传播到整个网络。
- 坏消息传得慢🚘:开销增大的坏消息会出现“计数到无穷”的问题。
- 解决方法:毒性逆转
- 假如 Z 通过 Y 到达 X ,Z 告诉 Y 它到 X 的距离是无穷大,Y 将不会再经过 Z 到 X
- 不能解决三个或三个以上节点的环路无法通过该方法解决
报文复杂性 | 收敛速度 | 健壮性 | |
---|---|---|---|
LS(链路状态) | 具有 n 个节点,E 个链路情况,每次发送O(nE) 个报文 |
O(n^2) ,可能会导致振荡 |
每个节点只计算自己的转发表(一定的健壮性) |
DV(距离向量) | 只在邻居之间交换报文 | 收敛时间是变化的,可能导致计数到无限的问题 | 每个节点的转发表可被其他节点使用 ,错误会扩散到整个网络 |
二、因特网中的路由协议
一个区域内的路由器组成集合“自治系统 (AS) ”
和其他自治系统直接相连的路由器称为网关路由器
不同自治系统内的路由协议可以不同
同一个自治系统的路由器运行相同的路由协议
区域内路由协议:同一自治系统的路由器运行相同的~协议。
区域间路由协议:由网关路由器运行(也运行域内协议),与其他网关路由器交互。
域内路由协议 - IGP
也被称为内部网关协议, 主要类别: RIP , OSPF , IGRP
路由信息协议 - RIP
本质上就是采用距离向量算法
周期性通过 UDP 报文发送 RIP 通告,端口号为 520
距离衡量: 跳数 (max = 15 hops)
RIP 通告
距离向量: 每隔 30 秒,通过响应报文在邻居间进行交换(也被称为 RIP 通告, advertisement)
每个通告: 包含了多达 25 个 AS 内的目的子网的列表
开放最短路径优先 - OSPF
本质上就是采用链路状态(Dijkstra)算法,并使用了洪泛链路状态信息。
OSPF 的链路开销由网络管理员配置,每当一条链路状态发生变化,路由器广播链路状态信息。
OSPF 信息直接通过 IP 传输 (不是 TCP 或 UDP),因此必须自己实现可靠报文传输、链路状态广播等功能。
- 两级层次: 本地区域, 主干区域。(这些区域都是在一个自治系统内)
- 只在区域内发送链路状态通告
- 每个节点有详细的区域拓扑; 仅知道到达其他区域内网络的方向(即最短路径)
- 区域边界路由器(同时属于本地区域和主干区域):“汇总”了到本区域内部网络的路径, 并通告给其他区域边界路由器。
- 主干路由器:限于在主干区域内运行 OSPF 路由协议。(本身不是区域边界路由器)
- 边界路由器: 连接到其他自治系统。
域间路由协议 - BGP
前面的域内路由协议决定在每个 AS(自治系统)内 IP 数据包怎么走,而 BGP 就是用来决定 AS 之间 IP 数据包怎么走。
- BGP 为 AS 提供:
- 从邻居 AS 获得前缀的可达信息
- 确定到"前缀"(CIDR)最好的路由。
BGP 基础:
- 路由器之间(BGP 对等方)通过半永久 TCP 连接来交换选路信息:BGP 会话
- BGP 会话和物理链路无关(并不总是和某条物理链路对应)
通告路由信息
- 网关路由器之间通过 eBGP 会话传递
- 域内路由器之间通过 iBGP 会话传递
路由选择
BGP 中,前缀+属性=路由。
在真实的网络中,从一个给定的路由器到一个目的子网可能有多条路径,这就需要我们从中选出最好的路由。
两个重要的 BGP 属性:
AS-PATH
: 包含通告已经通过的 AS 的列表,例如 AS1 通过 AS2 到达 AS3 中的子网 x,其AS-PATH
为AS2 AS3
NEXT-HOP
:是AS-PATH
起始路由器接口的 IP 地址。
AS-PATH
可以防止🔮环路。如当某台路由器发现 AS-PATH
中包含自身所在的 AS 时,则会拒绝该 BGP 通告。
区分域内和域外的原因
- 规模:层次路由节省了转发表的大小空间,减少了路由更新的流量。
- 策略:
- AS 间:管理员想控制本 AS 内产生的通信流怎样选路,以及什么通信流穿过自己的网络
- AS 内:单个管理者,因此不需要策略
- 性能:
- AS 间:策略或许比性能更重要
- AS 内:性能比较重要
三、SDN
软件定义网络 SDN SoftwareDefinedNetwork )源自美国斯坦福大学 CLeanState 研究组提出的一种新型网络创新架构,可通过软件编程的形式定义和控制网络,具有控制平面和转发平面分离及开放性可编程的特点。
SDN 的核心理念是,希望应用软件可以参与对网络的控制管理,满足上层业务需求,通过自动化业务部署,简化网络运维。
SDN 并不是一个具体的技术,它是一种网络设计理念,规划了网络的各个组成部分(软件、硬件、转发面和控制面)及相互之间的互动关系。
第六章 链路层
一、链路层概述
数据链路层的职责是将数据报从一个节点传送到与该节点直接有物理链路相连的另一个节点。
- 节点:主机和路由器(包括网桥和交换机)
- 链路:沿着通信路径连接相邻节点的通信信道。包括:有线链路,无线链路,局域网。
- 帧:链路层协议交换的数据单元。
提供的服务:
- 封装成帧:把网络层数据加头(源 MAC 和目的 MAC 等等)加尾,封装成帧。
- 链路访问:媒体访问控制协议(MAC)规定了帧在链路上传输的规则,包括点对点链路和广播链路。
- 邻接节点之间可靠传输:通常用于易于产生高差错率的链路,例如无线链路。
传输层已经有了可靠数据传输,为何链路层也要可靠传输?
链路层可靠传输目的是在链路上完成差错检测和纠正,而不是等数据传到端系统发现出错了,再进行数据重传等操作。
需要注意的是,链路层的可靠传输通过确认和重传等实现,这与以太网等提供的无比特差错传输还是有差别的。以太网受到差错帧直接丢包。
- 差错检测与纠错:差错由信号衰减和噪声引起。
- 流量控制 (PPT 写了但是我没听说过)
- 链路层在 “适配器” (网卡)中实现
- Ethernet 卡,PCMCIA 卡, 802.11 卡
- 许多功能由硬件实现,高层链路层功能(组装链路层寻址信息等)通过软件实现。
二、差错检测和纠错
差错检测和纠正技术不能保证接收方检测到所有的比特差错,即 可能出现未检测到的比特差错 ,而接收方并未发现。
选择一个合适的差错检测方案使未检测到的情况发生的概率很小即可。
差错检测和纠错技术越好,越复杂,开销更大。
奇偶校验
最基本的方法。
一比特奇偶校验
发送方:
在要发送的信息 D d 位)后面 附加一个奇偶校验位使“ 1” 的个数是 奇数(奇校验) 或 偶数(偶校验)
一起传输发送( d+1 位)。
接收方:
检测收到的信息( d+1 位)中“ 1” 的个数。
偶校验: 发现奇数个“1”,至少有一个比特发生差错(奇数个比特差错)。
奇校验: 发现偶数个“1”,至少有一个比特发生差错 。
可以查出任意奇数个错误,但不能发现偶数个错误。
若比特差错概率很小,差错独立发生,一比特奇偶校验可满足要求。
若差错集中一起“突发”(突发差错),一帧中未检测到的差错的概率达到 50% 。
二维奇偶校验
将要传信息 D d 比特)划分为 i 行 j 列( i 个组,每组 j 位) 对每行和每列分别计算奇偶值; 结果的 i+j+1 个奇偶比特构成了帧的差错检测比特。
可以检测并纠正单个比特差错 (数据或校验位中)。 能够检测但不能纠正分组中任意两个比特的差错
Internet 校验和
常用于运输层。
同 UDP 校验和
循环冗余检测
常用于链路层。
- 每个 CRC 标准能够检测少于 r+1 位的猝发错误和任意的奇数个比特错误
- 校验和通常应用于网络层及其之上的层次,要求简单快速的软件实现方式,而 CRC 通常应用于链路层,可以适配器硬件实现复杂的算法🎨。
- 当不通过 CRC 检测时(余数非零),链路层丢弃该帧(以太网)。
计算 CRC 比特流程:
假设除数 G 有 r+1 位,则在原始数据 D 之后补充 r 个 0,随后利用模 2 除法计算得到余数,余数就是所求 CRC 比特。
三、多路访问链路和协议
两种网络链路:
- 点对点链路:链路两端各一个节点。一个发送和一个接收。如点对点协议 PPP 。
- 广播链路: 多个节点连接到一个共享的广播信道。
广播:
任何一个节点传输一帧时,信号在信道上广播,其他节点都可以收到一个拷贝。常用于局域网 LAN 中,如早期的以太网和无线局域网。
信道划分
A. 时分 TDMA(time division multiple access)
每个节点轮流访问信道,只能在自己分配的时隙中使用信道,未被使用的时隙空闲
B. 频分 FDMA (frequency division multiple)
信道被分成不同频段,每个节点分配一个固定的频段,未被使用的频段空闲
C. 码分 CDMA
为节点分配一种不同的编码,使其能够同时传输且被正确接收。通常用于无线信道之中。
时分频分优缺点:
- 消除碰撞且公平
- 一个节点只能使用 R/N 的带宽,尽管是唯一一个有数据要发送的节点
随机接入
在随机接入协议中,一个传输节点总是以信道的全部速率(即 R bps)进行发送。当有碰撞时,涉及碰撞的每个节点反复地重发它的帧(也就是分组),到该帧无碰撞地通过为止。但是当一个节点经历一次碰撞时,它不必立刻重发该帧。相反,它在重发该帧之前等待一个随机时延。
效率 :当有很多节点,每个节点有很多帧要发送时,成功时隙所占的百分比
A. 纯 Aloha
不按时隙划分,随机发送📢。
冲突后立即以概率 p 重发。
最高效率:
B. 时隙 Aloha
时间划分为相同大小的时隙,一个时隙等于传送一个帧的时间。节点只能在一个时隙的开始才能传送。
冲突后,在下一个时隙以概率 p 重发。
最高效率:
C. CSMA
- 载波侦听:
- 传送前侦听信道,如果信道空闲,传送整个帧;
- 如果信道忙,延迟传送。
- 存在问题:
- 由于传播延迟,可能导致两个节点没监听到其他节点的传送导致发生冲突,浪费带宽。
- 距离和传播延迟决定冲突概率。
D. CSMA/CD
在载波侦听的基础上加入 CD (冲突检测),优点是放弃会发生冲突的传送,减少带宽浪费。
基本思想:
- 当一个节点要发送数据时,首先监听信道,看是否存在载波。
- 如果信道空闲,则发送数据,如果信道忙,则继续监听,一旦发现空闲立即发送。
- 发送过程中未检测到碰撞,则传输成功;否则停止正常发送,反而发送一短暂的干扰信号 jam,强化冲突,让其他节点都知道出现了冲突。
- 发送干扰信号后,指数退避一随机时间。假设该帧经过 n
次冲突后,适配器在
中随机选取一个值 K,其中 ,然后等待 K*512 (以太网)比特时间后,回到第 b 步。
轮转
高负载 | 低负载 | |
---|---|---|
分割信道 | 信道共享,公平高效 | 延迟访问,如果只有一个活跃节点,只分配了 1/N 的带宽 |
随机访问 | 冲突开销大 | 效率高,单个节点可以获得整个信道 |
轮转协议是两者的折中
A. 轮询
从节点中选择一个作为主节点,主节点轮流向其他节点发送报文,告诉它能够传输帧的最大数量,待其传输完成后,再向下一个节点发送报文,依此类推。
缺点:
- 轮询开销:主节点要发送额外的报文
- 延迟访问:一个节点必须等待自己回合才能发送
- 主节点失效,整个网络失效
B. 令牌传递
一种称为令牌的特殊帧在节点之间以固定次序进行交换,当一个节点收到令牌时,它才能发送数据,发送完毕后将令牌传递给下一个。
缺点:
- 令牌开销
- 延迟访问
四、交换局域网
局域网: Local Area Network ( LAN )
- 多址访问协议广泛应用于局域网
- 基于随机访问的 CSMA/CD 广泛应用于局域网
- 基于令牌传递技术的令牌环和 FDDI 在局域网技术中变得次要或被淘汰
- 链路层技术的发展,使得局域网、城域网、广域网的概念变得越来越模糊和不重要
MAC 地址
MAC 地址( LAN 地址、物理地址)
- 节点“网卡”本身所带的地址(唯一)。
- MAC 地址长度通常为 6 字节 (48 比特 ),共
个。 - 6 字节地址用 16 进制表示 ,每个字节表示为一对 16 进制数
- 网卡的 MAC 地址是 永久的 (生产时固化在其 ROM 里)
广播地址: FF-FF-FF-FF-FF-FF
MAC 地址具有扁平结构,而且无论到哪都不会变化。类比身份证号。
IP 地址具有层次结构(分为网络和主机部分),会随着主机移动而改变。类比住址
- DNS 域名系统: 将 主机名解析到 IP 地址 。
- DNS 为在因特网中任何地方的主机解析主机名。
- ARP 地址解析协议: 将 IP 地址解析到 MAC 地址 。
- ARP 只为在 同一个 LAN 上的节点解析 IP 地址。
ARP
ARP 工作原理(假设主机 A 向主机 B 发送):
- 查询发送方的 ARP 表中是否存在目标 IP 的记录。如果存在则顺利完成解析。
- 如果 B 的 MAC 地址不在 A 的 ARP 表中,则 A 广播(即目标 MAC 地址为 FF-FF-FF-FF-FF-FF)包含 B 的 IP 地址的 ARP 查询包。在局域网上所有的机器都能收到 A 发送的 ARP 查询包。
- 主机 B 收到 ARP 查询包,发现是其中包含自己的 IP 地址,则单独发送一个带有自己 MAC 地址的包给 A。
- A 收到后在自己的 ARP 表中缓存 IP-to-MAC 直到信息过期。
发送数据报到子网外
- 主机 A 构建 IP 数据报,源地址是 A 的 IP 地址,目的地址是 B 的 IP 地址
- 主机 A 构建链路层数据帧,目的 MAC 地址是路由器左边端口的 MAC 地址
- 数据帧从主机 A 发送到路由器 R
- 路由器 R 收到数据帧,抽取出数据报递交到 IP 层
- 路由器 R 转发数据报,源地址为 A 的 IP 地址,目的地址为 B 的 IP 地址
- 路由器 R 将该数据报封装成链路层帧,目的 MAC 地址为主机 B 的 MAC 地址
以太网
以太网的最大传输单元 MTU 是 1500 字节:
若 IP 数据报超过 1500 字节,必须将该数据报分段。
最小长度是 46 字节:
如果 IP 数据报小于 46 字节, 必须填充为 46 字节。 接收方网络层去除填充内容。
- Preamble: 前同步码,8 个字节
- 前 7 个字节为 10101010,最后一个为 10101011
- 用于发送方和接收方的时钟同步
- Addresses: MAC 地址,6 个字节
- 如果适配器收到的帧的目的地址与之匹配或者是一个广播地址(ARP 包),就把帧传给网络层
- 否则,抛弃该帧
- Type: 类型,2 个字节,
- 指明可以支持的高层协议,主要是 IP 协议,也可以是其他协议如:Novell IPX 和 AppleTalk
- Data:46~1500 字节
- CRC:循环冗余校验(帧校验序列),4 个字节。
- 接收方检测,如果有错,丢弃该帧
交换机
本处的交换机均指链路层交换机(与具有部分路由器功能的三层交换机区分)
- 链路层设备:
- 存储和转发以太网帧
- 检查帧头,并根据目的 MAC 地址有选择地转发帧
- 当 MAC 帧被转发到某一共享网段时,需要使用 CSMA/CD 访问该网段。
- 透明性
- 主机不关心交换机的存在
- 即插即用,自学习
- 交换机不需要被配置
自学习
交换机会学习通过哪些端口可以到达哪些主机
- 当收到数据帧时,交换机“学习”发送主机的位置:进入的局域网网段 到达端口
- 在转发表中记录发送主机/位置对
MAC addr | Interface | TTL |
---|---|---|
A | 1 | 60 |
过滤/转发
1 | if 目的MAC地址 in 交换表: |
两种交换方式
- 存储转发:具有差错检测功能,转发时延较大,适用于出错率高的链路。
- 快速分组又称直通交换:不具有差错检测功能,转发时延较小,适用于时延要求高,出错率低的链路。
VLAN
- 交换机将一个子网划分成若干个 LAN 网段
- 交换机过滤数据包:
- 同一 LAN 网段的数据帧传输不被转发到其它 LAN 网段
- 每个 LAN 网段变成一个独立的冲突域
交换机和路由器比较
- 都是存储转发设备
- 路由器:网络层设备,转发分组
- 交换机:数据链路层设备,转发帧
- 路由器实现路由算法建立路由表,并转发分组。网络层(IP)提供 TTL 等防止环路的措施。
- 交换机实现自学习包含交换表、转发/过滤,但不提供对广播风暴(错误配置导致环路,广播帧不断增多)的保护。