第一章 计算机网络和因特网
第 1 章概述了计算机网络和因特网 。 这一章的目标是从整体上粗线条地勾勒岀计算机网络的概貌, 并且描述本书内容的框架 。 这一章包括大量的背景知识,讨论大量的计算机网络构件 ,而且将它们放在整个网络的大环境中进行讨论 。
1.1 什么是因特网
因特网(Internet)是一组全球信息资源的总汇。有一种粗略的说法,认为Internet是由许多小的网络(子网)互联而成的一个逻辑网,每个子网中连接着若干台计算机(主机)。Internet以相互交流信息资源为目的,基于一些共同的协议,并通过许多路由器和公共互联网而成,它是一个信息资源和资源共享的集合。 【来源:百度百科】
在本书中使用一种特定的计算机网络,即公共因特网,作为讨论计算机网络及其协议的主体。我们从两个方面阐述什么是因特网:
- 具体构成描述:即构成因特网的基本硬件和软件组件;
- 服务描述:我们能够根据为分布式应用提供服务的联网基础设施来描述因特网;
1.1.1 具体构成描述
因特网是一个世界范围的计算机网络, 即它是一个互联了遍及全世界数十亿计算设备的网络 。在许多非传统设备连接到因特网的情况下 ,计算机网络 ( computer network ) 这个术语开始听起来有些过时了。 用因特网术语来说, 所有这些设备都称为主机 ( host) 或终端系统 (end system )。
终端系统通过通信链路 ( communication link) 和分组交换机 ( packet switch ) 连接到一起 。
通信链路: 可以理解为连接不同终端的线路,如电缆、光纤等。不同的链路能够以不同的速率传输数据 ,链路的传输速率 ( transmission rate) 以比特 / 秒 ( bit/s, 或 bps) 度量 。传输的信息包称之为为分组 ( packet)。
分组交换机:分组交换机从它的一条入通信链路接收到达的分组, 并从它的一条出通信链路转发该分组 。一般指得是路由器 ( router) 和链路层交换机 ( link-layer switch )。链路层交换机通常用于接入网中 ,而路由器通常用于网络核心中。从发送端系统到接收端系统, 一个分组所经历的一系列通信链路和分组交换机称为通过该网络的路径 ( mute 或 path) 。
终端系统通过因特网服务提供商 ( Internet Service Provider, ISP) 接入因特网, 包括如本地电缆或电话公司那样的住宅区 ISP 、 公司 ISP 、 大学 ISP等。每个 ISP 自身就是一个由多台分组交换机和多段通信链路组成的网络 。 因特网就是将端系统彼此互联, 因此为端系统提供接入的ISP 也必须互联 。 较低层的 ISP 通过国家的 、 国际的较高层 ISP 互联起来 。 较高层 ISP 是由通过高速光纤链路互联的高速路由器组成的 。 无论是较高层还是较低层 ISP 网络, 它们每个都是独立管理的,运行着 IP 协议(详情见后 ),遵从一定的命名和地址规则。
端系统 、分组交换机和其他因特网部件都要运行一系列协议( protocol ) , 这些协议控制因特网中信息的接收和发送 。 TCP ( Transmission Control Protocol, 传输控制协议) 和 IP( Internet Protocol , 网际协议) 是因特网中两个最为重要的协议 。 IP 协议定义了在路由器和端系统之间发送和接收的分组格式 。 因特网的主要协议统称为 TCP/IP 。
1.1.2 服务描述
前面的讨论已经辨识了构成因特网的许多部件。但是我们也能从一个完全不同的角度 , 即从为应用程序提供服务的基础设施的角度来描述因特网 。 除了诸如电子邮件和Web 冲浪等传统应用外 , 因特网应用还包括移动智能手机和平板电脑应用程序 , 其中包括即时讯息 、与实时道路流量信息的映射 、 来自云的音乐流 、 电影和电视流 、 在线社交网络 、 视频会议 、 多人游戏以及基于位置的推荐系统 。 因为这些应用程序涉及多个相互交换数据的端系统, 故它们被称为分布式应用程序 ( distributed applicalion ) 。
运行在一个端系统上的应用程序怎样才能指令因特网向运行在另一个端系统上的软件发送数据呢 ?与因特网相连的端系统提供了一个套接字接口( socket interface ),该接口规定了运行在一个端系统上的程序请求因特网基础设施向运行在另一个端系统上的特定目的地程序交付数据的方式 。 因特网套接字接口是一套发送程序必须遵循的规则集合 , 因此因特网能够将数据交付给目的地 。
1.1.3 什么是协议
协议 ( protocol) 定义了在两个或多个通信实体之间交换的报文的格式和顺序 , 以及报文发送和/ 或接收一条报文或其他事件所采取的动作。
因特网( 更一般地说是计算机网络) 广泛地使用了协议 。不同的协议用于完成不同的通信任务。 某些协议简单而直截了当 ,而某些协议则复杂且晦涩难懂 。 掌握计算机网络领域知识的过程就是理解网络协议的构成 、原理和工作方式的过程 。
1.2 网络边缘
通常把与因特网相连的计算机和其他设备称为端系统 。 如图 1-3 所示, 因为它们位于因特网的边缘, 故而被称为端系统 。
端系统也称为主机 ( host), 因为它们容纳( 即运行) 应用程序 , 如 Web 浏览器程序 、 Web 服务器程序 、 电子邮件客户程序或电子邮件服务器程序等 。 本书通篇将交替使用主机和端系统这两个术语, 即主机=端系统
。主机有时又被进一步划分为两类: 客户端(client) 和服务器 ( server) 。
客户端通常是桌面 PC 、 移动 PC 和智能手机等,而服务器通常是更为强大的机器 ,用于存储和发布 Web 页面 、 流视频 、中继电子邮件等 。今天,大部分提供搜索结果 、 电子邮件、 Web 页面和视频的服务器都属于大型数据中心 ( data center)。
1.2.1 接入网
接入网是指将端系统物理连接到其边缘路由器 ( edge router ) 的网络 。 边缘路由器是端系统到任何其他远程端系统的路径上的第一台路由器。
-
家庭接入:DSL 、 电缆 、 FTTH 、 拨号和卫星
数字用户线( Digital Subscriber Line ,DSL): 住户通常从提供本地电话接入的本地电话公司处获得DSL 因特网接入。 因此 , 当使用 DSL 时 ,用户的本地电话公司也是它的 ISP 。 如图 1-5 所示, 每个用户的 DSL调制解调器使用现有的电话线( 即双绞铜线 ) 与位于电话公司的计算机网络和因特网本地中心局 ( CO) 中的数字用户线接入复用器 ( DSLAM) 交换数据 。
电缆因特网接入 (cable Internet access): 利用了有线电视公司现有的有线电视基础设施 。住宅从提供有线电视的公司获得了电缆因特网接入。 如图 1-6 所示, 光缆将电缆头端连接到地区枢纽, 从这里使用传统的同轴电缆到达各家各户和公寓 。因为在这个系统中应用了光纤和同轴电缆, 所以它经常被称为混合光纤同轴( Hybrid Fiber Coax , HFC) 系统 。电缆因特网接入需要特殊的调制解调器 ,这种调制解调器称为电缆调制解调器 ( cable modem)。
光纤到户 ( Fiber To The Home , FTTH) : FTTH 概念简单 , 从本地中心局直接到家庭提供了一条光纤路径 。最简单的光纤分布网络称为直接光纤, 从本地中心局到每户设置一根光纤 。 更为一般的是 , 从中心局岀来的每根光纤实际上由许多家庭共享 ,直到相对接近这些家庭的位置,该光纤才分成每户一根光纤 。行这种分配有两种有竞争性的光纤分布体系结构: 主动光纤网络( Active Optical Network ,AON) 和被动光纤网络 (Passive Optical Network ,PON)。
还可采用另外两种接入网技术为家庭提供因特网接入。 在无法提供 DSL 、 电缆和FTTH 的地方 ( 例如在某些乡村环境 ),能够使用卫星链路将住宅以超过 1Mbps 的速率与因特网相连 。
-
企业 ( 和家庭 ) 接入 : 以太网和 WiFi
在公司和大学校园以及越来越多的家庭环境中 , 使用局域网 ( LAN) 将端系统连接到边缘路由器。 尽管有许多不同类型的局域网技术 , 但是以太网到目前为止是公司、 大学和家庭网络中最为流行的接入技术 。
在无线 LAN 环境中 , 无线用户从/到一个接入点发送 / 接收分组,该接入点与企业网连接 ( 很可能使用了有线以太网), 企业网再与有线因特网相连 。
- 广域无线接入 : 3/4/5G 和 LTE
iPhone 和安卓等设备越来越多地用来在移动中发信息 、 在社交网络中分享照片 、 观看视频和放音乐。 这些设备应用了与蜂窝移动电话相同的无线基础设施 ,通过蜂窝网提供商运营的基站来发送和接收分组。与 WiFi 不同的是 , 一个用户仅需要位于基站的数万米计算机网络和因特网(而不是几十米)范围内。
LTE (长期演进 “Long-Term Evolution”) 的缩写 ,被评为最差首字母缩写词年度奖候选者)来源于 3G 技术 , 它能够取得超过 10Mbps 的速率 。
1.2.2 物理媒体
考虑一个比特从一个端系统开始传输,通过一系列链路和路由器 , 到达另一个端系统 。 这个比特被漫不经心地传输了许许多多次 ! 源端系统首先发射这个比特, 不久后其中的第一台路由器接收该比特;第一台路由器发射该比特, 接着不久后第二台路由器接收该比特;等等 。 因此 ,这个比特当从源到目的地传输时 ,通过一系列“发射器-接收器” 对 。 对于每个发射器-接收器对, 通过跨越一种物理媒体 ( physical medium ) 传播电磁波或光脉冲来发送该比特 。 该物理媒体可具有多种形状和形式 , 并且对沿途的每个发射器-接收器对而言不必具有相同的类型 。 物理媒体的例子包括双绞铜线 、同轴电缆 、 多模光纤缆 、 陆地无线电频谱和卫星无线电频谱 。 物理媒体分成两种类型 : 导引型媒体 ( guided media) 和非导引型媒体 ( unguided media) 。对于导引型媒体, 电波沿着固体媒体前行, 如光缆 、双绞铜线或同轴电缆 。 对于非导引型媒体 ,电波在空气或外层空间中传播 , 例如在无线局域网或数字卫星频道中。
常用的物理媒体:
- 双铰铜线:最便宜最常用;常用于电话线;无屏蔽双绞线 ( Unshielded Twisted Pair, UTP) 常用在建筑物内的计算机网络中 , 即用于局域网 ( LAN) 中。
- 同轴电缆:常用于电缆电视与因特网的连接。
- 光纤:现在用于因特网的主干,也用于许多长途电话,传输速度快。
- 陆地无线电信道:不需要物理线路,常用于无线LAN。
- 卫星无线电信道:一颗通信卫星连接地球上的两个或多个微波发射器/ 接收器 它们被称为地面站 。该卫星在一个频段上接收传输, 使用一个转发器 再生信号 , 并在另一个频率上发射信号。 通信中常使用两类卫星 : 同步卫星 ( geostationary satellite) 和近地轨道( Low - EarthOrbiting, LEO) 卫星 。
1.3 网络核心
在考察了因特网边缘后 , 我们现在更深入地研究网络核心 , 即由互联因特网端系统的分组交换机和链路构成的网状网络 。 图 1-10 用加粗阴影线勾画出网络核心部分。
1.3.1 分组交换
在各种网络应用中 ,端系统彼此交换报文 ( message) 。 报文能够包含协议设计者需要的任何东西 。 报文可以执行一种控制功能( 例如 , 图 1-2 所示例子中的 “你好 ” 报文 ), 也可以包含数据 , 例如电子邮件数据 、 JPEG 图像或 MP3 音频文件。为了从源端系统向目的端系统发送一个报文 , 源将长报文划分为较小的数据块 ,称之为分组( packet)。在源和目的地之间, 每个分组都通过通信链路和分组交换机 ( packet switch )传送 。 ( 交换机主要有两类:路由器 ( router) 和链路层交换机 ( link-layer switch ) 。 ) 分组以等于该链路最大传输速率的速度传输通过通信链路 。 因此 , 如果某源端系统或分组交换机经过一条链路发送一个L比特的分组,链路的传输速率为R比特 /秒, 则传输该分组的时间为 L/R 秒 。
-
存储转发传输
多数分组交换机在链路的输入端使用存储转发传输( store-and-forward transmission)机制。 存储转发传输是指在交换机能够开始向输岀链路传输该分组的第一个比特之前 ,必须接收到整个分组 。
记线路传输速度为:
\[R\space bits/s\]- 传输$L$比特数据的时延:
- 由$N$条线路构成的路径,传输$L$比特的数据的时延:
-
排队时延和分组丢失
每台分组交换机有多条链路与之相连 。 对于每条相连的链路,该分组交换机具有一个输出缓存 ( output buffer , 也称为输出队列 ( output queue )) , 它用于存储路由器准备发往那条链路的分组 。 该输出缓存在分组交换中起着重要的作用 。 如果到达的分组需要传输到某条链路, 但发现该链路正忙于传输其他分组,该到达分组必须在输出缓存中等待 。 因此 ,除了存储转发时延以外 , 分组还要承受输岀缓存的排队时延 ( queuing delay) 。 这些时延是变化的, 变化的程度取决于网络的拥塞程度 。 因为缓存空间的大小是有限的, 一个到达的分组可能发现该缓存已被其他等待传输的分组完全充满了。 在此情况下 , 将出现分组 丢失 ( 丢包 ) ( packet loss), 到达的分组或已经排队的分组之一将被丢弃 。
-
转发表和路由选择协议
在因特网中 , 每个端系统具有一个称为 IP 地址的地址 。 当源主机要向目的端系统发送一个分组时 , 源在该分组的首部包含了目的地的 IP 地址 。 如同邮政地址那样 ,该地址具有一种等级结构。 当一个分组到达网络中的路由器时 ,路由器检查该分组的目的地址的一部分 , 并向一台相邻路由器转发该分组 。 更特别的是 , 每台路由器具有一个转发表(forwarding table) , 用于将目的地址(或目的地址的一部分)映射成为输岀链路 。 当某分组到达一台路由器时 ,路由器检查该地址 , 并用这个目的地址搜索其转发表, 以发现适当的出链路 。 路由器则将分组导向该出链路 。
1.3.2 电路交换
在电路交换网络中 , 在端系统间通信会话期间,预留了端系统间沿路径通信所需要的资源 (缓存 ,链路传输速率) 。 在分组交换网络中 ,这些资源则不是预留的; 会话的报文按需使用这些资源 , 其后果可能是不得不等待 ( 即排队) 接入通信线路 。一个简单的类比是 ,考虑两家餐馆, 一家需要顾客预订,而另一家不需要预订, 但不保证能安排顾客 。 对于需要预订的那家餐馆, 我们在离开家之前必须承受先打电话预订的麻烦 , 但当我们到达该餐馆时 , 原则上我们能够立即入座并点菜 。 对于不需要预订的那家餐馆, 我们不必麻烦地预订餐桌 , 但当我们到达该餐馆时 , 也许不得不先等待一张餐桌空闲后才能入座 。
1.3.3 网络的网络
今天的因特网是一个网络的网络, 其结构复杂 ,由十多个第一层 ISP 和数十万个较低层 ISP 组成 。 ISP 覆盖的区域多种多样 , 有些跨越多个大洲和大洋 , 有些限于狭窄的地理区域 。 较低层的 ISP 与较高层的 ISP 相连,较高层 ISP 彼此互联 。 用户和内容提供商是较低层 ISP 的客户 ,较低层 ISP 是较高层 ISP 的客户 。 近年来 , 主要的内容提供商也已经创建自己的网络,直接在可能的地方与较低层 ISP 互联 。
- 网络结构1:用单一的全球传输 ISP 互联所有接入 ISP。因为接入 ISP向全球传输 ISP 付费, 故接入 ISP 被认为是客户 ( customer), 而全球传输 ISP 被认为是提供商 ( provider) 。
- 网络结构2:它由数十万接入ISP 和多个全球传输 ISP 组成 。
- 网络结构3:不仅有多个竞争的第一层 ISP, 而且在一个区域可能有多个竞争的区域 ISP 。 在这样的等级结构中 , 每个接入 ISP 向其连接的区域 ISP 支付费用,并且每个区域 ISP 向它连接的第一层 ISP 支付费用 。(一个接入 ISP 也能直接与第一层 ISP连接 ,这样它就向第一层 ISP 付费 。)因此 , 在这个等级结构的每一层 ,都有客户-提供商关系 。值得注意的是 ,第一层 ISP 不向任何人付费, 因为它们位于该等级结构的顶部 。
- 网络结构4:在等级化网络结构 3 上增加存在点 ( Point of Presence , PoP) 、 多宿 、 对等和因特网交换点 。 PoP 存在于等级结构的所有层次 , 但底层(接入 ISP) 等级除外 。一个 POP 只是提供商网络中的一台或多台路由器(在相同位置)群组, 其中客户 ISP 能够与提供商 ISP 连接 。 对于要与提供商 PoP 连接的 客户网络, 它能从第三方电信提供商租用高速链路将它的路由器之一直接连接到位于该PoP 的一台路由器。任何 ISP (除了第一层 ISP) 可以选择多宿 ( multi-home ), 即可以与两个或更多提供商 ISP 连接 。例如 , 一个接入 ISP 可能与两个区域 ISP 多宿 , 既可以与两个区域 ISP 多宿 , 也可以与一个第一层 ISP 多宿 。 当一个 ISP 多宿时 , 即使它的提供商之一出现故障, 它仍然能够继续发送和接收分组 。
- 网络结构5:在网络结构 4 顶部增加内容提供商网络 ( content provider network ) 构建而成 。
1.4 分组交换网中的时延 、丢包和吞吐量
在理想情况下 , 我们希望因特网服务能够在任意两个端系统之间随心所欲地瞬间移动数据而没有任何数据丢失 。 然而,这是一个极高的目标 , 实践中难以达到。与之相反 ,计算机网络必定要限制在端系统之间的吞吐量( 每秒能够传送的数据量), 在端系统之间引入时延 ,而且实际上也会丢失分组 。
1.4.1 分组交换网中的时延概述
当分组从一个节点(主机或路由器)沿着这条路径到后继节点(主机或路由器) ,该分组在沿途的每个节点经受了几种不同类型的时延 。 这些时延最为重要的是节点处理时延 ( nodal processing delay )、排队时延 ( queuing delay ) 、传输时延(transmission delay) 和传播时延 ( propagation delay ), 这些时延总体累加起来是节点总时延 ( tolal nodal delay ) 。
时延类型:
-
处理时延 :$d_{peer}$
检查分组首部和决定将该分组导向何处所需要的时间是处理时延的一部分。 处理时延也能够包括其他因素, 如检查比特级别的差错所需要的时间,该差错岀现在从上游节点向路由器 A 传输这些分组比特的过程中。
-
排队时延:$d_{queue}$
在队列中 , 当分组在链路上等待传输时 , 它经受排队时延 。一个特定分组的排队时延长度将取决于先期到达的正在排队等待向链路传输的分组数量 。 如果该队列是空的, 并且当前没有其他分组正在传输, 则该分组的排队时延为 0 。另一方面, 如果流量很大, 并且许多其他分组也在等待传输,该排队时延将很长 。
-
传输时延:$d_{trans}$
假定分组以先到先服务方式传输 —— 这在分组交换网中是常见的方式 , 仅当所有已经到达的分组被传输后 , 才能传输刚到达的分组 。 用$L$比特表示该分组的长度 ,用 $R\space bps$(即 b/s) 表示从路由器 A 到路由器 B 的链路传输速率 。例如 , 对于一条 10Mbps 的以太网链路,速率R = 10Mbps ; 对于 100Mbps 的以太网链路,速率 R = 100M bps。 传输时延是$L/R$。 这是将所有分组的比特推向链路(即传输, 或者说发射)所需要的时间 。
-
传播时延:$d_{prop}$
一旦一个比特被推向链路,该比特需要向路由器 B 传播 。从该链路的起点到路由器 B传播所需要的时间是传播时延 。 该比特以该链路的传播速率传播 。 该传播速率取决于该链路的物理媒体 ( 即光纤 、双绞铜线等), 其速率等于或略小于光速 。
-
传输时延与传播时延的比较
计算机网络领域的新手有时难以理解传输时延和传播时延之间的差异 。 该差异是微妙而重要的 。传输时延是路由器推出分组所需要的时间, 它是分组长度和链路传输速率的函数 ,而与两台路由器之间的距离无关。另一方面, 传播时延是一个比特从一台路由器传播到另一台路由器所需要的时间, 它是两台路由器之间距离的函数 ,而与分组长度或链路传输速率无关。
1.4.2 排队时延和丢包
与其他 3 项时延 不同的是 , 排队时延对不同的分组可能是不同的 。例如 , 如果 10 个分组同时到达空队列 , 传输的第一个分组没有排队时延 ,而传输的最后一个分组将经受相对大的排队时延 (这时它要等待其他 9 个分组被传输) 。 因此 , 当表征排队时延时 , 人们通常使用统计量来度量, 如平均排队时延 、排队时延的方差和排队时延超过某些特定值的概率 。
什么时候排队时延大 , 什么时候又不大呢 ?该问题的答案很大程度取决于流量到达该队列的速率 、 链路的传输速率和到达流量的性质, 即流量是周期性到达还是以突发形式到达 。为了更深入地领会某些要点 , 令 $a$表示分组到达队列的平均速率 ( $a$的单位是分组 /秒, 即 pkt/s)。 前面讲过$R$是传输速率, 即从队列中推出比特的速率( 以 bps 即 b/s 为单位 )。为了简单起见, 也假定所有分组都是由$L$比特组成的 。则比特到达队列的平均速率是$L_{a}$ 。 最后 , 假定该队列非常大 , 因此它基本能容纳无限数量的比特 。 比率$L_{a}/R$被称为流量强度 ( traffic intensity ) , 它在估计排队时延的范围方面经常起着重要的作用 。 如果 $L_{a}/R>1$, 则比特到达队列的平均速率超过从该队列传输岀去的速率 。 在这种不幸的情况下 ,该队列趋向于无限增加 , 并且排队时延将趋向无穷大 ! 因此 , 流量工程中的一条金科玉律是 :设计系统时流量强度不能大于 1 。
在上述讨论中 , 我们已经假设队列能够容纳无穷多的分组 。 在现实中 , 一条链路前的队列只有有限的容量, 尽管排队容量极大地依赖于路由器设计和成本 。 因为该排队容量是有限的,随着流量强度接近 1, 排队时延并不真正趋向无穷大 。 相反 , 到达的分组将发现一个满的队列。 由于没有地方存储这个分组,路由器将丢弃 ( drop ) 该分组, 即该分组将会丢失 ( lost ) 。 当流量强度大于 1 时 ,队列中的这种溢出也能够在用于队列的 Java 小程序中看到。 从端系统的角度看, 上述丢包现象看起来是一个分组已经传输到网络核心 , 但它绝不会从网络发送到目的地。分组丢失的比例随着流量强度增加而增加。 因此 , 一个节点的性能常常不仅根据时延来度量,而且根据丢包的概率来度量 。
1.4.3 端到端时延
定义每台路由器和源主机上的处理时延是:$d_{proc}$,则在源主机和目的主机之间有 N-1 台路由器的端到端时延为:$d_{end-end}=N(d_{proc}+d_{trans}+d_{prop})$
1.4.4 计算机网络中的吞吐量
考虑从主机 A 到主机 B 跨越计算机网络传送一个大文件。例如 , 也许是从一个P2P 文件共享系统中的一个对等方向另一个对等方传送一个大视频片段 。 在任何时间瞬间的瞬时吞吐量 ( instantaneous throughput ) 是主机 B 接收到该文件的速率( 以 bps 计)。 如果该文件由 F 比特组成 , 主机 B 接收到所有 F 比特用去T秒,则文件传送的平均吞吐量 ( average throughput) 是 F/T bps。
1.5 协议层次及其服务模型
从我们到目前的讨论来看, 因特网显然是一个极为复杂的系统 。 我们已经看到 , 因特网有许多部分 : 大量的应用程序和协议 、各种类型的端系统 、分组交换机以及各种类型的链路级媒体。 面对这种巨大的复杂性 , 存在着组织网络体系结构的希望吗 ? 或者至少存在着我们对网络体系结构进行讨论的希望吗 ? 幸运的是 , 对这两个问题的回答都是肯定的 。
1.5.1 分层的体系结构
利用分层的体系结构 , 我们可以讨论一个大而复杂系统的定义良好的特定部分。 这种简化本身由于提供模块化而具有很高价值 ,这使某层所提供的服务实现易于改变。只要该层对其上面的层提供相同的服务 , 并且使用来自下面层次的相同服务 , 当某层的实现变化时 ,该系统的其余部分保持不变。
-
协议分层
网络各层的所有协议被称为协议栈 ( protocol stack )。 因特网的协议栈由5 个层次组成 :物理层 、 链路层 、 网络层 、 运输层和应用层 ( 如图 1-23a 所示) 。
-
应用层
应用层是网络应用程序及它们的应用层协议存留的地方 。 因特网的应用层包括许多协 议, 例如 HTTP ( 它提供了 Web 文档的请求和传送) 、 SMTP ( 它提供了电子邮件报文的传 输) 和 FTP ( 它提供两个端系统之间的文件传送) 。
-
运输层
因特网的运输层在应用程序端点之间传送应用层报文 。 在因特网中 , 有两种运输协议, 即 TCP 和 UDP, 利用其中的任一个都能运输应用层报文 。 TCP 向它的应用程序提供了面向连接的服务。 这种服务包括了应用层报文向目的地的确保传递和流量控制 ( 即发送方 / 接收方速率匹配) 。 TCP 也将长报文划分为短报文 , 并提供拥塞控制机制 , 因此当网络拥塞时 , 源抑制其传输速率 。 UDP 协议向它的应用程序提供无连接服务。 这是一种不提供不必要服务的服务 , 没有可靠性 , 没有流量控制 , 也没有拥塞控制。 在本书中 , 我们把运输层的分组称为报文段 ( segment ) 。
-
网络层
因特网的网络层负责将称为数据报 ( datagram ) 的网络层分组从一台主机移动到另一台主机 。 在一台源主机中的因特网运输层协议 ( TCP 或 UDP) 向网络层递交运输层报文段和目的地址 , 就像你通过邮政服务寄信件时提供一个目的地址一样 。 因特网的网络层包括著名的网际协议 IP, 该协议定义了在数据报中的各个字段以及端系统和路由器如何作用于这些字段 。 IP 仅有一个 , 所有具有网络层的因特网组件必须运行IP。因特网的网络层也包括决定路由的路由选择协议, 它根据该路由将数据报从源传输到目的地 。 因特网具有许多路由选择协议 。
-
链路层
因特网的网络层通过源和目的地之间的一系列路由器路由数据报 。为了将分组从一个节点 ( 主机或路由器 )移动到路径上的下一个节点 ,网络层必须依靠该链路层的服务。 特别是在每个节点 ,网络层将数据报下传给链路层 ,链路层沿着路径将数据报传递给下一个节点 。 在该下一个节点 ,链路层将数据报上传给网络层 。链路层的例子包括以太网 、 WiFi 和电缆接入网的 DOCSIS 协议 。 因为数据报从源到目的地传送通常需要经过几条链路, 一个数据报可能被沿途不同链路上的不同链路层协议处理 。例如 , 一个数据报可能被一段链路上的以太网和下一段链路上的 PPP 所处理 。 网络层将受到来自每个不同的链路层协议的不同服务。 在本书中 , 我们把链路层分组称为帧 ( frame) 。
-
物理层
虽然链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中的一个个比特从一个节点移动到下一个节点 。 在这层中的协议仍然是链路相关的, 并且进一步与该链路( 例如 ,双绞铜线 、单模光纤)的实际传输媒体相关。
-
-
OSI 模型
详细地讨论过因特网协议栈后 , 我们应当提及它不是唯一的协议栈 。 特别是在 20 世纪 70 年代后期 , 国际标准化组织 ( ISO) 提出计算机网络围绕 7 层来组织,称为开放系统第互连 ( OSI) 模型 。
显示在图 1-23b 中的 OSI 参考模型的 7 层是 : 应用层 、 表示层 、会话层 、 运输层 、 网络层 、 数据链路层和物理层 。 这些层次中 , 5 层的功能大致与它们名字类似的因特网对应层的功能相同。 所以 , 我们来考虑 0SI 参考模型中附加的两个层 , 即表示层和会话层 。 表示层的作用是使通信的应用程序能够解释交换数据的含义。 这些服务包括数据压缩和数据加密 ( 它们是自解释的) 以及数据描述(这使得应用程序不必担心在各台计算机中表示 /存储的内部格式不同的问题) 。会话层提供了数据交换的定界和同步功能, 包括了建立检查点和恢复方案的方法 。
1.5.2 封装
图 1 ・ 24 也说明了一个重要概念 : 封装 ( encapsulation ) 0 在发送主机端, 一个应用层报文 ( application-layer message)( 图 1 -24 中的 M) 被传送给运输层 。 在最简单的情况下,运输层收取到报文并附上附加信息 ( 所谓运输层首部信息 , 图 1-24 中的 H1, 该首部将被接收端的运输层使用 。 应用层报文和运输层首部信息一道构成了运输层报文段 ( transport-layer segment) 。运输层报文段因此封装了应用层报文 。 附加的信息也许包括了下列信息:允许接收端运输层向上向适当的应用程序交付报文的信息 ; 差错检测位信息 ,该信息让接收方能够判断报文中的比特是否在途中已被改变。 运输层则向网络层传递该报文段 ,网络层增加了如源和目的端系统地址等网络层首部信息 ( 图 1-24 中的 Hn, 生成了网络层数据报 ( network-layer datagram) 。 该数据报接下来被传递给链路层 ,链路层 (自然而然地 )增加它自己的链路层首部信息并生成链路层帧 ( link -layer frame) 。 所以我们看到 , 在每一层 , 一个分组具有两种类型的字段 :首部字段和有效载荷字段( payload field ) 。有效载荷通常是来自上一层的分组 。