计算机自顶向下方法 Notes
第一章 计算机网络和因特网
1.1 什么是因特网
1.1.1 具体构成描述
所有连接因特网的设备都称为主机 (host) 或端系统 (end system).
端系统通过通信链路 (communication link) 和分组交换机 (packet switch) 连接到一起。
1.1.2 服务描述
分布式应用程序 (distributed application), 其应用程序涉及多个相互交换数据的端系统。(这里的多个端系统如多人游戏, 在线社交)
因特网有发送数据的程序必须遵循的套接字接口 (规定了一些规则, 如除了要发送的数据之外要提供的信息).
1.1.3 什么是协议
协议 (protocol) 定义了在两个或多个通信实体之间交换的报文的格式和顺序, 以及报文发送或接收一条报文或其他事件所采取的动作
1.2 网络边缘
通常把与因特网相连的计算机和其他设备称为端系统 (end system, 因为他们处于互联网的边缘).
主机和端系统概念相同.
1.2.1 接入网
指将端系统物理连接到其边缘路由器 (edge router) 的网络.
DSL (Digital Subscriber Line, 数字用户线), 由于上行传输速率和下行传输速率是不同的, 因此也被称为是不对称的.
上行似乎为发送数据, 下行似乎为下载或接收数据.
电缆因特网接入 (cable Internet access), 其一个重要特征就是共享广播媒体.
光纤到户 (Fiber To The Home, FTTH) 为从本地中心局直接到家庭提供一条光纤路径.
每个家庭具有一个光纤网络端接器 (Optical Network Terminator, ONT), 它由专门的光纤连接到邻近的分配器 (splitter). 该分配器把一些家庭集结到一根共享的光纤, 该光纤再连接到本地电话和公司的中心局中的光纤路端接器 (Optical Line Terminator, OLT). OLT 提供了光信号和电信号之间的转换.
2. 企业 (和家庭) 接入: 以太网和 WIFI
1.2.2 物理媒体
物理媒介分成两种类型:
- 导引型媒体 (guided media), 电波沿着固体媒介前行
- 非导引型媒体 (unguided media), 电波在空气或外层空间中传播
物理链路的实际成本与其他网络成本相比通常是相当小的.
1. 双绞铜线
其由两根绝缘的铜线组成, 每根大约 1mm 粗, 一规则的螺旋状排列.
两根线绞合起来, 以减少邻近类似的双绞线的电气干扰
双绞线的数据传输速率取决于线的粗细以及传输方和接收方之间的距离.
2. 同轴电缆
同轴电缆由两个铜导体组成, 这两个导体是同心的而不是并行的.
同轴电缆能被用作导引型共享媒体 (shared medium).
许多端系统能够直接与该电缆相连, 每个端系统都能接收由其他端系统发送的内容.
3. 光纤
光纤是一种细而柔软的,能够导引光脉冲的媒体,每个脉冲表示一个比特。
光纤不受电磁干扰,光缆信号衰减极低,难以窃听.
光纤能用于长途引导型传输媒体,特别是跨海链路.
高成本的光设备,如发射器,接收器和交换机,阻碍光纤在端提传输中的应用.
4. 陆地无线电信道
无线电信道承载电磁频谱中的信号。
其不需要安装物理线路,
其极大依赖于传播环境和信号传输的距离.
5. 卫星无线电信道
一颗通信卫星连接地球上的两个或多个微博发射器/接收器,它们被称为地面站。该卫星在一个频段上接收传输,使用一个转发器再生信号,并在另一个频率上发射信号.
1.3 网络核心
1.3.1 分组交换
将长报文划分为较小的数据块.
1. 存储转发传输 (store-and-forward transmission)
一种转发机制. 指在交换机能够开始向输出链路传输该分组的第一个比特之前,必须接收到整个分组.
意思就是,一个分组的第一个比特到达交换机时不会被立即转发出去,而是等到这个分组的所有比特都到达时开始转发.
2. 排队时延和分组丢失
没太分组交换机有多条链路与之相连, 对于每条相连的链路,该分组交换机具有一个输出缓存 (output buffer, 也称输出队列 output queue),用于存储路由器准备发往那条链路的分组.
分组到达时,链路正忙于传输其他分组,该到达分组就必须在缓存中等待. 此时有排队时延 (queuing delay).
分组到达时,缓存空间被占满,将出现分组丢包 (packet loss).
3. 转发表和路由选择协议
因特网具有一些特殊的路由选择协议 (routing protocol), 用于自动地设置这些转发表. 如选择最短的路径.
1.3.2 电路交换
通过网络链路和交换机移动数据有两种基本方法:
- 电路交换 (circuit switching)
- 分组交换 (packet switching)
电路交换在发送方能够发送信息之前,该网络必须在发送放和接收方之间建立一条连接. 其需要预留端系统间沿路径通信所需要的资源.
当网络创建这种电路时,它也在连接期间在该网络链路上预留了恒定的传输速率.
也就是说要先分配资源,再开始传输.
1. 电路交换网络中的复用
链路中的电路是通过频分复用 (Frequency-Division Multiplexing, FDM) 或时分复用 (Time-Division Multiplexing, TDM) 来实现.
FDM, 链路为每条连接设专用的一个频段.
TDM, 时间被划分为固定期间的帧,并且每个帧又被划分为固定数量的时隙。也就是说一条链路中的数据不是连续的单个电路的数据,而是混合的,每一个电路占一部分. 两个时隙表明有两条电路,10 个时隙表明有十条电路.
2. 分组交换与电路交换的对比
1.3.3 网络的网络
1.4 分组交换网中的时延,丢包和吞吐量
吞吐量指每秒能够传送的数据量.
1.4.1 分组交换网中的时延概述
最为重要的时延如节点处理时延 (nodal processing delay), 排队时延 (queuing delay), 传输时延 (transmission delay) 和传播时延 (propagation delay),这些时延总体累加起来是节点总时延 (total nodal delay).
时延类型
传输时延和传播时延的比较
传输时延 (transmission delay) 指将分组送上链路所用的时间.
传播时延 (propagation delay) 指将分组从源路由器发送到目标的时间.
1.4.2 排队时延和丢包
排队时延对不同的分组可能是不同的.
若 a
表示分组到达队列的瓶蕨速率,(a 的单位是分组/秒,即 pkt/s).
R
是传输速率,即从队列中推出比特的速率 (以 bps,即 b/s 为单位).
同时假定所有分组都是由 L 比特组成. 则比特到达队列的平均速率是 La bps.
比率 La/R
被称为 流量强度 (traddic intensity)
设计系统时流量强度不能大于 1.
通常,到达队列的过程是随机的.
丢包
1.4.3 端到端时延
1.4.4 计算机网络中的吞吐量
1.5 协议层次及其服务模型
1. 协议分层
一个协议层能够用软件,硬件或两者的结合来实现.
网络层经常是硬件和软件实现的混合体.
分层提供了一种结构化方式来讨论系统组件.
模块化使更新系统组件更为容易.
分层的一个潜在缺点是一层可能冗余较低层的功能.
各层的所有协议被称为协议栈 (protocol stack), 因特网的协议栈由 5 个层次组成:
- 物理层
- 链路层
- 网络层
- 运输层
- 应用层
(1) 应用层
位于应用层的信息分组称为报文 (message).
(2) 传输层
因特网的运输层在应用程序端点之间传送应用层报文.
运输层的分组称为报文段 (segment).
(3) 网络层
因特网的网络层负责将称为数据报 (datagram) 的网络层分组从一台主机移动到另一台主机.
(4) 链路层
链路层的分组称为帧 (frame).
其将整个帧从一个网络元素移动到邻近的网络元素。
(5) 物理层
将帧中的一个个比特从一个节点移动到下一个节点.
2. OSI 模型
表示层的作用是使通信的应用程序能够解释交换数据的含义.
会话层提供了数据交换的定界和同步功能.
1.5.2 封装
链路交换机实现了第一层和第二层.
路由器实现了第一层到第三层.
应用层报文和运输层首部信息一道构成了运输层报文段 (transport-layer segment).
在每一层,一个分组具有两种类型的字段: 首部字段和有效载荷字段 (payload field). 有效载荷通常是来自上一层的分组.
1.6 面对攻击的网络
多数恶意软件 (malware) 是自我复制的.
病毒 (virus) 是一种需要某种形式的用户交互来感染用户设备的恶意软件.
蠕虫 (worm) 是一种无须任何明显用户交互就能进入设备的恶意软件.
拒绝服务攻击 (Denial-of-Service, DoS, attack). 其使得网络,主机或其他基础设施部分不能由合法用户使用.
大多数 DoS 属于:
- 弱点攻击
- 带宽攻击
- 连接洪泛
DDoS (Distributed DoS, 分布式 DoS)
嗅探分组
记录每个流经的分组副本的被动接收机被称为分组嗅探器 (packet sniffer).
伪装
将具有虚假源地址的分组注入因特网的能力被称为 IP 哄骗 (IP spoofing).
第二章 应用层
2.1 应用层协议原理
两种主流体系结构之一: 客户-服务器体系结构 或对等 (P2P) 体系结构.
客户-服务器体系结构 (client-server architecture), 有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求. 客户之间不直接通信.
P2P 体系结构 (P2P architecture), 对位于数据中心的专用服务器有最小的依赖. 应用程序在主机间直接通信,这些主机称为对等方.
有些应用具有混合的体系结构.
2.1.2 进程通信
在两个不同端系统上的进程,通过跨越计算机网络交换报文 (message) 而相互通信.
1. 客户和服务器进程
对每对通信进程, 我们通常将这两个进程之一标识为客户 (client), 而另一个进程标识为服务器 (server).
在 P2P 文件共享的某些应用中,一个进程即是客户又是服务器.
我们定义客户和服务器进程如下:
在一对进程之间的通信会话场景中, 发起通信的进程被标识为客户,在会话开始时等待联系的进程是服务器.
2. 进程与计算机网络之间的接口
进程通过一个称为套接字 (socket) 的软件接口向网络发送报文和从网络接收报文.
套接字是应用层与传输层之间的接口.
由于该套接字是建立网络应用程序的可编程接口, 因此套接字也称为应用程序和网络之间的应用程序接口 (Application Programming Interface, API).
应用程序开发者可以控制套接字在应用层端的一切,但是对该套接字的运输层端几乎没有控制权.
3. 进程寻址
需定义两种信息:
- 主机的地址, 由 IP 地址标识
- 在目的主机中指定接收进程的标识符, 由目的端口号标识
所有因特网标准协议的周知端口号的列表能够在 这个网址 找到.
2.1.3 可供应用程序使用的运输服务
1. 可靠数据传输 (reliable data transfer)
2. 吞吐量
具有吞吐量要求的应用程序被称为带宽敏感的应用 (bandwidth-sensitive application), 其具有特定的吞吐量要求.
弹性应用 (elastic application), 能够根据当时可用的宽带或多或少地利用可供使用的吞吐量.
3. 定时
4. 安全性
2.1.4 因特网提供的运输服务
提供了 TCP 和 UDP.
TCP
面向连接服务和可靠数据传输服务.
TCP 连接是全双工的.
具有拥塞控制机制.
无论是 TCP 还是 UDP 都没有提供任何加密机制
SSL (Secure Sockets Layer) 是 TCP 的加强版本, 但这种加强是在应用层上.
SSL 加密数据并将加密的数据传递给 TCP 套接字.
2. UDP 服务
一种不提供不必要服务的轻量级运输协议.
无连接,不可靠的数据传输服务.
UDP 没有包括拥塞控制机制,UDP 的发送端可以用它选定的任何速率向其下层 (网络层) 注入数据.
3. 因特网运输协议所不提供的服务
TCP 和 UDP 并未提供对吞吐量和定时保证的服务.
许多防火墙被配制成阻挡 (大多数类型的) UDP 流量,所以因特网电话应用通常设计成如果 UDP 通信失败就使用 TCP 作为备份.
2.1.5 应用层协议
应用层协议 (application-layer protocol) 定义了运行在不同端系统上的应用程序进程如何相互传递报文.
应用层协议定义了:
- 交换的报文类型
- 各种报文类型的语法
- 字段的语义
- 确定一个进程何时以及如何发送报文
区分网络应用和应用层协议.
2.2 Web 和 HTTP
2.2.1 HTTP 概况
HTTP 由两个程序实现:
- 客户程序
- 服务器程序
多数 Web 页面包含一个 HTML 基本文件 (base HTML file) 以及几个引用对象.
HTML 基本文件通过对象的 URL 地址引用页面中的其他对象.
HTTP 定义了 Web 客户向 Web 服务器请求 Web 页面的方式, 以及服务器向客户传送 Web 页面的方式.
客户向它的套接字接口发送 HTTP 请求报文并从它的套接字接口接收 HTTP 响应报文.
服务器向客户发送被请求的文件,而不存储任何关于改客户的状态信息.
HTTP 是一个无状态协议 (stateless protocol).
2.2.2 非持续连接和持续连接 (non-persistent connection and persistent connection)
HTTP 既能够使用非持续连接,也能够使用持续连接。
HTTP 默认使用持续连接.
浏览器实现了 Web 客户端.
Web 服务器存储文件.
TCP 为 HTTP 提供可靠的传输服务.
HTTP 服务器并不保存关于客户的任何信息, 所以说 HTTP 是一个无状态协议 (stateless protocal).
非持续性连接 (non-persistent connection) 是指每个请求/响应对是经一个单独的 TCP 连接发送的.
持续连接 (persistent connection) 是指所有请求/响应对是经相同的 TCP 连接发送的.
HTTP 在其默认的方式下使用持续连接.
HTTP 的默认端口是 80.
两个不同的浏览器也许会以不同的方式解释同一个页面.
HTTP 与客户程序如何解释一个 Web 页面毫无关系.
HTTP 规范仅定义了在 HTTP 客户程序与 HTTP 服务器进程之间的通信协议.
1. 非持续性连接
缺点, 负担大.
每个 TCP 连接只传输一个请求报文和一个响应报文.
使用并行连接可以缩短响应时间.
往返时间 (Round-Trip Time, RTT) 指一个短分组从客户到服务器然后再返回客户所花费的时间.
三次握手大概:
- Client: 我发给你了
- Server: 我返回了
- Client: 我收到了
2. 持续性连接
一般来说, 如果一条连接经过一定时间间隔仍未被使用, HTTP 服务器就关闭该连接.
2.2.3 HTTP 报文格式
1. HTTP 请求报文
如:
通用格式:
使用 GET 方法时实体体为空,而使用 POST 方法是才使用.
2. HTTP 响应报文
如:
通用格式:
常见的状态吗和相关的短语:
2.2.4 用户与服务器的交互: cookie
HTTP 是无状态的但是 cookie 允许站点对用于进行追踪.
cookie 技术有 4 个组件:
- HTTP 响应报文中的一个 cookie 首部行
- 在 HTTP 请求报文中的一个 cookie 首部行
- 在客户端系统中保存有一个 cookie 文件,并有用户的浏览器进行管理
- 位于 Web 站点的一个后端数据库
具体流程:
cookie 可以用于标识一个用户。用户首次访问一个站点时,可能需要提供一个用户标识.
2.2.5 Web 缓存
Web 缓存器 (Web cache) 也叫代理服务器 (proxy server)
Web 缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象副本.
Web 缓存器既是服务器又是客户.
其中一个步骤: 如果 Web 缓存器中没有该对象,它就打开一个与该对象的初始服务器的 TCP 连接,Web 缓存器到服务器的 TCP 连接上发送一个与该对象的 HTTP 请求,在受到请求后,初始服务器向该 Web 服务器发送具有该对象的 HTTP 响应.
请求从 Web 缓存器上响应,可以降低流向代理服务器的请求,减小流量强度.
2.2.6 条件 GET 方法
包含 if-Modified-Since:
首部行.
由缓存器发出.
其告诉服务器,仅当自指定日期之后该对象被修改过,才发送该对象.
SMTP
位于 TCP/IP 参考模型的应用层.
2.3 因特网中的电子邮件
因特网电子邮件系统有三个主要组成部分:
- 用户代理 (user agent), 如 Outlook
- 邮件服务器 (mail server)
- 简单邮件传输 (Simple Mail Transfer Protocol, SMTP)
用户代理允许用户阅读, 回复, 转发, 保存和撰写报文.
邮箱位于邮件服务器中.
SMTP 用 TCP 传输.
SMTP 包含两部分:
- 运行在发送方邮件服务器的客户端
- 运行在接收方邮件服务器的服务端
2.3.1 SMTP
其限制所有邮件报文的体部分只能采用简单的 7 比特 ASCII 表示.
在使用 SMTP 传送邮件之前, 需要将二进制多媒体数据编码为 ASCII 码, 并且在使用 SMTP 传输后要求将相应的 ASCII 码邮件解码还原为多媒体数据.
使用 HTTP 传送前不需要将多媒体数据编码为 ASCII 码.
过程:
SMTP 一般不使用中间邮件服务器发送邮件.
如果 Bob 的邮件服务器没有开机, 该报文会保留在 Alice 的邮件服务器上并等待进行新的尝试.
SMTP 是持续连接的: 如果发送邮件服务器有几个报文发往同一个接受邮件服务器, 它可以通过同一个 TCP 连接发送这些所有的报文.
2.3.2 与 HTTP 的对比
HTTP 把每个对象封装到它自己的 HTTP 响应报文中, 而 SMTP 则把所有报文对象放在一个报文之中.
2.3.3 邮件报文格式
每个首部必须含有一个 From:
首部行和一个 To:
首部行. 可能包含一个 Subject:
首部行或其他可选行.
如:
2.3.4 邮件访问协议
SMTP 协议是一个推协议,不能用其得到报文.
使用第三版邮局协议 (Post Office Protocol – Version 3, POP3), 因特网邮件访问协议 (Internet Mail Access Protocol, IMAP), 以及 HTTP.
1. POP3
POP3 协议没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法.
2. IMAP
IMAP 服务器把每个报文与一个文件夹联系起来,当报文第一次到达服务器时,它与收件人的 INBOX 文件夹相关联。
IMAP 提供了在远程文件夹中查询邮件的命令.
3. 基于 Web 的电子邮件
用户代理为普通的浏览器. 使用 HTTP 协议.
2.4 DNS: 因特网的目录服务
2.4.1 DNS (Domain Name System) 提供的服务
识别主机有两种方式:
- 主机名 (便于人记忆)
- IP 地址 (便于路由器处理)
DNS 服务器通常是运行 BIND (Berkeley Internet Name Domain) 软件的 UNIX 机器.
DNS 协议运行在 UDP 之上, 使用 53 号端口.
DNS 协议是应用层协议, 通常由其他应用曾协议所使用, 包括 HTTP, SMTP 和 FTP, 将用户提供的主机名解析为 IP 地址.
DNS 协议也使用客户-服务器模式运行在通信的端系统之间.
除了进行主机名到 IP 地址的转换外, DNS 还提供了一些重要的服务:
- 主机别名 (host aliasing)
- 邮件服务器别名 (mail server aliasing)
- 负载分配 (load distribution)
2.4.2 DNS 工作机理概述
1. 分布式,层次数据库
大致有三种类型的 DNS 服务器:
- 根 DNS 服务器
- 顶级域 (Top-Level Domain, TLD) DNS 服务器
- 权威 DNS 服务器
如:
还有本地 DNS 服务器 (local DNS server). 每个 ISP 都有一台本地 DNS 服务器.
当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器, 它起着代理的作用,并将该请求转发到 DNS 服务器层次结构中:
如:
查询似乎是从后缀开始的,如 apricot.nyu.edu
先找到 .edu
然后是 nyu.edu
, 最后才查到 apricot.nyu.edu
2. DNS 缓存 (DNS caching)
本地 DNS 服务器存储从其他 DNS 服务器获取的映射关系.
由于主机名与 IP 地址间的映射并不是永久的,DNS 服务器在一段时间后 (通常设置为两天) 将丢弃缓存的信息.
2.4.3 DNS 记录和报文
资源记录 (Resource Record, RR).
RR 提供了主机名到 IP 地址的映射.
资源记录是包含了下列字段的 4 元组:
1 |
|
含义具体看书。
类型为 A 的资源记录提供了标准的主机名到 IP 地址的映射.
类型为 NS 的记录用于沿着查询链来路由 DNS 查询. 包含主机名的域.
CNAME 类型的记录表明是别名. MX 也是别名,但有一些使用上的区别: 为了获取邮件服务器的规范主机名,DNS 客户应当请求一条 MX 记录; 而为了获取其他服务的规范主机名,DNS 客户应当请求 CNAME 记录.
1. DNS 报文
DNS 有查询和回答报文,有相同的格式:
具体解析见书.
使用 nslookup
命令可以向任何 DNS 服务器发送 DNS 查询.
2. 在 DNS 数据库中插入记录
注册登记机构 (registrar) 是一个商业实体,它验证该域名的唯一性,将该域名输入 DNS 数据库,对提供的服务收取少量费用.
因特网名字和地址分配机构 (Internet Corporation for Assigned Names and Numbers, ICANN) 向各种注册登记机构授权.
2.5 P2P (Peer To Peer) 文件分发
到 2016 年止,最为流行的 P2P 文件分发协议是 BitTorrent.
1. P2P 体系结构的扩展性
2. BitTorrent
用 BitTorrent 的术语来讲, 参与一个特定文件分发的所有对等方的集合被称为一个洪流 (torrent).
在一个洪流中的对等方彼此下载等长度的文件块 (chunk).
每个洪流具有一个基础设施节点,称为追踪器 (tracker). 当一个对等方加入某洪流时,它向追踪器注册自己,并周期性地通知追踪器它仍在该洪流中.
与列表上所有对等方创建并行的 TCP 连接.
如:
在任何给定的时刻,Alice 将具有块的子集并知道它的邻居具有哪些块.
稀缺优先技术 (rarest first).
2.6 视频流和内容分发网
2.6.1 因特网视频
在流式存储视频应用中,基础的媒体是预先录制的视频.
视频是一系列图像,通常以一种恒定的速率来展示。
一副未压缩,数字编码的图像由像素阵列组成,其中每个像素是由一些比特编码来表示亮度和颜色.
2.6.2 HTTP 流和 DASH
在 HTTP 流中,视频只是存储在 HTTP 服务器中作为一个普通文件.
新型的基于 HTTP 的流,经 HTTP 的动态适应性流 (Dynamic Adaptive Streaming over HTTP, DASH). 在其中,视屏编码为几个不同的版本,其中每个版本具有不同的比特率.
使用 DASH 后,每个视频版本存储在 HTTP 服务器中,每个版本都有一个不同的 URL.
2.6.3 内容分发网
为了应对向分布于全世界的用户分发巨量视频数据的挑战,几乎所有主要的视频流公司都利用内容分发网 (Content Distribution Network, CDN).
CDN 管理分布在多个地理位置上的服务器。
1. CDN 操作
大多数 CDN 利用 DNS 来截获和重定向请求.
2. 集群选择策略
集群选择策略 (cluster selection strategy), 即动态地将客户定向到 CDN 中的某个服务器集群或数据中心.
为了基于当前流量条件为客户决定最好的集群,CDN 能够对其集群和客户之间的时延和丢包性能执行周期性的实时测量。
学习案例: Netflix, YouTube 和 “看看”
1. Netflix
Netflix 不需要用 DNS 重定向来将特殊的客户连接到一台 CDN 服务器,而是直接告知该客户使用一台特定的 CDN 服务器.
2. YouTube
2.7 套接字编程: 生成网络应用
有两类:
- 有标准协议中定义的操作的实现, 公开
- 单独的开发团队研发,未公开
在研发阶段,必须决定应用程序是运行在 TCP 上还是运行在 UDP 上.
应用程序需要注意避免使用周知的端口号.
2.7.1 UDP 套接字编程
当生成一个套接字时,就为它分配一个称为端口号 (port number) 的标识符.
将源地址附在分组之上通常并不是由 UDP 应用程序代码所为,而是由底层操作系统自动完成.
使用 encode()
方法将报文由字符串类型转换为字节类型.
第三章 运输层
3.1 概述和运输层服务
运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信 (logic communication) 功能。所谓逻辑通信,就是相距很远的主机就好像直接相连.
运输层协议是在端系统中而不是在路由器中实现的.
网络路由器仅作用于该数据报的网络层字段,即他们不检查封装在该数据报的运输层报文段的字段.
3.1.1 运输层和网络层的关系
网络层提供了 主机 之间的逻辑通信.
运输层提供了运行在不同主机上的 进程 之间的逻辑通信.
运输协议能够提供的服务长长受限于底层网络层协议的服务模型.
3.1.2 因特网运输层概述
应用程序开发人员在生成套接字时必须指定是选择 UDP 还是选择 TCP.
IP 协议并不做任何确保,被称为不靠谱服务 (unreliable service).
将主机交付扩展到进程间交付被称为 运输层的多路复用 (transport-layer multiplexing) 与 多路分解 (demultiplexing) .
TCP 拥塞控制放置任何一条 TCP 连接用过多流量来淹没通信主机之间的链路和交换设备.
UDP 流量是不可调节的.
3.2 多路复用和多路分解
一个进程,有一个或多个套接字 (socket), 它相当于从网络向进程传递数据和从进程向网络传递数据的门户.
套接字的标识符取决于它是 UDP 还是 TCP 套接字.
在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,所有这些工作称为 多路复用 (multiplexing). (多路应该是只来源为多个套接字) 相当于收集信件.
将运输层报文段中的数据交付到正确的套接字的工作称为 多路分解 (demultiplexing), 相当于分发信件.
端口号是一个 16 比特的数,其大小在 065535 之间,01023 范围的端口号称为 周知端口号, 其保留给周知应用层协议使用.
当开发一个新的应用程序时,必须为其分配一个端口号.
在主机上的每个套接字能够分配一个端口号,当报文段到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字,然后报文段中的数据通过套接字进入其所连接的进程.
1. 无连接的多路复用和多路分解
通常应用程序的客户端让运输层自动地分配端口号,而服务器端则分配一个特定的端口号.
UDP 套接字是由一个二元组全面标识的,该二元组包含
- 一个目的 IP 地址
- 一个目的端口号.
2. 面向连接的多路复用与多路分解
TCP 套接字是由一个四元组:
- 源 IP 地址
- 源端口号
- 目的 IP 地址
- 目的端口号
主机使用全部 4 个值来将报文段定向到相应的套接字.
端口扫描
如果我们确定一台主机上打开了一个端口,也许就能够将该端口映射到在该主机运行的一个特定的应用程序.
攻击者可以通过端口寻找具有已知安全缺陷的应用程序.
使用 nmap
这一程序来扫描端口.
nmap 返回打开的,关闭的或不可达的端口列表.
运行 nmap 的主机能够尝试扫描因特网中任何地方的目的主机.
3. Web 服务器与 TCP
3.3 无连接运输: UDP
UDP 只是做了运输协议能够做的最少工作.
使用 UDP 时, 在发送报文段之前, 发送方和接受方的运输层实体之间没有握手. (因此被称为无连接)
UDP 从应用程序得到数据, 附加上用于多路复用/分解服务的源和目的的端口号字段, 以及其他两个小字段, 然后将形成的报文段交给网络层.
DNS 是一个通常使用 UDP 的应用层协议的例子.
在有些情况下使用 UDP 而不是 TCP 的原因:
- 容忍一些数据丢失
- 无须建立连接, 减少时延
- 无连接状态, 不用维持一些状态信息
- 首部开销小
UDP 中缺乏拥塞控制会导致 UDP 发送方和接收方之间的高丢包率, 并挤跨 TCP 会话.
3.3.1 UDP 报文段结构
UDP 的首部只有 4 个字段,每个字段由两个字节组成.
3.3.2 UDP 检验和
UDP 检验和提供了差错检测功能. 即用于确定当 UDP 报文段从源到达目的地移动时,其中的比特是否发生了改变。
示例:
从这里看出为什么叫 “校验和”, “校验” 表示的是功能,”和” 是将四个字段的比特相加.
加法溢出后会有回卷,意思为往回加到第一位上.
再将和取反码.
若 4 个比特的和加上校验和,结果为 1111111111111111, 则没有差错,反之.
虽然 UDP 提供差错检测,但它对差错恢复无能为力. UDP 的某种实现只是丢弃受损的报文段,其他实现是将受损的报文段交给应用程序并给出警告.
3.4 可靠传输原理
- 不损坏, 丢失
- 正确顺序
3.4.1 构造可靠数据传输协议
1. 经完全可靠信道的可靠数据传输: rdt1.0
2. 经具有比特差错信道的可靠数据传输: rdt2.0
自动重传请求 (Automatic Repeat reQuest, ARQ) 协议,使用 肯定确认 (positive acknowledgment (“OK”) ACK 与 否定确认 (negative acknowledgment) (“请再重复一边”) NAK , ARQ 协议中还需要另外三种协议功能来处理存在比特差错的情况:
- 差错检测
- 接收方反馈
- 重传
在分组中添加序号 (sequence number) 可以让接收方知道这是新的分组还是一次重传.
3. 经具有比特差错的丢包信道的可靠数据传输: rdt3.0
理想的协议应尽可能快地从丢包中恢复过来,等待一个最坏情况的时延可能意味着要等待一段较长的时间, 直到启动差错恢复为止.
可以通过设置一个时间值来判断是否丢包, 如果在这个时间内没有受到 ACK, 则重传该分组.
分组序号在 0 和 1 之间交替,因此 rdt3.0 有时被称为 比特交换协议 (alternating-bit protocal)
可靠传输协议的一些要点:
- 校验和
- 序号
- 定时器
- 肯定确认
- 否定确认
3.4.2 流水线可靠数据传输协议
停等协议,就是在发送第二个分组之前需要受到第一个分组的确认. 这种效率较低.
以不停等的方式运行,允许发送方发送多个分组而无须等待确认.
- 增加序号范围, 每个分组有唯一序号
- 两端缓存分组,发送端缓存已发送但未确认的分组 (毕竟可能需要重发), 接收方缓存已经正确接收的分组 (收齐后好排正确的顺序)
解决流水线的差错恢复的两种基本方法:
- 回退 N 步
- 选择重传
3.4.3 回退 N 步
回退 N 步协议 (Go Back N protocol) 允许发送方发送多个分组而不需等待确认.
受限于未确认的分组数不能超过某个最大允许数 N.
那些已被发送但还未被确认的分组的许可序号范围可以被看成是一个在序号范围内长度为 N 的窗口.
N 常被称为 窗口长度 (window size), GBN 协议常被称为 滑动窗口协议 (sliding-window protocal).
流量控制是对发送方施加限制的原因之一.
一个分组的序号承载在分组首部的一个固定长度的字段中.
如果分组序号字段的比特数是 k, 则该序号范围是 $[0, 2^k - 1]$.
按序传输.
3.4.4 选择重传
选择重传,Selective Repeat protocol. 让发送方仅重传那些他怀疑在接收方出错的分组,而避免了不必要的重传.
SR 接收方将确认一个正确接收的分组而不管其是否按序。失序的分组将被缓存直到所有丢失分组皆被收到为止,这时才可以将一批分组按序交付给上层.
发送方和接收方的窗口间缺乏同步会产生严重的后果.
3.5 面向连接的运输: TCP (Transmission Control Protocol)
3.5.1 TCP 连接
在一个应用进程可以开始向另一个应用进程发送数据之前, 这两个进程必须先相互 “握手”.
TCP 协议只在端系统中运行, 而不在中间的网络元素 (路由器和链路层交换机) 中运行.
中间路由器对 TCP 连接完全视而不见, 它们看到的是数据报, 而不是连接.
TCP 连接也总是点对点 (point-to-point) 的, 即在单个发送方与单个接受方之间的连接.
第三次握手时发送了有效载荷, 即应用层报文.
TCP 会先将从应用层来的数据放入 发送缓存 (send buffer) 里.
从缓存中取出并放入报文段中的数据数量受限于最大报文段长度 (Maximum Segment Size, MSS).
MSS 通常根据最大传输单元 (Maximum Transmission Unit, MTU) 来设置.
当 TCP 在另一端接收到一个报文段后。该报文段的数据就被放入该 TCP 连接的接收缓存中. 应用程序从此缓存中读取数据流.
TCP 连接的组成包括: 一台主机上的缓存,变量和与进程连接的套接字, 以及另一台主机上的另一组缓存,变量和与进程连接的套接字.
3.5.2 TCP 报文结构
同样由首部字段和一个数据字段组成.
首部包括源端口号和目的端口号. 也包括检验和字段 (checksum field).
1. 序号和确认号
主机 A 发送一个报文段时, 一个报文段的序号是该报文段首字节的字节流编号.
主机 A 填充进报文段的确认号是主机 A 期望从主机 B 收到的下一字节的序号.
在一条 TCP 连接中收到失序报文段时,接收方保留失序的字节,并等待缺少的字节以填补该间隙.
2. Telnel: 序号和确认号的一个学习案例
Telnel 运行在 TCP 上,被设计成可在任意一对主机之间工作.
发起会话的一般是客户端.
3.5.3 往返时间的估计与超时
超时时间间隔长度的设置,必须大于该连接的往返时间。
1. 估计往返时间
TCP 不是为每一个报文段都会估计 RTT(Round Trip Time).
在任意时刻,TCP 仅为一个已发送的但目前尚未被确认的报文段估计 SampleRTT, 从而产生一个接近每个 RTT 的新 SampleRTT 值.
TCP 决不为已被重传的报文段计算 SampleRTT, 它仅为传输一次的报文段测量 SampleRTT.
计算公式见书.
2. 设置和管理重传超时间隔
3.5.4 可靠数据传输
TCP 的可靠数据传输服务确保一个进程从其接收缓存中读出的数据流是无损坏,无间隙,非冗余和按序的数据流.
在 TCP 发送方有 3 个与发送和重传有关的主要事件:
- TCP 从应用程序接收数据
- 定时器超时
- 收到 ACK
3.5.5 流量控制
TCP 为它的应用程序提供了流量控制服务 (flow-control service) 以消除发送方使接收方缓存溢出的可能性.
TCP 通过让发送方维护一个称为 接收窗口 (receive window) 的变量来提供流量控制.
接收窗口用于告诉发送方 – 该接收方还有多少可用的缓存空间.
3.5.6 TCP 连接管理
TCP 连接的建立会显著地增加人们感受到的时延.
第4章 网络层:数据平面
在网络中的每一台主机和路由器都有一个网络层部分.
网络层能够被分解为两个相互作用的部分:
- 数据平面, 网络层中每台路由器的功能, 到达路由器输入链路之一的数据报如何转发到该路由器的输出链路
- 控制平面, 路由器之间的路由方式
4.1 网络层概述
每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报, 控制平面的主要作用是协调这些本地的每路由器转发动作, 使得数据包沿着源和目的地主机之间的路由器路径最终进行端到端传送.
4.1.1 转发和路由选择: 数据平面和控制平面
两种重要的网络层功能:
- 转发 (forwarding)
- 路由选择 (routing), 计算这些路径的算法称为路由选择算法 (routing algorithm)
每台网络路由器中有一个关键元素是它的 转发表 (forwarding table):
1. 控制平面:传统的方法
路由选择算法决定了插入该路由转发表的内容.
2. 控制平面:SDN 方法
使用该方法,每台路由器都有一个与其他路由器的路由选择组件通信的路由选择组件。
SDN 是 Software-Defined Networking, 软件定义网络. 因为计算转发表并与路由器交互的控制器是用软件实现的.
4.1.2 网络服务模型 network service model
4.2 路由器工作原理
转发功能, 将分组从一台路由器的入链路传送到适当的出链路.
四个组件:
路由器的输入端口,输出端口和交换结构几乎总是用硬件实现.
4.2.1 输入端口处理和基于目的地转发
搜索转发表查找最常前缀匹配.
一旦通过查找确定了某分组的输出端口,则该分组就能够发送进入交换结构.
在某些设计中,如果来自其他输入端口的分组当前正在使用该交换结构,一个分组可能会在进入交换结构时被暂时阻塞。因此,一个被阻塞的分组必须要在输入端口处排队,并等待稍后被及时调度以通过交换结构
4.2.2 交换
交换结构使得分组能够实际地从一个输入端交换 (即转发) 到一个输出端口中.
三种交换技术:
- 经内存交换
- 经总线交换
- 经互联网络交换
4.2.3 输出端口处理
4.2.4 何时出现排队
随着队列的增长, 路由器的缓存空间最终将会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包 (packet loss).
4.2.5 分组调度
1. 先进献出 First-In-First-Out (FIFO)
2. 优先权排队 priority queuing
每个优先权类通常都有自己的队列.
3. 循环和加权公平排队 (round robin queuing discipline)
循环
分组像使用优先权排队那样被分类,然而,在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务.
加权
是一种通用形式的循环排队. 大体和循环排队相同. 不同之处在于每个类在任何时间间隔内可能收到不同数量的服务.
4.3 网际协议: IPv4, 寻址, IPv6 及其他
4.3.1 IPv4 数据报格式
协议字段,表示 IP 数据报的数据部分应交给哪个特定的运输层协议: 值为 6 表明数据部分要交给 TCP, 值为 11 表明数据要交给 UDP.
一个 IP 数据报有总长为 20 字节的首部 (假设无选项).
4.3.2 IPv4 数据报分片
并不是所有链路层协议都能承载相同长度的网络层分组. 有的协议能承载大数据报, 而有的协议只能承载小分组.
一个链路层帧能承载的最大数据量叫做 最大传送单元 (Maximum Transmission Unit, MTU).
将过大的 IP 分组挤进链路层帧的方法是将 IP 数据报分片.
用单独的链路层帧封装这些较小的 IP 数据报, 然后通过输出链路发送这些帧, 每个这些较小的数据报都称为 片 (fragment)
片在其到达目的地运输层以前需要重新组装.
为坚持网络内核保持简单的原则, IPv4 的设计者决定将数据报的重新组装工作放到端系统中, 而不是放到网络路由器中. 也就是, 分片在路由器, 组装在接受者主机
为了让目的主机执行这些重新组装任务, IPv4 的设计者讲标识, 标识和片偏移字段放在 IP 数据报首部中.
当生成一个数据报时, 发送主机在为该数据报设置源和目的地址的同时贴上标识号, 发送主机通常将它发送的每个数据报的标识号加 1.
当目的地从同一发送主机收到一系列数据报时, 它能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片.
为了让目的主机绝对地相信它已收到了初始数据报的最后一个片, 最后一个片的标识比特被设置为 0, 而其他所有其他片的标识比特被设为 1
为了让目的主机确定是否丢失了一个片 (且能按正确的顺序重新组装片), 使用偏移字段指定该片应放在初始 IP 数据报的哪个位置.
4.3.3 IPv4 编址
主机与路由器连入网络的方法 : 一台主机通常只有一条链路连接到网络. 当主机中的 IP 想发送一个数据报时, 它就在该链路上发送.
主机与物理链路之间的边界叫做 接口 (interface)
1. 获取一块地址
ICANN 组织的作用不仅是分配 IP 地址, 还管理 DNS 根服务器. 其还会分配域名与解决域名纷争.
ICANN 向区域性因特网注册机构分配地址, 这些机构一起形成了 ICANN 的地址支持组织, 处理本区域内的地址分配/管理.
2. 获取主机地址: 动态主机配置协议 (Dynamic Host Configuration, DHCP)
DHCP 允许主机自动获取 (被分配) 一个 IP 地址.
网络管理员能够配置 DHCP, 以使某给定主机每次与网络连接时能得到一个相同的 IP 地址, 或者某主机将被分配一个临时的 IP 地址, 每次与网络连接时该地址也许是不同的.
最简单场合下, 每个子网将具有一个 DHCP 服务器, 如果在某子网中没有服务器, 则需要一个 DHCP 中继代理 (通常是一台路由器), 这个代理知道用于该网络的 DHCP 服务器的地址.
4.3.4 网络地址转换 (Network Address Translation, NAT)
具有专用地址的地域 (realm with private address) 指其地址仅对该网络中的设备有意义的网络.
NAT 路由器对外界的行为就如同一个具有单一 IP 地址的单一设备.
从本质上讲, NAT 使能路由器对外界隐藏了家庭网络的细节.
路由器从 ISP 的 DHCP 服务器得到它的地址, 并且路由器运行一个 DHCP 服务器, 为位于 NAT-DHCP 路由器控制的家庭网络空间中的计算机提供地址.
NAT 转换表 (NAT translation table) 中包含端口号和 IP 地址. 不同的内部主机及其端口号映射到对外 IP 的不同端口上.
端口号字段为 16 比特长, NAT 协议可支持超过 60000 个并行使用路由器广域网一侧单个 IP 地址的连接.
原本端口号是用于进程寻址而不是主机寻址, 因此会出现一些问题.
4.3.5 IPv6
IPv6 数据报格式
IP 地址长度从 32 比特增加到 128 比特.
引入了 任播地址 (anycast address), 使数据交付给一组主机中的任意一个.
40 字节首部.
IPv6 不允许在中间路由器上进行分片与重新组装, 这种操作只能在源与目的地执行.
从 IPv4 到 IPv6 的迁移
建隧道处理, 将两个 IPv6 节点之间的所有 IPv4 节点视为一个隧道. 将整个 IPv6 数据报放到一个 IPv4 数据报的数据字段中.
4.4 通用转发和 SDN
因特网路由器的转发决定传统上仅仅基于分组的目的地址.
通用转发,其中转发和其他功能可以使用数据报首部中的几个不同的字段值.
第5章 网络层: 控制平面
控制平面控制沿着从原主机到目的主机的端到路径间的路由器 如何发送数据 且控制网络层组件和服务如何配置和管理.
5.1 概述
5.2 路由选择算法 (routing algorithm)
目的: 从发送方到接收方的过程中确定一条通过路由器网络的好的路径. (即最低开销的路径)
第6章 链路层和局域网
两种不同类型的链路层信道:
- 广播信道, 用于连接有限局域网, 卫星网和混合光纤同轴电缆接入网中的多台主机
- 点对点通信链路, 长距离链路连接的路由器之间
6.1 链路层概述
将运行链路层协议的任何设备均称为 节点 (node) . 包括主机, 路由器, 交换机和 WiFi 接入点.
把沿着通信路径连接相邻节点的通信信道称为 链路 (link)
6.1.1 链路层提供的服务
链路层协议能够提供的可能服务包括:
- 成帧 (framing), 即用链路层帧封装起来, 帧的结构由链路层协议规定
- 链路接入, 媒体访问控制 (Medium Access Control, MAC) 协议规定了帧在链路上传输的规则
- 可靠交付, 通过确认和重传
- 差错检测和纠正, 如发送的比特为 1, 接收为 0. 在帧中包含差错检测比特来让接收节点进行差错检测
6.1.2 链路层在何处实现
链路层的主体部分实在 网络适配器 (network adapter) 中实现, 即网络接口卡 (Network Interface Card, NIC). 其位于 链路层控制器, 该控制器通常是一个实现了许多链路层服务 (成帧, 链路接入, 差错检测等) 的专用芯片. 许多功能由硬件实现.
以前网络适配器还是物理上分离的卡. 现在很多综合进主板.
链路层是硬件和软件的结合体, 即此处是协议栈中软件与硬件交接的地方.
6.2 差错检测和纠正技术
即是采用差错检测比特, 也还是可能有未检出比特差错 (undetected bit error).
3 种技术:
- 奇偶校验 (描述基本思想)
- 检验和方法 (常用于运输层)
- 循环冗余检测 (常用于链路层)
6.2.1 奇偶校验
单个 奇偶校验位 (parity bit) (指只添加一个比特位)
例如, 要发送 d 比特信息.
偶校验方案, 附加一个比特, 使得 d + 1 比特中 1 的总数是 偶数.
奇校验方案, 附加一个比特, 使得 d + 1 比特中 1 的总数是 奇数.
接收方 需要数接受比特中 1 的数目.
这种方式容易未检出差错, 比如偶校验方案中有偶数个比特发生差错就检测不出.
更健壮的差错检测方案 , 二维奇偶检验 (two-dimensional parity), 将 d 个比特划分为 i 行 j 列, 对每行每列计算奇偶值:
利用类似于坐标的形式对错误进行纠正:
接收方检测和纠正差错的能力被称为 向前纠错 (Forward Error Correction, FEC)
6.2.2 检验和方法
检验和 方法, 将 d 比特数据作为 k 比特的整数的序列处理. 将这些 k 比特整数加起来, 用这个和作为差错检测比特.
因特网检验和, 将数据的字节作为 16 比特的整数并求和. 这个和的反码形成了携带在报文段首部的因特网检验和.
检测方法, 接收方对接收数据和 (包括检验和) 取反码, 若检测结果全为 1, 则没有差错.
原理: 一段比特加上这段比特的反码, 结果是所有比特都为 1. 如:
1 |
|
这里如:
1 |
|
6.2.3 循环冗余检测 (Cyclic Redundancy Check, CRC)
CRC 编码也称为多项式编码 (polynomial code). 因为该编码能够将要发送的比特串看作为系数是 0 和 1 一个多项式, 对比特串的操作被解释为多项式算术.
具体见书.
6.3 多路访问链路和协议
多路访问问题 , 如何协调多个发送和接受节点对一个共享广播信道的访问.
多路访问协议(multiple access protocol) , 节点通过这些协议来规范他们在共享的广播信道上的传输行为.
当多个节点同时传输帧时, 所有节点同时接到多个帧, 导致传输的帧在所有的接收方处 碰撞 (collide). (导致丢失)
多路访问协议分为 3 种类型:
- 信道划分协议 (channel partitioning protocol)
- 随机接入协议 (random access protocol)
- 轮流协议 (taking-turn protocol)
6.4 交换局域网
6.4.1 链路层寻址和 ARP
1. MAC 地址
并不是主机或路由器具有链路层地址, 而是它们的适配器 (网络接口) 具有链路层地址.
链路层地址有几种不同的称呼:
- LAN 地址 (LAN address)
- 物理地址 (physical address)
- MAC 地址 (MAC address)
长度为 6 字节. 常用十六进制表示如: 1A-23-F9-CD-06-9B
.
IEEE 管理地址分配, MAC 地址无重复且不变化.
MAC 广播地址 为 FF-FF-FF-FF-FF-FF
.
2. 地址解析协议
ARP, Address Resolution Protocol, 地址解析协议. 其可以将 IP 地址解析为 MAC 地址.
每台主机或路由器在其内存中具有一个 ARP 表 (ARP table), 这张表包含 IP 地址到 MAC 地址的映射关系. 该 ARP 表也包含一个寿命 (TTL) 值, 它指示了从表中删除每个映射的时间. (通常是 20 分钟)
如果表中没有, 则会向适配器传送一个 ARP 查询分组, 其会指示适配器广播这个分组.
两个需要注意的事:
- 查询 ARP 报文是在广播帧中发送的, 而响应 ARP 报文在一个标准帧中发送
- 一个 ARP 表是自动建立的, 不需要系统管理员来配置
可以把 ARP 看成是跨越链路层和网络层边界两边的协议.
3. 发送数据报到子网外
当一台主机要向子网之外的主机发送网络层数据报:
一个路由器接口有一个 IP 地址, 一个 ARP 模块和一个适配器.
6.4.2 以太网
以太网几乎占领着有线局域网市场.
集线器 (hub) 是一种物理层设备, 它作用于各个比特而不是作用于帧. 当表示一个 0 或 一个 1 的比特到达一个接口时, 集线器只是重新生成这个比特, 将其能量强度放大, 并将该比特向其他所有接口传送出去.
某集线器同时从两个不同的接口接收到帧, 将出现一次碰撞.
交换机 是 “无碰撞的”.
1. 以太网帧结构
以太网帧的负载是一个 IP 数据报.
所有的以太网技术都向网络层提供 无连接 服务, 即两个适配器之间不握手.
以太网技术都向网络层提供不可靠服务.
2. 以太网技术
以太网技术名前的数字表明速率, 如: 10BASE-2
中的 10
为 10Mbps
. BASE
指基带以太网, 这意味着物理媒介仅承载以太网流量. 2
是物理媒介.
交换机协调传输, 在任何时候绝不会向相同的接口转发超过一个帧.
6.4.3 链路层交换机
交换机的任务是接收 入链路层帧 并将他们转发到出链路.
交换机输出接口设有缓存.
1. 交换机转发和过滤
过滤 (filtering) 是决定一个帧应该转发到某个接口还是应当将其丢弃的交换机功能.
转发 (forwarding) 是决定一个帧应该被导向那个接口, 并把该帧移动到那些接口.
交换机的过滤和转发借助于 交换机表 (switch table) 完成.
其包括:
- 一个 MAC 地址
- 通向该 MAC 地址的交换机接口 (毕竟一个接口映射一个地址, 从这个接口出去就到一个地址)
- 表项放置在表中的时间
假定地址 DD-DD-DD-DD-DD-DD
从交换机接口 x
到达
3 种情况:
- 如果没有对于目的地址的表项, 交换机广播该帧
- 地址
DD-DD-DD-DD-DD-DD
与接口x
联系, 输出 - 地址
DD-DD-DD-DD-DD-DD
与接口y
联系, 从y
输出到一个局域网
只要交换机的表是完整和准确的, 该交换机无需任何广播就向目的地转发帧.
2. 自学习
交换机的表是自动, 动态和自治地建立的. (即 自学习 的):
- 交换机表初始为空
- 对于在每个接口接收到的每个入帧, 该交换机在其表中存储:
- 在该帧源地址字段中的 MAC 地址
- 该帧到达的接口
- 当前时间
- 如果在一段时间后, 交换机没有接收到以该地址作为源地址的帧, 就在表中删除这个地址
交换机是 即插即用 (plug-and-play device) , 因为它们不需要网络管理员或用户的干预.
要安装交换机的网络管理员除了将局域网段与交换机的接口相连外, 不需要做其他任何事.
3. 链路层交换机的性质
交换机的最大聚合宽带是该交换机所有接口速率之和.
交换机使局域网中的不同链路能够以不同的速率运行并且能够在不同的媒体上运行.
交换机毒化 (switch poisoning) 攻击, 它向交换机发送大量具有不同伪造源 MAC 地址的分组, 因而用伪造表项填满了交换机表, 这使交换机广播大多数帧, 这些帧则能够由嗅探器捕获到.
4. 交换机和路由器比较
交换机是第二层的分组交换机, 用 MAC 地址转发分组.
路由器是第三层的分组交换机.
互联设备典型特色比较 :
通常, 由几百台主机组成的小网络, 且包含几个小网段, 可以使用交换机.
对由几千台主机组成的更大网络中, 用路由器更好.
6.4.4 虚拟局域网
限制广播流量的范围将改善局域网的性能.
虚拟局域网 (Virtual Local Network, VLAN) 的交换机.
支持 VLAN 的交换机允许经一个单一的物理局域网基础设施定义多个虚拟局域网. (也就是说, 将这个交换机架设到一个局域网中, 其可以在内部划分出多个虚拟局域网)
即将端口划分为组, 一个组内的端口形成一个广播域.
网络管理员使用交换机管理软件声明一个端口属于某个给定的 VLAN (其中未声明的端口属于一个默认的 VLAN). 在交换机中维护一张端口到 VLAN 的映射表.
两个完全隔离的 VLAN 要交换数据, 可以, 将 VLAN 交换机的一个端口与一台外部的路由器相连.
第7章 无线网络和移动网络
7.1 概述
无线网络的下列要素:
- 无线主机
- 无线链路 (wireless conmmunication link)
- 基站 (base station)
- 网络基础设置
- 单跳, 基于基础设施
- 单跳, 无基础设施
- 多跳, 基于基础设施
- 多跳, 无基础设施
当一台移动主机的移动超出一个基站的覆盖范围而到达另一个基站的覆盖范围后, 它将改变其接入到更大网络的连接点, 这一过程叫做 切换 (handoff)
两个准则来对无线网络分类:
- 在该无线网络中的分组是否跨越了一个无线跳或多个无线跳
- 网络中是否有诸如基站这样的基础设施
7.2 无线链路和网络特征
有线链路和无线链路间的许多重要区别:
- 递减的信号强度. 穿过物体以及路径消耗(path loss)
- 来自其他源的干扰. 在同一个频段发送信号的电波源将相互干扰
- 多径传播 (multipath propagation). 电子波的一部分受物体和地面反射.
无线链路中的比特差错将比有线链路中更为常见.
信噪比 (Signal-to-Noise Ratio, SNR), 是所受到的信号和噪声强度的相对测量. 较大的 SNR 使接收方更容易从背景噪声中提取传输的信号.
增加传输功率的缺点:
- 发送方消耗更多的能量
- 发送方的传输更可能干扰另一个发送方的传输
在有线广播广播链路中, 所有节点能够接收到所有其他节点的传输.
无线传输的 隐藏终端问题 (hidden terminal problem), 信号强会干扰, 信号弱会因衰减无法检测.
CDMA (Code Division Multiple Access, 码分多址)
一种将要发送的比特编码发送的方法, 具体内容没看懂.
7.3 WiFi: 802.11 无线 LAN
这是一个协议标准.
802.11 设备工作在两个不同的频率段上:
- 2.4 ~ 2.485GHz, 即 2.4GHz 频段. 一种无须执照的频段
- 5.1 ~ 5.8GHz, 即 5GHz 频段
7.3.1 802.11 体系结构
基本服务集 (Basic Service Set, BSS).
接入点 (Access Point, AP, 似乎就是 WiFi).
基站 (Base Station).
一个 BSS 包含一个或多个无线站点和一个 AP. (无线站点应该就是设备)
每个 802.11 无线站点都具有一个 6 字节的 MAC 地址, 该地址存储在该站适配器的固件中.
每个 AP 的无线接口也具有一个 MAC 地址.
配置 AP 的无线 LAN 经常被称作 基础设施无线 LAN (infrastructure wireless LAN)
信道与关联
当网络管理员安装一个 AP 时, 管理员为该接入点分配了一个单字或双字的 服务集标识符 (Service Set Identifier, SSID, 就是 WiFi 名称) .
管理员还必须为该 AP 分配一个信道号. (即一段频率, 802.11 运行在 2.4 ~ 2.4835GHz 的频段内, 在 85MHz 的频段内, 定义了 `` 个部分重叠的信道, 当且仅当两个信道由 4 个或更多信道隔开时它们才无重叠, 如 1, 6, 11) 这意味着管理员可以在同一个物理网络中安装 3 个 802.11b AP, 为这些 AP 分配信道 1, 6, 和 11, 然后将每个 AP 都连接到一台交换机上.
WiFi 丛林 (WiFi jungle) 是一个任意物理位置, 在这里无线站点能从两个或多个 AP 中收到恒强的信号. (感觉就是一个区域内的一个位置, 进入 WiFi 丛林就是进入这个信号范围)
你的无线站点需要加入其中一个子网并因此需要与其中的一个 AP 相关联 (associate). 关联意味着这一无线站点在自身和该 AP 之间创建一个虚拟线路. 特别地, 仅有关联的 AP 才向你的无线站点发送数据帧, 并且你的无线站点也仅仅通过该关联 AP 向因特网发送数据帧.
无线站点查找 AP 的方式: 802.11 标准要求每个 AP 周期性地发送 信标帧 (beacon frame) , 每个信标帧包括该 AP 的 SSID 和 MAC 地址. 你的无线站点为了得知正在发送信标帧的 AP, 扫描 11 个信道, 找出来自可能位于该区域的 AP 所发出的信标帧. 通过信标帧了解到可用的 AP 后, 你选择一个 AP 用于关联.
通常, 主机选择接收到具有最高信号强度的信标帧. 但信号强度不是唯一决定主机接收性能的 AP 特性.
扫描信道和监听信标帧的过程被称为 被动扫描 (passive scanning). 无线主机也能够执行 主动扫描 (active acanning)
一旦与一个 AP 关联, 该主机希望加入该 AP 所属的子网中. 因此, 该主机通常将通过关联的 AP 向该子网发送一个 DHCP 发现报文, 以获取在该 AP 子网中的一个 IP 地址.
与一个特定的 AP 创建关联, 一个无线站点需要向该 AP 鉴别自身. 一般通过一个站点的 MAC 地址允许其介入一个无线网络或应用用户名和口令. AP 通常与一个鉴别服务器进行通信.
7.3.2 802.11 MAC 协议
这里将无线设备或 AP 称为 站点 (station) , 它们共享多个接入信道.
802.11 无线局域网不使用碰撞检测, 一旦站点开始发送一个帧, 它就完全地发送该帧.
802.11 采用的是碰撞避免技术.
处理发送的帧不能无损到达目的地问题, 802.11 使用 链路层确认 (link-layer acknowledgment)