计算机网络:自顶向下方法¶
Computer Networking: A Top-Down Approach Seventh Edition
出版社 | 作者 | 出版时间 |
---|---|---|
人民邮电出版社 | James F. Kurose, Keith W. Ross | 2017 |
Ch2. 应用层¶
Abstract
- 定义基本概念:网络服务、客户和服务器、进程和运输层接口
- 几种网络应用程序:Web、电子邮件、DNS、对等文件分发和视频流
- 开发简单的运行在 TCP 和 UDP 上的应用程序
2.1 应用层协议原理¶
在应用层中,有两种程序进行通信:
- 运行在 Web 服务器主机上的 Web 服务器程序
- 运行在用户主机上的浏览器程序
设计网络应用时,有两种应用程序体系结构:
- 客户-服务器体系结构
- 一个总是打开的称为服务器的主机,服务来自其他称为客户的主机的请求。
- 特征:服务器具有固定的、周知的地址。客户端总是能向该 IP 发送分组与其联系。
- 实例:Web、FTP、Telnet、电子邮件。
- 对等(P2P)体系结构
- 应用程序在间断连接的主机对之间直接通信。
- 流量密集型应用大多是 P2P 的。
- 实例:文件共享(BT)、对等协助下载器(迅雷)、网络电话和视频会议(Skype)。
- 特性:自扩展性
- 混合体系结构
- 实例:即时讯息应用
在两个不同端系统上的进程,通过计算机网络交换报文进行通讯。在任何给定的一对进程之间的通信会话场景,我们总是能将其中一个进程标记为客户,另一个标记为服务器。
- 发起通信联系的是客户端,会话开始时等待联系的是服务器。
进程通过套接字(socket)接口向网络发送报文、从网络接收报文。套接字接口由操作系统管理。网络应用程序开发者对于套接字下层的基础设施几乎没有控制权(可以选择运输层协议等)。
我们需要知道两种信息才能将分组送达目标进程:
- 主机的地址:IP 地址
- 进程的表示:端口号
端口号用于标识应用程序。
应用程序可能需要运输层提供这些服务要求:
- 可靠数据传输
- 多媒体应用大多是能忍受数据丢失的应用。
- 吞吐量
- 多媒体应用大多是带宽敏感的。当协议无法提供需求的吞吐量时,应用程序只能选择较低的编码,或放弃发送。
- 电子邮件、文件传输都属于弹性应用。
- 定时
- 这里的定时指的是时延。
- 安全性
在一般的 TCP/IP 网络中,为应用程序提供了两个运输层协议:UDP 和 TCP。
Ch4. 网络层:数据平面¶
4.1 网络层概述¶
每台主机和路由器中都有一个网络层部分。网络层具有两大重要功能:
- 转发(forwarding):由数据平面实现,路由器将分组从一个输入链路移动到适当的输出链路。
- 路由选择(routing):由控制平面实现,路由器使用路由选择算法决定分组在端系统之间流动的路径。
每台路由器具有一个转发表。在目前最广泛使用的网络结构中,转发表由一个远程控制器进行计算和分发,这称为软件定义网络(Software Defined Network,SDN)。
4.2 路由器工作原理¶
一台路由器有四个组件:
- 输入端口:接收分组、查询转发表。
- 交换结构:连接输入端口和输出端口。
- 输出端口:存储和传输分组。
- 路由选择处理器:与远程控制器通信、接收转发表、在输入端口安装转发表项、执行网络管理功能等。
前面的三个组件由硬件实现,而路由选择处理器由软件实现。
两种转发模式:
- 基于目的地转发:最为泛用的转发模式,只根据目的地决定转发。
- 通用转发:用更多因素控制转发决策,比如:应用层协议、某些首部字段等。(不需要了解,知道有这么个东西就行)。
输入端口处理:
- 转发表从路由选择处理器通过独立总线复制到输入端口的线路卡。
- 输入端口处理流程:线路端接-数据链路处理(协议,拆封)-查找、转发、排队-进入交换结构
- 除了查找以外,输入端口还需要执行其他功能,如检查、重写分组中的某些内容,更新网络计数器等。
转发表太大了怎么办?
对于 32 位 IP 地址,如果路由表中为每个 IP 地址设置一个表项,则路由表有 40 多亿个项。事实上路由器使用最长前缀匹配规则,转发表中保存前缀匹配。
- 最长前缀匹配指的是:如果路由表中有多个匹配项,那么选择最长的前缀匹配项。
- 这要求硬件实现:对大型转发表的超过简单线性搜索的查找算法、对内存的高速访问。有兴趣可以查找相关资料。
交换结构有多种实现,简单了解一下:
- 经内存交换:受内存访问速度的限制。在现代路由器中,将分组存进内存位置也常常由输入端口的线路卡完成,这更像是一个共享内存的多处理器。
- 经总线交换:接收分组-打标签-上总线-匹配的输出端口接收-去除标签。所有端口都会收到分组,但只有匹配的端口会接收到分组。总线上一次只能有一个分组,速度受总线带宽限制。
- 经互联网络交换:使用更加复杂的内部交换结构,如纵横式交换网络、多级交换结构等。它们通常是非阻塞的,即只要没有其他分组占用该输出端口,就可以立即将分组从输入端口转发到输出端口。
输出端口处理:
- 输出端口处理流程:排队-数据链路处理(协议,封装)-线路端接
- 输入排队:线路前部阻塞(Head-Of-Line,HOL)阻塞。如果一个分组在一个输出端口排队,那么该输出端口的所有分组都会被阻塞,即使其中一些分组可以被转发到其他输出端口。
- 输出排队:要么丢弃尾部到达分组(drop-tail),要么删除一些已排队的分组(Active Queue Management,AQM)。
分组调度:决定排队的分组如何经输出链路传输。
- 先来先服务(FCFS,又称为 FIFO)
- 优先权排队(priority queuing):分组被分成几种优先权类,选择分组传输时优先从高优先权类中选择。比如,实时通话的优先权可能高于邮件服务。
- 循环排队:字面意思,循环调度器轮流服务多个类。
- 加权公平排队(Weighted Fair Queuing, WFQ):保证即使在所有类的都有排队时,每个类仍然保证分配到对应加权的带宽部分。
4.3 网际协议:IPv4、寻址、IPv6 及其他¶
- IPv4 数据报格式见书本。
数据报分片:
- 一个链路层帧能承载的最大数据量叫做最大传送单元(Maximum Transmission Unit,MTU),它严格限制 IP 数据报的长度。如果一个数据报的长度大于 MTU,那么就需要分片。
- IPv4 的设计者认为,在路由器中组装数据报会给协议带来很大的复杂性且影响路由器性能,因此分片组装在端系统中进行。IPv4 报文中的标识、标志和片偏移字段用于分片和组装。
- 同一个数据报的所有分片都有相同的标识字段值。
- 最后一个片的标志比特为 0,其他分片的标志比特为 1。
- 片偏移字段可以让目的主机确定是否丢失了某一片。
IPv4 编址:
- IP 地址与接口相关联,而不是与主机或路由器相关联。
- IP 地址长度为 32 比特(4 字节),共有约 40 亿个可能的 IP 地址。
193.32.216.9
这样的记法称为点分十进制记法(dotted-decimal notation),每个字节用十进制书写,各字节间用点隔开。
重点:子网的概念
互联几个主机接口与一个路由器接口的网络形成子网(subnet)。这些主机接口和路由器接口之间由并不包含路由器的网络连接起来,比如一个以太网交换机。子网的定义并不局限于多台主机到一个路由器接口,路由器接口之间也构成子网。
- IP 编址为该子网分配一个形如
223.1.1.0/24
的地址,其中/24
是子网掩码,表明最左侧 24 比特定义了子网地址。任何其他连接到223.1.1.0/24
网络的主机地址都应当有223.1.1.xxx
的形式。
因特网的地址分配策略:无类别域间路由选择(Classless Interdomain Routing,CIDR)。
- IP 地址划分为两部分,也使用点分十进制格式,
a.b.c.d/x
。 - 地址的剩余 \(32-x\) 比特用于区分该组织内部的设备,其中所有设备具有相同的网络前缀。只有当组织内部的路由器转发分组时才考虑这些比特。这些较低比特可能用于另外的子网结构。
CIDR 寻址的例子
一个 ISP 拥有地址块 200.23.16.0/20
,它向外界通告:向我发送以 200.23.16.0/20
开始的任何东西。这个 ISP 将 200.23.16.0/23
、200.23.18.0/23
等几个组织连接到互联网。
- 这样使用单个网络前缀通告多个网络的能力称为地址聚合(address aggregation)或路由聚合(routing aggregation)或路由摘要(route summarization)。
这个 ISP 又拿到了一个辅助 ISP,它具有 199.31.0.0/16
的地址块。现在将组织 200.23.16.0/23
通过该辅助 ISP 连接到互联网。这个 ISP 应当向外界通告:向我发送以 199.31.0.0/16
或 200.23.16.0/23
开始的任何东西。
- 上面这个例子说明:路由选择时将使用最长前缀匹配。
在 CIDR 之前,IP 地址的网络部分被限制为 8、16 或 24 比特,称为分类编制(classful addressing)方案。这些子网分别称为 A、B 和 C 类网络。分类编址方案的问题在于,它们将地址空间划分为固定大小的块,这些块可能过大或过小。
一个特别的地址:255.255.255.255
广播地址。当一台主机发出目的地为广播地址的数据报时,报文交付给同网络中所有主机。
IP 地址的分配:
- 地址块的分配:网络管理员向 ISP 联系,获取 ISP 提供的地址块。ISP 则从一个全球性的权威机构因特网名字和地址分配机构(Internet Corporation for Assigned Names and Numbers,ICANN)获取地址块。
- 主机地址:动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)。
重点:DHCP 协议
DHCP 协议是一种即插即用协议(plug-and-play protocol)或零协议(zeroconf),它允许主机自动获取 IP 地址和其他配置参数。
DHCP 协议是一种客户-服务器协议。通常情况下,客户是新到达的主机,每个子网具有一台 DHCP 服务器。如果没有,就需要 DHCP 中继代理(DHCP relay agent),通常是一个路由器,它知道该网络的 DHCP 服务器地址,提供中继代理服务。
DHCP 协议的工作原理如下:
- DHCP 服务器发现:新到达的主机在 UDP 分组中向端口 67 广播一个 DHCP 发现报文(DHCP discover message),目的地址为广播地址
255.255.255.255
,源地址为0.0.0.0
(代表本主机)。 - DHCP 服务器提供:DHCP 服务器收到 DHCP 发现报文后,用广播的 DHCP 提供报文(DHCP offer message)作为响应。
- 提供报文包含:发现报文的 ID、向客户推荐的 IP 地址、网络掩码、IP 地址租期(address lease time)。
- 如果子网中存在几个 DHCP 服务器,该客户会选择其中一个。
- DHCP 请求:客户向选中的服务器发送 DHCP 请求报文(DHCP request message),回显配置参数。
- DHCP ACK:服务器响应,证实要求的参数。
重点:网络地址转换 NAT
一个 NAT 使能路由器(就是具有NAT功能的路由器,这个翻译好怪)对外的行为像是一个具有单个 IP 地址的单一设备。它对外隐藏了内部网络的细节。路由器上有一张 NAT 转换表,包含端口号和 IP 地址。
NAT 网络内的编址通常使用地址空间 10.0.0.0/8
,这是 RFC 1918 中保留的三部分 IP 地址空间之一。这些地址用于专用网络(private network)。
NAT 使能路由器的工作原理如下:
- NAT 网络内的主机
10.0.0.1
请求某 Web 服务器,并为其分配3345
端口。数据报发送到 LAN 中。 - NAT 路由器接收到数据报,生成一个新的端口号
5001
,并将源 IP 和源端口号替换成其广域网一侧接口的 IP 地址139.76.29.7:5001
。NAT 路由器在 NAT 转换表中添加一个表项,该报文被送往广域网。 - Web 服务器接收到报文,但他不知道报文被修改。响应报文按
139.76.29.7:5001
到达 NAT 路由器。 - NAT 路由器按转换表重写响应报文的目的 IP 地址和端口号,并转发到专用网络。
对 NAT 的批评如下:
- 端口号是用于进程寻址的,而不是用于主机寻址的。对该问题的解决方案包括 NAT 穿越和通用即插即用(Universal Plug and Play,UPnP)。
- NAT 使网络层更改了传输层的协议,这违反了协议分层原则。
尽管存在批评,但 NAT 已经成为了因特网的重要组成部分。
IPv6 协议:扩大了地址空间,并强化了其他方面。
- 报文首部为定长的 40 字节:使路由器更快处理报文。
- IPv6 不允许中间路由器进行分片与重新组装,只能在源和目的地间进行。如果数据报太大,路由器丢弃数据报并返回“分组太大”的 ICMP 错误报文。这同样加快了网络的转发速度。
- IPv6 去除了首部检验和,而在 IPv4 中每台路由器都需要重新计算首部检验和。
4.4 通用转发和 SDN¶
略。