计算机科学导论(5):计算机网络

计算机科学 专栏收录该内容
7 篇文章 0 订阅

原文链接:计算机科学导论(5):计算机网络 | 远行的舟

参考:① 纪录片 《互联网时代》 ② 《计算机科学导论》 ③ 《TCP/IP 入门经典》 ④ 维基百科 ⑤ 阮一峰老师博客 ⑥ 哈尔滨工业大学阿里巴巴技术联盟互联网笔试面试整理 ⑦ 《HTTP 权威指南》

1776 年 3 月,瓦特制造的第一台实用性蒸汽机在英国波罗姆菲尔德煤矿点火,照亮了人类生活的一个新时代。成全了瓦特的大英帝国,凭借瓦特们提供的能量,在全球殖民时代称霸两百年。追赶隆隆作响蒸汽机的脚步,欧洲列强们以不同的态度,谱写了自己不同的命运。在人类工业革命的战场上最终凯旋的法国曾经以高于英伦岛数倍的薪金同时雇佣两万名英国技工,创造了弱国跻身列强奇迹的德国不仅开了以国家力量培训新技术人才的先河,也曾经有组织地针对英国盗取图纸和零件,在人类国家竞争史上创生了工业间谍的词汇。高举着哥伦布的风帆,在全球贸易中曾经独占鳌头的西班牙却在拥有人类一半以上黄金和白银的富足中迷醉了,虽然与英伦三岛近在咫尺,却在远隔大西洋的美国铺筑商业铁路二十年后才在巴塞罗那铺下第一根铁轨,始终不曾跨入工业强国的门槛。瓦特的蒸汽机,作为一项划时代的新技术,是试金石,是镜子,它甄别了人类所有生存集团参与竞争的品质,也映照出态度不同的国家此后数百年的兴衰沉浮。20 世纪中期,人类发明创造的舞台上,降临了一个不同凡响的新事物,众多学者认为,这是人类另一项可以与蒸汽机相提并论的伟大发明。这项可能创生新时代的事物,叫作互联网 (internet) ——《互联网时代》

正如我们很难想象计算机从我们身边彻底消失后的情景,我们也很难想象互联网从我们生活中消失后,我们的生活将是怎样的一番场景。计算机网络技术带来的由多个网络互相连接而成的互联网 (internet) 以及作为今天最大互联网的因特网 (Internet),不仅为我们生活的方方面面带来了无尽的便利,也催生了大数据、云计算、物联网等众多新兴概念。一个时代的机遇正在呼唤着我们,我们理应带着自信的笑容拥抱这个崭新的时代,而要成为这个新时代的弄潮儿,计算机网络技术就必须成为我们知识版图中最基础、最重要的一部分。本章,我们将从计算机网络技术的发展历史讲起,依次介绍网络通讯分层协议 TCP/IP 协议族的应用层、传输层、网络层、数据链路层和物理层,展示源主机与目标主机之间通信的基本过程就是:数据通过源主机各层的封装后,经由各种传输介质传送到目的地,再通过目标主机各层的解封装还原成原始数据。值得注意的是:计算机网络技术是一个颇为复杂的系统,本章只能算得上一个初步的介绍,其中的各种技术细节,笔者将在系统学习完计算机网络后于专题文章中再做讨论,而这应该是许久之后的事情了。

5.1 计算机网络技术的历史

北京时间 1957 年 10 月 5 日凌晨 3 时 28 分,人类历史上第一颗人造地球卫星在前苏联的拜科努尔航天中心发射升空,这颗名叫 “史伯尼克”,意为 “旅行同伴” 的八十三公斤的小星星,成为人类居住地第一个人工伙伴。5 天之后的记者招待会上,时任美国总统艾森豪威尔 (Dwight D.Eisenhower, 1890.10.14——1969.03.20) 公开表达了对国家安全和科技水平的严重不安,他说:“这个国家必须在国家生活中给科学技术和教育以优先权。” 两个月后,美国总统向国会提出建立高级研究计划署 (Advanced Research Projects Agency),简称 “阿帕” (ARPA),办公地点设在五角大楼内。新生的 “阿帕” 即刻获得了国会批准的五百二十万美元的筹备金及两亿美元的项目总预算,是当年中国国家外汇储备的三倍。今天,网罗了每一个人的互联网就萌芽在这项拨款中。

1966 年,日后被誉为互联网之父之一的鲍勃·泰勒 (Robert William Taylor, known as Bob Taylor, 1932.02.10——2017.04.13),成为阿帕信息技术处理办公室 (Information Processing Techniques Office, IPTO) 的第三任主任。鲍勃·泰勒当年走进五角大楼三层国防部长旁边的办公室时,他就被他的富有困扰了。阿帕资助每一个科研项目,会为研究者提供功能不同的计算机,它们动辄数十万上百万美元。泰勒的写字台旁,就环绕着三个功能不同的终端,这些庞然大物互不兼容,造成了经费的极大浪费。在纪录片《互联网时代》中,鲍勃·泰勒这样说道:“我想要做的事就是实现这些系统的在线连接,那么你在某个地区使用一台系统时,你还可以使用位于另一个地区的其他系统,就像这台系统也是你的本地系统一样。”

事实上,在这之前,将孤单的计算机连接的念头,在美国科学界酝酿已久了。1945 年,曾经参与发明第一颗原子弹和第一台电子计算机的科学家万尼瓦尔·布什 (Vannevar Bush, 1890.03.11——1974.06.28) 就提出了记忆延伸的概念,展望了关于信息检索、网络建设的可能前景。1960 年,泰勒的前任利克里德 (J.C.R.Licklider, 1915.03.11——1990.06.26) 也在 “Transactions on Human Factors in Electronics” 上发表了题为 “人机共生” (Man-Computer Symbiosis) 的文章,预言人们通过机器的交流,将变得比人与人面对面的交流更为有效。

1966 年春,泰勒迈出了实现这些设想的第一步,他走进阿帕署长赫兹菲尔德的办公室,提出由阿帕出面建构一个小型的实验网络。简短 20 分钟的交谈,泰勒离开署长办公室的时候手中已经握有一百万美元和送行的尾音。

谁来花这笔钱呢,泰勒心中的人选是唯一的,那就是时年 29 岁,虽不善交往却名声显赫的计算机天才拉里·罗伯茨 (Lawrence G.Roberts, 1937.12.21——)。泰勒以优厚的条件发出邀请时,他正在为林肯实验室两台不同的计算机之间的沟通进行实验。拉里·罗伯茨以 “不想做管理,只想搞技术” 为由拒绝了泰勒的邀请,此后的十个月中,泰勒每个月都会给罗伯茨打一次电话,但每次得到的回答都是相同的。后来泰勒逐渐了解到阿帕为林肯实验室提供了 51% 的资助,他请求他的老板打电话给林肯实验室,告诉他们:如果拉里·罗伯茨能来阿帕任职的话,将会为林肯实验室和拉里·罗伯茨本人带来最大的好处。在纪录片《互联网时代》中,拉里·罗伯茨说:“我是被‘胁迫’过来的,但是最后的结果是不错的。”

两周后,被“胁迫”到五角大楼的罗伯茨是这样体现泰勒的眼光的。罗伯茨用秒表对五角大楼内部所有走廊进行了测量,计算出各个办公室间最快的行走路线,人们戏称为“拉里路线”。寻找联结计算机的“拉里路线”,罗伯茨和一个时代的人类精英们在平坦和曲折中跋涉了一年半的时间。唐纳德·戴维斯 (Donald Watts Davies, 1924.06.02——2000.03.28) 保罗·巴兰 (Paul Baran, 1926.04.29——2011.03.26) 和伦纳德·克兰罗克 (Leonard Kleinrock, 1934.06.13——) 带来了作为当今网络通讯重要基础的 “分组交换/包交换” (packet switching) 理论,罗伯特·卡恩 (Robert Elliot Kahn, 1938.12.23——) 和温顿·瑟夫 (Vint Cerf, 1943.06.23——) 带来了后来被确定为网络通讯国际标准的 TCP/IP 协议族 (Internet protocol suite)。这些杰出的大脑,在碰撞中迅速达成了共识,中心是靠不住的,他们必须在革面性的分布中寻找前景,他们描绘自己构想的互联网,来源于人类经验中,存在了数千年的“渔网”。在纪录片《互联网时代》中,拉里·罗伯茨这样说道:“我们的观点是一致的,那就是分布式网络,因为如果你建立一个中心节点,把所有机器连起来,那么中心节点总是会出问题,中心节点会过载并崩溃,因为流量过大,支持不了,我们不能建造那样的网络。如果今天的因特网是中心节点式的,那么我们的中心节点,需要美国整个国家那么大。”

分组交换/包交换 (packet switching):在网络上,信息不是点对点的整体传输,而是把不论怎样规模的信息,分切成一个个轻巧的碎片,让它们在网状的通道里,自由选择最快捷的路径 (如今这个工作由路由器完成),在到达目的地后自动组合汇聚,还原成完整信息。

1969 年 10 月 29 日 22 时 30 分,聪明而辛勤的人们,终于来到了这一历史性的时刻。克兰罗克和助手在加州大学洛杉矶分校 (UCLA) 的房间里落座,另一端,斯坦福研究所研究员比尔·杜瓦在 500 多公里之外等待着他。事实上落座历史关头的人们,表达的雄心极其有限,他们只准备以新时代的方式,从洛杉矶向斯坦福传递一个包含五个字母的单词 LOGIN,意思是 “登录”。克兰罗克说:“我们键入 L,我们对比尔说,L 有了么?他说,有了;输入 O,有 O 了么?有了;输入 G,有 G 了么?死机了。” 仪表显示传输系统突然崩溃,通讯无法继续进行,世界上第一次互联网络的通讯试验仅仅传送了两个字母 “LO”,然而这两个简简单单字母的传递成功却标志着互联网正式诞生了,这不仅是属于分布式和包交换的 “L” 和 “O”,也是孕育大数据和云计算的 “L” 和 “O”,更是开辟人类社会崭新天地的 “L” 和 “O”.

最初的阿帕网,只在四个大学设立了它的节点。一年后阿帕网扩大到十五个节点,众多的计算机跑步般被编织人网,平均每二十天,就有一台大型计算机登录网络。1973年,阿帕网跨越大西洋利用卫星技术与英国、挪威实现连接,世界范围的登录开始了。

人类科学技术的飞速发展,为互联网出现准备了充足的条件,但是整个人类的观念意识,并没有做好迎接未来互联网的心理准备。不同的国家,不同的领域,一个国家内不同的地区,画地为牢的小圈子一个个出现,这些或被称为科研网,或被成为校园网,或被称为法国网英国网的网络们,如同十六世纪的欧洲大陆,公侯遍地,如何让这些操着不同语言,遵循着不同戒条的邦国,敞开门扉,互相接纳,形成统一的网络-互联网,需要一个规范电子设备如何连入,数据如何传输的共同标准。 人的集团之间的协商,总是比人与机器的协商,耗费的成本更高,历时十年,在众多各有坚持的网络通讯协议中,阿帕的 TCP/IP 协议族最终胜出。这里所耗费的时间,是发明计算机互联技术所用时间的三倍。

1983 年 1 月,TCP/IP 协议族 (Internet protocol suite) 成为人类至今共同遵循的网络通讯标准。同一年,原本意义上的阿帕网也寿终正寝,依照美国法律,所有政府出资的项目,因体现着纳税人的权利,都必须由纳税人分享,因此大量年轻科学家们蜂拥而入,担心军事机密安全问题的美国军方,从阿帕网分离出来,建立了自己的军网,去那里从事他们感兴趣的事情。与此同时,阿帕网也更名为因特网,其资金来源变成了美国国家科学基金会。

1987 年 9 月 20 日 20 时 55 分,一封以英德两种文字书写,意为 “跨越长城走向世界” 的电子邮件,依据 TCP/IP 协议从中国传到了德国,中科院高能物理所成为中国第一个接入因特网的机构。

获得了全球共同语言的互联网,在此后相当长的时间里,并不属于普通人,它仍然蜷缩在专业人士的圈子,与普通公众天高地远。带领亿万人跨越山峦的英雄叫蒂姆·伯纳斯-李 (Timothy John Berners-Lee, 1955.06.08——)。拉里·罗伯茨要实现的是不同电脑之间的连接,而伯纳斯-李让电脑连接了所有人。

1989 年,蒂姆·伯纳斯·李发明万维网 (World Wide Web)和超文本传输协议(HTTP),这是一个划时代的创举,网页网站等概念以及网页浏览器随之出现,于是全世界属于亿万普通人的登录开始了。伯纳斯·李没有为他的发明申请专利,2012 年伦敦奥运会开幕式上,伯纳斯·李在他当年发明万维网的电脑上敲了这样一句话:“this is for everyone”,这是献给所有人的。如果伯纳斯·李为他的发明申请专利,他将成为今天世界上最富有的人,他放弃了,他成为了精神上最富有的人。

1994 年 4 月 20 日,中国实现与因特网的全功能连接,成为接入国际互联网的第 77 个国家。

让我们记住这些为计算机网络技术的发明与发展作出杰出贡献的人们,他们是:逝世 1 年的鲍勃·泰勒、现年 81 岁的拉里·罗伯茨、逝世 18 年的唐纳德·戴维斯、逝世 8 年的保罗·巴兰、现年 80 岁的伦纳德·克兰罗克罗伯特·卡恩、现年 75 岁的温顿·瑟夫以及现年 63 岁的蒂姆·伯纳斯-李。正是许许多多如同他们这样的人类精英们以及其他许许多多普普通通的科学家与工程师的共同努力,才有了我们今天如此便利与美好的生活。

5.2 TCP/IP 协议族

在谈论计算机网络时,我们会经常听到一个专有名词:协议 (protocol). 那什么是协议呢?协议就是通信双方以及通信所需的所有中间设备必须遵守的信息加工与还原规则。你可能会问:为什么信息需要加工与还原呢?当两人面对面交流信息时,信息的确不需要被加工,当然也就不需要被还原。然而当两个人远距离交流信息时,比如 A 通过写信的方式与 B 进行交流时,如果 A 不把需要传递的信息写在信纸上,不把信纸封装在信封里,信封上不写上必要的收件人和寄件人信息,如果 B 不去邮局领取这封信件,不拆封信封然后从中取出信纸,不认真读信纸上的文字,上述提到的几个步骤,但凡有一个没有做到,那么 A 与 B 之间的通信就将以失败告终。上述 A 要做的这些事情可以视作对信息的加工,而 B 要做的这些事情可以视作对信息的还原。此外,这些信息的加工与还原必须遵循统一的规则,否则通信也将以失败告终,例如,如果 A 这边的邮局默认信封上应先写收件人信息、后写寄件人信息,而 B 这边的邮局默认信封上应先写寄件人信息、后写收件人信息,那么 A 写的这封信可能在到达 B 这边的邮局后会被自动返回给 A 这边的邮局,于是双方的通信就进行不下去了。

当通信比较简单时,信息的加工与还原只涉及一个步骤,此时只需要一条简单的协议就可以了,然而当通信变得复杂时,信息的加工与还原就会涉及多个步骤,就需要多条协议了。例如如果 A 与 B 希望他们的信件即便被拦截也不会泄露信息的话,那么他们之间的通信将不仅需要规定如何收发信件的协议,还需要一个如何对原始信件进行加密和对加密信件进行解密的协议。多条协议通常对应于信息加工与还原的多个步骤,每个步骤对应一条或多条协议,于是就出现了协议分层的概念,图 5-1 有助于我们理解这一概念。

图 5-1 一个三层协议

计算机之间的通信就是一个涉及多个步骤的信息加工与还原过程,这些过程遵循的协议族自上而下地被分为五层应用层 (application layer)、传输层 (transport layer)、网络层 (network layer)、数据链路层 (data link layer) 和物理层 (physical layer),这些协议族被称为因特网协议族 (Internet protocol suite),这个协议族里面包含有两个基础性的协议:位于传输层的传输控制协议 (Transmission Control Protocol, TCP) 和位于网络层的网际协议 (Internet Protocol, IP),因而因特网协议族通常被人们称之为 TCP/IP 协议族或直接称为 TCP/IP 协议。图 5-2 展示了计算机 A 经由两台交换机、一台路由器与计算机 B 进行通信时各个设备涉及的协议分层。

图 5-2 通过因特网通信

我们将计算机 A 称为源主机,计算机 B 称为目标主机。要实现源主机 A 中应用程序与目标主机 B 中应用程序间通信的任务,大致需要如下几个步骤:

  • 源主机 A 依据应用层相关协议将数据封装为消息 (message),消息由头(header)和数据组成,头中包含应用程序的名称(name)等信息;
  • 源主机 A 依据传输层相关协议将消息封装为 TCP 分段 (TCP Segment) 或 UDP 数据报(UDP Dataframe),TCP 分段 / UDP 数据报由头(header)和消息组成,头中包含应用程序的端口(port)等信息;
  • 源主机 A 依据网络层相关协议将 TCP 分段 / UDP 数据报封装为 IP 数据报 (IP Dataframe),IP 数据报由头(header)和 TCP 分段 / UDP 数据报组成,头中包含 IP 地址等信息;
  • 源主机 A 依据数据链路层相关协议将 IP 数据报封装为 (Frame),帧由头(header)和 IP 数据报组成,头中包含 MAC 地址等信息;
  • 源主机 A 依据物理层相关协议将帧转换为可用于传输的电磁信号,电磁信号随后被传到交换机 1;
  • 交换机 1 依据物理层相关协议将电磁信号转换为帧;
  • 交换机 1 依据数据链路层相关协议将帧拆分为 IP 数据报和头部;
  • 交换机 1 对头部信息作出修改后依据数据链路层相关协议将 IP 数据报封装为新的帧;
  • 交换机 1 依据物理层相关协议将新的帧转换为电磁信号,电磁信号随后被传到路由器;
  • 路由器依据物理层相关协议将电磁信号转换为帧;
  • 路由器依据数据链路层相关协议将帧拆分为 IP 数据报和头部;
  • 路由器依据网络层相关协议将 IP 数据报拆分成 TCP 分段 / UDP 数据报和头部;
  • 路由器进行路由,它依据头部信息为其选择最快传递路径;
  • 路由器对头部信息作出修改后依据网络层、数据链路层相关协议将 TCP 分段 / UDP 数据报封装为新的 IP 数据报,将新的 IP 数据报封装为新的帧;
  • 路由器依据物理层相关协议将帧转换为电磁信号,电磁信号随后被传到交换机 2;
  • 交换机 2 依据物理层相关协议将电磁信号转换为帧;
  • 交换机 2 依据数据链路层相关协议将帧拆分为 IP 数据报和头部;
  • 交换机 2 对头部信息作出修改后依据数据链路层相关协议将 IP 数据报封装为新的帧;
  • 交换机 2 依据物理层相关协议将新的帧转换为电磁信号,电磁信号随后被传到目标主机 B;
  • 目标主机 B 依据物理层相关协议将电磁信号转换为帧;
  • 目标主机 B 依据数据链路层相关协议将帧拆分为 IP 数据报和头部;
  • 目标主机 B 依据网络层相关协议将 IP 数据报拆分为 TCP 分段 / UDP 数据报和头部;
  • 目标主机 B 依据传输层相关协议将 TCP 分段 / UDP 数据报拆分为消息和头部;
  • 目标主机 B 依据应用层相关协议将消息拆分为数据和头部,应用程序获得数据,通信结束。

上述步骤只是对图 5-2 所示两台计算机之间通信步骤的一个大致描述,计算机之间实际的通信过程比这个简单描述要复杂得多。另外,非常抱歉地是,由于笔者知识有限,这样的简单描述也可能还存在不少错误或不妥之处。但笔者想说的是:虽然计算机实际通信过程是复杂的,但其背后蕴含的基本思想其实并不复杂,正如我们在之前提到过的,源主机与目标主机之间通信的基本过程就是:数据通过源主机各层的封装后,经由各种传输介质传送到目的地,再通过目标主机各层的解封装还原成原始数据。 此外,对于上述步骤,还有一点说明,那就是:我们寄一封信件需要寄件人和收件人的地址,同样地,在计算机通信的过程中,也需要地址标识,才能让信息沿着正确的方向传递。上述步骤中提到的名称、端口、IP 地址、MAC 地址等概念,就是应用层、传输层、网络层和数据链路层分别对应的通信地址。下面我们将依次对 TCP/IP 协议族中各层的基本功能及其涉及的部分协议作简要介绍。

5.2.1 应用层

应用层是协议族中的最高层,它接受传输层协议提供的服务,但它不向其他协议层提供服务。因此,一个应用层的协议可以轻易被添加或去除。应用层的这种灵活性使得新的协议层出不穷,我们很难说清楚应用层现有的协议数目。应用层的协议与应用程序紧密相关,应用程序按照应用层协议的规定向用户提供服务,应用程序之间按照应用层协议的规定在传输层之上进行数据传输和信息交流。这里我们将主要介绍与客户端-服务器模式的应用程序有关的超文本传输协议 (HyperText Transfer Protocol, HTTP)、文件传输协议 (File Transfer Protocol, FTP)、简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP)、安全外壳 (Secure Shell, SSH)、域名系统 (Domain Name System, DNS) 和动态主机配置协议(Dynamic Host Configuration Protocol, DHCP),以及与端到端模式的应用程序有关的 IP 电话协议 (Voice over Internet Protocol, VoIP)、BT (BitTorrent)。

HTTP万维网(World Wide Web, WWW / Web)信息交流的基础,它是一个作用于客户端-服务器(client-server)类型应用程序的请求-响应(request-response)协议,客户端应用程序(例如:Web 浏览器)按照 HTTP 规定发送请求,服务器应用程序(例如:Web 服务器)按照 HTTP 规定响应客户端请求,向客户端返回其请求的内容和相关信息。

万维网是因特网提供的服务之一,它可以看作由许许多多互相链接的文本、图像、音频和视频构成的庞大数据库,这些互相链接的数据被称为超媒体(hypermedia),由于历史的原因,即最早的万维网只有互联链接的文本,因此我们今天仍会习惯性地称呼超媒体为超文本(hypertext)。这些超文本有着一个更为大众熟悉的名词,那就是网页(Web page)。超文本标记语言(HyperText Markup Language, HTML)是一种用于创建网页的标准标记语言,它常与层叠样式表(Cascading Style Sheets, CSS)和 JavaScript 脚本语言一起,用来编写静态网页(注:没有后台数据库的网页)。

网页使用统一资源标识符(Uniform Resource Identifier, URI)进行区分。过去,统一资源标识符被分为统一资源定位符(Uniform Resource Locator, URL)和统一资源名(Uniform Resource Name),前者描述资源的特定位置,后者描述资源的特定名称。2001 年,因特网工程任务组(Internet Engineering Task Force, IETF)和万维网联盟(World Wide Web Consortium, W3C)不再建议使用这两个术语,从现代观点来看,位置与名称的界限不再清晰,因而官方的技术文档中建议不再区分 URL 和 URN,而统一使用 URI。但在非技术文档中,URL 仍被广泛使用。下面是 URI 的通用格式:

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

它由方案(scheme)、用户(user)、密码(password)、主机(host)、端口(port)、路径(path)、查询(query)和片段(fragment)构成,其中方案、主机和路径是最重要的 3 个部分,许多 URI 只包含这三个部分,例如该网页的 URI 就只包含 https、www.longzf.com 和 CS_intro/5/ 三个部分。下面是维基百科给出的 URI 示例:

                     hierarchical part
         ┌───────────────────┴─────────────────────┐
                     authority               path
         ┌───────────────┴───────────────┐┌───┴────┐
  http://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘  └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
scheme  user information      host     port                  query        fragment

  urn:example:mammal:monotreme:echidna
  └┬┘ └──────────────┬───────────────┘
scheme              path

2015 年,HTTP 协议已经更新到 2.0 版本,HTTP/2.0 保留了 HTTP/1.1 的大部分语义,例如请求方法、状态码乃至 URI 和绝大多数 HTTP 头部字段,但它采用了新的方法来编码、传输客户端-服务器间的数据。关于 HTTP 的更多细节,笔者后续将在专题文章中加以阐述,读者如有兴趣,也可以通过书籍或网络资源,特别是通过 IETF 发布的请求意见稿(Request For Comments, RFC)进行了解(HTTP/1.1:RFC 2616,HTTP/2.0:RFC 7540)。

FTP 是用于客户端与服务器文件传输的协议,它有着悠久的历史,最早的 FTP 客户端诞生于视窗操作系统出现之前。FTP 客户端由用户接口、控制进程和数据传输进程三部分组成,FTP 服务器由控制进程和数据传输进程两部分组成。FTP 因而有两个连接:控制连接和数据连接。控制连接在整个交互式 FTP 会话中都保持打开,它使用非常简单的通信规则,一次只需传输一行命令或一行响应;数据连接只在涉及文件传输时才会打开,由于传输数据的多样性,它需要较复杂的通信规则。关于 FTP,这里不做更多介绍了,FTP 虽还没有被淘汰,但在实际中的使用已经很少了。关于 FTP 是否已经过时的讨论可参见知乎文件传输协议(FTP)必将消亡一文则列出了 FTP 为人诟病的五个缺点。对 FTP 是否会被淘汰,笔者更倾向于持肯定态度。此外,还有一点说明,那就是关于 FTP 不安全的问题,现在已有更安全的 FTPS(FTP with SSL/TLS)和 SFTP(SSH File Transfer Protocol)可以考虑。

SMTP 是用于电子邮件传输的协议,目前最新的 SMTP 见 RFC 5321,邮件服务器和其他信息传输代理按照 SMTP 的规定发送和接受邮件信息,像 Microsoft Exchange 这样的专业系统、IBM Notes 以及如 Outlook.com、Gmail 和 Yahoo!Mail 这样的 Web 邮件系统可能在内部使用非标准协议,但它们在向外部发送邮件或从外部接受邮件时,均使用 SMTP。SMTP 通常在端口 25 使用传输控制协议(TCP,传输层重要的协议,将在下一节中介绍)。客户端仅在向邮件服务器发送信息时使用 SMTP,如果要检索信息,需要第三代邮局协议(Post Office Protocol version 3, POP3)和因特网消息访问协议(Internet Message Access Protocol, IMAP),二者的区别可参考网易 163 服务中心。一些专用客户端还使用专用协议,例如 Microsoft Exchange 使用 Exchange ActiveSync 检索信息。

SSH 是在非安全网络运行网络服务的加密网络协议,SSH 的典型应用包括远程命令行登录和远程命令执行,但任何网络服务均可使用 SSH 保证安全性。基于客户端-服务器模式,通过连接 SSH 客户端应用程序和 SSH 服务器,SSH 为非安全网络提供安全通道。SSH 有两个互不兼容的版本:SSH-1 和 SSH-2,SSH-1 因为其安全漏洞已被弃用。SSH 的标准 TCP 端口是 22,它通常被用来接入类 Unix 操作系统,当然也可接入 Windows,Windows 10 使用 OpenSSH 作为其默认的 SSH 客户端。SSH 最初是为替代 Telnet (最早的远程登录协议之一,现在已很少使用)和非安全远程 Shell 协议(例如:Berkeley rlogin、rsh、rexec 协议)而开发的。尽管 SSH 的加密试图在非安全网络中提供完整和机密数据,但斯诺登泄露事件表明国家安全局(NSA)可以破解 SSH,从而读取 SSH 会话的内容。2017 年 7 月 6 日,非营利组织维基解密确认美国中央情报局已经开发出能够在 Windows 或 Linux 操作系统中窃取 SSH 会话的工具。SSH 由传输层协议、用户认证协议和连接协议三大部分构成,关于 SSH 的细节见 RFC 4251

DNS 将域名(HTTP URI 中的主机名)转换为 IP,下图展示了 TCP/IP 协议族如何利用域名系统客户端和域名系统服务器将主机名映射到 IP 地址上。

图 5-3 DNS

域名级别从右至左依次递减,例如域名 www.longzf.com 的一级域名是 com,它属于一般域中的标签,通常用来描述商业机构。除 com 外,一般域还有 13 个可能标签,例如:edu(教育机构)、gov(政府机构)、info(服务提供商)、net(网络供应商)、org(非盈利组织)。除了一般域外,还有国家域,国家域使用两个字符组成的国家缩写,例如 us(美国)、cn(中国)。关于 DNS 的细节,参见维基百科列出的 RFC 文档列表

DHCP 是一个局域网(LAN)的网络协议,其下的传输层协议使用 UDP(注:UDP 是传输层重要协议之一,将在下一节中介绍)。它主要用来给局域网中的计算机动态地分配 IP 地址、子网掩码、默认网关、DNS 服务器地址等网络配置信息。在知乎问题 NAT 和 DHCP 的区别是什么?中,有回答者写道:TCP/IP 协议之所以最终打败对手,傲视群雄,一个不得不提的协议就是 DHCP。如果没有 DHCP,TCP/IP 协议在初始化过程中,需要用户手动提供 IP 地址、子网掩码、默认网关、DNS 服务器地址,以此来完成各个协议模块的初始化工作,而这对于广大用户来说,绝对是一种很糟糕的体验。关于 DHCP 的细节,参见维基百科列出的 RFC 文档列表

网关(gateway):在传统的 TCP/IP 术语中,网络设备只分成两种:网关和主机。网关能在网络间传递数据包,但主机不能。在主机(又称终端系统)中,数据包需经过 TCP/IP 四层协议处理,但是在网关(又称中介系统)只需要到达网际层,决定路径之后就可以转送。在当时,网关与路由器(router)还没有区别。在现代网络术语中,网关与路由器的定义不同。网关能在不同协议间移动数据,而路由器是在不同网络间移动数据,相当于传统所说的 IP 网关。

子网掩码(subnet mask):它是一种用来指明一个 IP 地址的哪些位标识的是主机所在的网络地址以及哪些位标识的是主机地址的位掩码,与 IPv4 地址一样,子网掩码由 32 位二进制数构成。对 IP 地址中表示主机所在网络地址的位,其对应的子网掩码位为 1,否则对应的子网掩码位为 0。例如:当子网掩码为 “11111111 11111111 11111100 00000000”(255.255.252.0)且 IP 地址为 “10101100 00010000 00101101 00110111”(172.16.45.55)时,IP 地址的前 22 位代表主机所在网络地址,后 10 位代表主机地址。

网络地址转换/网络掩蔽/IP掩蔽(Network Address Translation, NAT):它是一种在 IP 数据包通过路由器或防火墙时重写来源 IP 地址或目的 IP 地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有 IP 地址访问因特网的私有网络中。它是一个方便且得到了广泛应用的技术。当然,NAT 也让主机之间的通信变得复杂,导致了通信效率的降低。NAT 是作为一种解决 IPv4 地址短缺、避免保留 IP 地址困难的方案而在 1990 年代中期流行起来的,今天 NAT 成了众多家庭和小型办公室网络连接上的路由器的一个标准特征。上面在给子网掩码举例时提到的 IP 地址就是局域网中的一个私有 IP,像 10.0.0.0 ~ 10.255.255.255、127.0.0.0 ~ 127.255.255.255、127.16.0.0 ~ 172.31.255.255 和 192.168.0.0 ~ 192.169.255.255 是不作为 IP 地址使用的,它们是为特殊应用保留的。

VoIP 是一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行通信。其他非正式的名称有 IP 电话(IP telephony)、互联网电话(Internet telephony)、宽带电话(broadband telephony)以及宽带电话服务(broadband phone service)。VOIP 涉及众多协议,其中一个重要的且属于应用层的点对点协议是会话发起协议(Session Initiation Protocol, SIP),SIP 最早由 Henning Schulzrinne 和 Mark Handley 于 1996 年所设计. SIP 的设计目标之一是提供类似公用交换电话网(PSTN)中调用处理功能的扩展集。在这个扩展集中,实现类似日常电话的操作:拨号,振铃,回铃音或者忙音,只是实现方式和术语有所不同。关于 SIP 及 VoIP 的更多细节,已超出笔者目前所能理解的范围,读者如有兴趣请参考维基百科

BT 是用在对等网络中文件分享的网络协议程序。和点对点(point-to-point)的协议程序不同,它是用户群对用户群(peer-to-peer)的,而且用户越多,下载同一文件的人越多,下载该文件的速度越快。与 BT 紧密相关的常用技术是分布式哈希表(Distributed Hash Table, DHT),除 BT 外,分布式数据结构(DDS)、内容分布式系统(CDS)和域名系统都使用了 DHT 技术。关于 BT 的更多细节参见维基百科

5.2.2 传输层

传输层的主要功能是提供进程间的通信(进程是操作系统中的概念,我们将在下章介绍),它为应用程序访问网络提供接口,它提供多路传输(从多个程序接受数据)和多路分解(将数据发给多个程序)功能,并拥有流控制和错误检测等功能以保证数据传输的质量。上文提到,端口是传输层的地址标识,在 TCP/IP 协议族中,端口号是一个位于 0 0 0 2 16 = 65535 2^{16} = 65535 216=65535 之间的整数,如需了解各端口号对应的应用层协议/应用程序,请访问 TCP/UDP端口列表。传输控制协议(TCP)和用户数据报协议(UDP)是传输层的两大主要协议,二者均为应用程序提供了访问网络的接口,均支持多路传输/多路分解功能,它们的区别在于:TCP 提供了完善的错误控制和流控制,能够确保数据传输的质量,被称为面向连接的协议;而 UDP 只提供了非常基本的错误检测,无法确保数据传输的质量,被称为无连接的协议。下面依次介绍这两个协议的一些具体内容。

在计算机网络的世界里,人们通常用 “三次握手、四次挥手” 来形象地描绘基于 TCP 协议建立连接和关闭连接的过程。在详细讲述 TCP 三次握手与四次分手之前,我们首先来看一下 TCP 分段的构成,特别是 TCP 分段头部的构成。表 5-4 是 TCP 协议规定的 TCP 分段的格式。

表 5-4 TCP 分段

可以看到,TCP 分段由头部和数据构成,其中头部包含源端口(source port, 16 位)、目标端口(destination port, 16 位)、序列号(sequence number, 32 位)、确认号(acknowledgment number, 32 位)、数据偏移(data offset, 4 位)、保留(reserved, 6 位)、控制标记(flags / control bits, 6 位)、窗口大小(window size, 16 位)、校验和(checksum, 16 位)、紧急指针(urgent pointer, 16 位)和选项(options, 32i 位, i=0,1,…,10)等部分。下面列出这些部分的具体功能:

  • 源端口(source port, 16 bits):源主机上分配给应用程序的端口号

  • 目标端口(destination port, 16 bits):目标主机上分配给应用程序的端口号

  • 序列号(sequence number, 32 bits):SYN = 0 时表示 TCP 分段第一个字节的序列号,用于标识该 TCP 分段的位置,方便 TCP 分段在接收端按顺序重组。SYN = 1 时表示初始序列值(ISN),用于初次建立连接时对序列号进行同步

  • 确认号(acknowledgment number, 32 bits):用于确认已经接受到的 TCP 分段,其值为已经接受到的 TCP 分段最后一个字节的序列号加 1,或者说是目标主机即将接受的下一个序列号

  • 数据偏移(data offset, 4 bits):TCP 分段头部的长度,其单位为 32 bits

  • 保留(reserved, 6 bits):为 TCP 将来的发展预留的空间,目前全为 0

  • 控制标记(control bits, 6 bits):用于表示一些特殊信息

  • URG:UGR = 1 表示当前分段是紧急的

  • ACK:ACK = 1 表示确认号有效

  • PSH:PSH = 1 表示让 TCP 软件把目前收到的全部数据都通过管道传递给接受程序

  • RSI:RSI = 1 表示重置连接

  • SYN:SYN = 1 表示序列号将被同步

  • FIN:FIN = 1 表示主机已没有数据需要发送了

  • 窗口大小(window size, 16 bits):它是源主机的序列号可以超过最后一个已确认序列号的最大数量(注:发送方不必等待每个分段被确认接收后才发送下一个分段,但也不能不加限制的发送过多分段),是一个用于流控制的参数,能够保证数据传输量不会超过目标主机的数据接收能力

  • 校验和(checksum, 16 bits):用于检验分段的完整性,目标主机会比较由接受到的分段计算出的校验和与该校验和是否一致

  • 紧急指针(urgent pointer, 16 bits):这是一个偏移量指针,指向紧急信息开始的序列号

  • 选项(options, 0 ~ 320 bits):一些设置项,其长度必须为 32 的整数倍,如果长度不足就在后面填充 0

可以看到:TCP 头部长度为 20~60 字节不等。对于数据的长度,TCP 协议虽未作出规定,但实际当中还是有限制的。拿以太网(见 5.2.4 数据链路层)为例,由于以太网帧中数据部分最长为 1500 字节,IP 数据报的头部最短为 20 字节,TCP 分段的头部最短为 20 字节,因此 TCP 分段的数据部分最长为 1460 字节,也就是说:经由以太网,一个 TCP 分段最多传送约 1.426 KB 左右的数据信息。下面我们阐述 TCP 连接 “三次握手,四次挥手”(three-way handshake, four-way handshake)的具体过程(修改自由哈尔滨工业大学阿里巴巴技术联盟 HIT-Alibaba 整理的互联网笔试面试知识)。

三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时,将触发三次握手,图 5-5 向我们展示了 TCP 三次握手的步骤:

  • 第一次握手 (SYN = 1, ACK = 0, 序列号 = x):客户端向服务器发送一个控制标记 SYN = 1,ACK = 0,序列号 = 客户端初始序列号(ISN)的包,发送完毕后,客户端进入 SYN_SEND 状态。
  • 第二次握手 (SYN = 1, ACK = 1, 序列号 = y, 确认号 = x + 1):服务器收到包后,向客户端发送一个控制标记 SYN = 1,ACK = 1,序列号 = 服务器 ISN,确认号 = 客户端序列号 + 1 的包。发送完毕后,服务器进入 SYN_RCVD 状态。
  • 第三次握手 (SYN = 0, ACK = 1, 序列号 = x + 1, 确认号 = y + 1):客户端收到服务器确认包后,向服务器发送一个控制标记 SYN = 0,ACK = 1,序列号 = 服务器确认号,确认号 = 服务器序列号 + 1。发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 三次握手结束。

图 5-5 建立 TCP 连接的三次握手

TCP 的连接的拆除需要发送四个包,因此称为四次挥手,也叫做改进的三次握手。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作,图 5-6 向我们展示了 TCP 四次挥手的步骤:

  • 第一次挥手 (FIN = 1, 序列号 = x):假设客户端想要关闭连接,客户端向服务器发送一个控制标记 FIN = 1,序列号 = x 的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。发送完毕后,客户端进入 FIN_WAIT_1 状态。
  • 第二次挥手 (ACK = 1, 确认号 = x + 1):服务器收到包后,向客户端发送一个控制标记 ACK = 1,确认号 = 客户端序列号 + 1 的包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接。
  • 第三次挥手 (FIN = 1, 序列号 = y):服务器端准备好关闭连接时,向客户端发送一个控制标记 FIN = 1,序列号 = y 的包。发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个确认号。
  • 第四次挥手 (ACK = 1, 确认号 = y + 1):客户端接收到来自服务器端的关闭请求后,向服务器发送一个控制标记 ACK = 1,确认号 = 服务器序列号 + 1 的包,并进入 TIME_WAIT状态,等待可能出现的要求重传的确认包。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。客户端等待了两个最大段生命周期(2 Maximum Segment Lifetime, 2MSL)后,如果仍没有收到服务器要求重传的确认包 ,就认为服务器端已经正常关闭连接,此时客户端自己也关闭连接,进入 CLOSED 状态,TCP 四次挥手结束。

图 5-6 关闭 TCP 连接的四次挥手

下面我们介绍 UDP,相比于 TCP 分段,UDP 数据报的结构要简单太多,表 5-7 是 UDP 规定的 UDP 数据报的格式。

表 5-7 UDP 数据报

这些部分的具体功能如下:

  • 源端口(source port, 16 bits):源主机上发送数据报程序使用的端口,可不写入而设置为 0
  • 目标端口(destination port, 16 bits):目标主机上接受数据报程序使用的端口
  • 长度(length, 16 bits):UDP 数据报的长度,最小值为 8
  • 校验和(checksum, 16 bits):用于检验数据在传输过程中是否损坏

UDP 是网络广播使用的协议,广播是会被子网上全部计算机接收和处理的单个消息,如果广播采用 TCP,那么可以想象,与子网上全部计算机都建立一个 TCP 连接,会对网络性能造成严重影响。

除了 TCP 和 UDP,工作于传输层的协议还有:数据报拥塞控制协议(DCCP)、流控制传输协议(SCTP)、实时传输协议(RTP)等等。DCCP 和 SCTP 提供了 TCP 和 UDP 不具备的强化特性,RTP 提供了传输实时音频和视频的结构。

5.2.3 网络层

网络层的主要功能是提供主机间的通信,其主要协议是 IP,此外还有地址解析协议(ARP)、反向地址解析协议(RARP)、网间控制报文协议(ICMP)、边界网关协议(RGP)、路由信息协议(RIP)、开放最短路径优先(OSPF)、互联网安全协议(IPsec)等等。

IP 定义了寻址方法和数据报的封装结构,TCP 分段 / UDP 数据报依据 IP 被封装为 IP 数据报,寻址指的是如何将 IP 地址分配给各个终端节点,以及如何划分和组合子网。IP 目前有两个主要版本:IPv4 和 IPv6。

网际协议版本 4(Internet Protocol version 4, IPv4)是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署和使用的版本。IPv4 是一种无连接的协议,其工作在使用分组交换的数据链路层(如以太网)上。此协议会尽最大努力交付数据包,意即它不保证任何数据包能送达目的地,也不保证数据包能按正确顺序无重复地到达目的地。这些功能是由上层传输协议(如 TCP)实现的。IPv4 使用 32 位地址,因此地址空间中只有 2 32 = 4294967296 2^{32} = 4294967296 232=4294967296 个地址,而这远远低于世界人口的数量,再加上这些地址中有不少是为特殊用途保留的,因此当上世纪 80 年代提出 IPv4 后,人们就已经预见到:终有一天 IPv4 地址将会不够用。互联网用户的快速增长、长期在线设备的增加和移动设备数量的增长加速了 IPv4 地址枯竭问题的产生。为了延缓 IPv4 地址耗尽时刻的到来,1991 年,作为对分类网络寻址系统面临的可扩展性问题的回应,互联网工程任务组(IETE)提出路由和寻址组(Routing and Addressing Group, ROAD),1993 年,IETE 又提出网络地址转换(NAT)与无类别域间路由(CIDR)。但在 2011 年 1 月 31 日,随着互联网编号分配机构(Internet Assigned Numbers Authority, IANA)将最后 5 个顶级地址块(注:按 IP 地址第一个八位分块)分配给 5 个区域互联网注册管理机构(Regional Internet Registries, RIR)后,IANA 的主要地址池已经用尽了。

到目前为止,5 个 RIR 中已经有 4 个向互联网服务提供商(ISP)分配完了所有除为 IPv6 迁移预留的地址块外的其他所有地址块,管理亚洲和太平洋地区事务的亚太网络信息中心(Asia-Pacific Network Information Centre, APNIC)于 2011 年 4 月 15 日耗尽所有可核发地址,管理欧洲、中东和中亚地区事务的欧洲 IP 网络资源协调中心(RIPE Network Coordination Centre, RIPE NCC)于 2012 年 9 月 14 日耗尽所有可核发地址,管理拉丁美洲和部分加勒比地区事务的拉丁美洲及加勒比地区互联网地址注册管理机构(Latin American and Caribbean Internet Address Registry, LACNIC)于 2014 年 6 月 10 日耗尽所有可核发地址,管理北美和部分加勒比地区事务的美洲互联网号码注册管理机构(American Registry for Internet Numbers, ARIN)于 2015 年 9 月 24 日耗尽所有可核发地址,而预计在今年(2019 年),管理非洲事务的非洲网络信息中心(African Network Information Centre, AfriNIC)也将耗尽所有可核发地址。

我们正在迎接 IPv6 时代的到来,2017 年 11 月 26 日,中共中央办公厅、国务院办公厅印发了 《推进互联网协议第六版(IPv6)规模部署行动计划》,并发出通知,要求各地区各部门结合实际认真贯彻落实。《计划》 指出:到 2018 年末,中国 IPv6 活跃用户数达 2 亿,在互联网用户中占比不低于 20%;到 2020 年末,IPv6 活跃用户数超过 5 亿,互联网用户中占比超过 50%,新增网络地址不再使用私有 IPv4 地址;到 2025 年末,中国 IPv6 网络规模、用户规模、流量规模位居世界第一,网络、应用、终端全面支持IPv6。去年(2018 年)年底,阿里巴巴宣布全面应用 IPv6,淘宝、天猫、优酷以及高德地图等多个用户过亿的应用成为国内首批落地 IPv6 技术的 APP。下面,我们介绍 IPv4 数据报和 IPv6 数据报,图 5-8,5-9 分别给出了 IPv4 数据报的构成和 IPv6 数据报的构成。

图 5-8 IPv4 数据报

IPv4 数据报头部各部分的功能如下所示:

  • 版本(version, 4 bits):IP 版本信息,IPv4 对应 0100
  • 网际头部长度(internet header length, 4 bits):IP 数据报头部的长度,其单位为 32 bits
  • 差异化服务代码点(differentiated services code point, DSCP, 6 bits):多数情况下为 0,但需要实时数据的新兴技术的出现使得 DSCP 开始发挥作用,例如:IP 电话
  • 显示拥塞通知(explicit congestion notification, ECN, 2 bits):允许在不丢弃数据包的情况下进行网络拥塞的端到端通知。ECN 是一项可选功能,它仅在两个端点都支持并愿意使用时使用,并且仅在底层网络协议支持时才有效
  • 总长度(total length, 16 bits):IP 数据报的长度,单位为字节
  • 标识(identification, 16 bits):用来唯一地表示一个消息的所有片段,当消息太大而必须将消息分成多段 IP 数据报(注:每小段 IP 数据报被称为片段,英文为 fragment)时使用,它是一个逐渐变大的数值,每产生一个片段,计数器加 1,并赋值给此字段
  • 标记(flags, 3 bits):用来标记是否划分片段,第一个位保留,设为 0,第二个位为没有片段(don’t fragment, DF),1 表示不划分片段,0 表示划分片段,第三个位为更多片段(more fragment, MF)。DF 标记可用来向那些没有资源处理片段的主机传递包,也可以用来发现传输路径的最大传输单元(Maximum Transimission Unit, MTU),发现 MTU 可通过软件或者利用诊断工具 ping 或 traceroute 实现;对于没有划分片段的包,MF 标记为 0,对于划分了片段的包,最后一个片段的 MF 标记为 0(其与无片段包的区分由 IP 数据报中的片段偏移部分实现),其余均为 1
  • 片段偏移(fragment offset, 13 bits):用来标记片段在原消息中的次序
  • 生存时间(time to live, TTL, 8 bits):这个字段避免报文在互联网中永远存在(例如陷入路由环路)。生存时间以秒为单位,在现实中,这实际上成了一个跳数计数器:它的最大值是 255,数据报经过的每个路由器都将此字段减 1,当此字段等于 0 时,数据报不再向下一跳传送并被丢弃。常规地,一份 ICMP 数据报被发回 IP 数据报发送端就说明其发送的 IP 数据报已被丢弃,这也是 traceroute 的核心原理
  • 协议(protocol, 8 bits):接受数据的协议,如 6 表示 TCP,17 表示 UDP,1 表示 ICMP
  • 头部校验和(header checksum, 16 bits):用于检验头部的有效性
  • 源地址(source address, 32 bits):IP 数据报的源 IP 地址
  • 目标地址(destination address, 32 bits):IP 数据报的目标 IP 地址
  • 选项(options):一些可选的头部设置,其长度不得大于 40 字节且其位数必须为 32 bits 的倍数,不足位补 0

差异化服务代码点(differentiated services code point, DSCP) 最初属于术语服务类型(type of service,ToS)中的一部分,ToS 是 IPv4 数据报头部的第二个字节,其最初的用途是对等待通过路由器的数据报区分优先级,然而实践中,ToS 从未在美国国防部网络外使用过,但是大量的研究工作都在关注如何有效利用这个字节,正是这些研究导致了术语 DS field 的产生。现在我们将 ToS field 重新定义为一个 8 位差异化服务域(DS field),它由一个 6 位差异化服务代码点(DSCP)和一个 2 位显示拥塞通知(ECN)组成。

IPv6 数据报主头部各部分的功能如下所示:

  • 版本(version, 4 bits):IP 版本号,这里为 0110
  • 业务类(traffice class, 8 bits):数据类别
  • 流标签(flow label, 20 bits):指派的流级别
  • 负载长度(payload length, 16 bits):确定数据的长度
  • 下一个头(next header, 8 bits):紧跟在当前头之后的头的类型
  • 跳数限制(hop limit, 8 bits):本数据包剩余的跳数
  • 源地址(source address, 128 bits):源主机 IP 地址
  • 目标地址(destination address, 128 bits):目的主机 IP 地址

图 5-9 IPv6 数据报(仅含主头)

除了主头外,IPv6 会将可选的信息添加在主头和数据之间的扩展头内,这些扩展头提供的信息可应用于特定的环境,也保证了主头能尽量的简单。IPv6 定义了如下 6 种扩展头:

  • 跳跃选项(Hop-by-Hop Option):携带传递路径中关于路由器的可选信息
  • 目标选项(Destination Option):用于目的节点的可选信息
  • 路由(Routing):用来制定数据包在传递路径上的一个或多个路由器
  • 片段(Fragment):组合分成片段的数据包所需的信息
  • 认证(Authentication):用于提供安全性和身份认证信息
  • 加密安全负载(Encrypted Security Payload):提供了加密和隐私特性

此外,IPv6 的每种头都对应一个 8 位位串,主头和扩展头中的字段——下一个头——放置的就是这个 8 位位串,即下一个头的种类信息。关于 IPv4 和 IPv6 更多细节的讨论已超出了这门导论课程的范围,感兴趣的读者可参考维基百科或其他网络资源。而关于前面提到的网络层的其他协议,特别是与内部路由器(注:与内部路由器有关的协议被统称为内部网关协议 IGP)有关的路由信息协议(RIP,正在被 OSPF 取代)、开放最短路径优先(OSPF)、与边界路由器有关的边界网关协定(BGP,是外部网关协议 EGP 的替代协议),以及与 IP 地址与 MAC 地址转换的地址解析协议(ARP)和反向地址解析协议(RARP),这里也不展开介绍了,笔者后续将在专题文章中探讨作为网络层重要功能之一的路由,实现路由功能的路由器,以及与路由有关的协议(注:一些现代路由器已不仅可以工作于网络层及其底层,而且可以工作于传输层甚至应用层)。

5.2.4 数据链路层

应用层提供应用程序间的逻辑通信,传输层提供进程间的逻辑通信,网络层提供主机间的逻辑通信,而数据链路层提供节点间的逻辑通信(注:之所以称为逻辑通信,是因为通信不是各层直接连接进行的通信)。节点指网络通信中的主机和各种中间设备,节点之间的网络不是局域网(Local Area Network, LAN)就是广域网(Wide Area Network, WAN)

局域网是一个可连接住宅,学校,实验室或办公大楼等有限区域内计算机的计算机网络。相比之下,广域网不仅覆盖较大的地理距离,而且还通常涉及固接专线(用来连接两个地区的对称电信线路)和对于互联网的链接。在历经了附加资源计算机网络(Attached Resource Computer NETwork, ARCNET)、令牌环(Token-Ring)、光纤分布式数据接口(Fiber Distributed Data Interface, FDDI)、AppleTalk 等技术后,以太网(Ethernet)和 Wi-Fi 是现今局域网中最常用的两项技术,此外,我们熟悉的蓝牙(Bluetooth)也是一种无线局域网技术。

以太网技术由施乐公司(Xerox)著名的研究机构帕罗奥多研究中心(Palo Alto Research Center, PARC)于上世纪 70 年代发明。1973—1975 年帕罗奥多研究中心开始研发以太网并申请了专利;1976年,罗伯特·梅特卡夫大卫·博格斯在 PARC 落实这项计划后发表了一份带有导向前瞻性的论文,“以太网:局域计算机网络的分布式包交换”( Ethernet: Distributed Packet-Switching For Local Computer Networks)。1976 年 Datapoint 公司开始研发 ARCNET,并于 1977 年展出。 同年即在纽约的大通曼哈顿银行开始商业试行。 帕罗奥多研究中心为现代计算机技术的发展作出了杰出贡献,除了以太网外,在这里还诞生了激光打印机(1971, Gary Starkweather)、图形用户界面(Graphical User Interface, GUI, 1973)、Smalltalk 编程语言(70 年代初)、作为 PostScript(PDF 很大程度上基于 PostScript)先驱的页面描述语言 Interpress、语音压缩技术以及世界上首台使用鼠标和 GUI 的个人计算机施乐奥托(Xerox Alto, 1973)。

SmallTalk 是基于 Simula 的一门面向对象编程语言,Simula 是上世纪 60 年代位于奥斯陆的挪威计算中心的 Ole-Johan Dahl 和 Kristen Nygaard 开发的世界上首个面向对象的编程语言,施乐帕罗奥多研究中心开发的 SmallTalk 语言极大地推动了众多计算机编程语言的诞生,包括:C++、Java、Python、Ruby 等,90 年代诞生的许多软件开发思想也得利于 Smalltalk,例如设计模式、敏捷编程和代码重构等。

IEEE 802.3 标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。下面我们介绍以太网帧,图 5-10 向我们展示了以太网帧和以太网包的结构。

介质访问层(Media Access Control, MAC)是开放式系统互联通信参考模型(Open System Interconnection Reference Model, OSI)定义的数据链路层中的一个子层,这个子层提供与网络适配器(网卡)的接口,数据链路层中另一个子层被称为逻辑链路控制(Logic Link Control, LLC),这个子层对经过子网传递的帧进行错误检测,并且管理子网上通信设备间的链路。OSI 模型将通信模型划分为七层(自顶向下排序):应用层、表达层、会话层、传输层、网络层、数据链路层和物理层。TCP/IP 协议族中的应用层对应于 OSI 模型的会话层、表达层和应用层,此外,关于 TCP/IP 协议族的分层有两种方式,一种是如本文所述的五层模型,另一种是四层模型,它将数据链路层和物理层合并称为网络访问层。

图 5-10 以太网包和以太网帧

关于以太网帧各字段的含义这里就不展开介绍了,下面我们简要介绍一下无线局域网。

无线局域网(Wireless Local Area Network, WLAN)由 IEEE 802.11 标准定义,我们耳熟能详的 Wi-Fi 就是基于 IEEE 802.11 标准的无线局域网技术,Wi-Fi 事实上并不是技术术语,它只不过是 Wi-Fi 联盟的商标名,Wi-Fi 联盟最初成立于 1999 年,其原名为无线以太网兼容联盟(Wireless Ethernet Compatibility Alliance, WECA),2002 年 10 月,WECA 正式改名为 Wi-Fi Alliance. 目前,Wi-Fi 技术已经发展到第六代,即 IEEE 802.11ax,Wi-Fi 联盟称之为 Wi-Fi 6,它又被称为高效率无线标准(High-Efficiency Wireless,HEW),是一项制定中的无线局域网标准。标准草案由 IEEE 标准协会的 TGax 工作组制定,正式标准预计将在 2019 年发布。11ax 支持 2.4 GHz 和 5 GHz 频段,向下兼容第二代至第五代 Wi-Fi 标准 11b、11g/a、11n 和 11ac。其目标是支持室内室外场景、提高频谱效率和密集用户环境下 4 倍实际吞吐量的提升。IEEE 802.11ax 设备在 2018 年国际消费电子展上被展出,最高速度达到 11 Gbit/s.

除了 Wi-Fi 外,蓝牙也是目前被广泛使用的一种无线局域网技术,目前已发展到第五代。蓝牙技术标准当前由蓝牙技术联盟负责维护,其成员已超过三万,分布在电信、计算机、网络与消费性电子产品等领域。IEEE 曾经将蓝牙技术标准化为 IEEE 802.15.1,但是这个标准已经不再使用。蓝牙技术最初由爱立信创制,技术始于爱立信公司的 1994 方案,即研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的通讯创造一组统一规则,以解决用户移动电子设备的兼容性问题。1997 年前爱立信公司以此概念接触了移动设备制造商,讨论其项目合作发展,结果获得支持。1998 年 5 月 20 日,索尼爱立信(索尼原名)、国际商用机器(IBM)、英特尔、诺基亚及东芝公司等业界龙头创立 “特别兴趣小组”(Special Interest Group,SIG),它是蓝牙技术联盟的前身,目标是开发一个成本低、效益高、可以在短距离范围内随意无线连接的技术标准。它们将这种无线连接技术命名为 Bluetooth,以纪念古代丹麦维京国王 Harald Blåtand (Harald Bluetooth, 940—981) ,他以统一了因宗教战争和领土争议而分裂的挪威与丹麦而闻名于世。

广域网(英语:Wide Area Network,缩写为 WAN),又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。接入广域网的方式分为有线接入(如:电话拨号、有线电视网络、非对称数字用户线路 ADSL、超高速数字用户线路 VDSL、光纤)和无线接入(如:移动网络/蜂窝网络、卫星网络、WiMax),其中最常见的是光纤接入蜂窝网络,蜂窝网络目前已发展到第五代,即第五代移动通信技术(5th generation mobile networks / wireless systems,5G)。

美国时间 2018 年 6 月 13 日,第三代合作伙伴计划(3rd Generation Partnership Project, 3GPP)在加利福尼亚州圣地牙哥召开会议,订下了 5G 的第一阶段国际标准 R15。5G 第二阶段国际标准 R16,预计 2019 年 12 月完成,该阶段标准将满足国际电信联盟(ITU)对 5G 的全部要求。等到第二阶段国际标准完成并冻结之后,5G 才将实现全面商用,预计时间为 2020 年 3 月。

5G 现代技术的发展由高通、华为、英特尔等公司领导,5G 基础设施的发展由爱立信、中兴通讯、思科、三星等公司领导。5G 技术可能使用的频谱属极高频(EHF),远高于一般电信业现行使用的频谱(如2.6GHz)。虽然 5G 能提供极快的传输速度,能达到 4G 网络的数十倍,而且延时很低,但信号的衍射能力(即绕过障碍物的能力)十分有限,且发送距离很短,这便需要增建更多基站以增加覆盖。

5G 标准的较量在于信道编码之争,此前有 Turbo 码LDPC 码Polar 码三种编码方案纳入讨论,其中美国运营商和企业主推的 LDPC 码战胜了另外两个方案,被采纳为 5G eMBB 场景的数据信道的数据信道编码。随后华为等中国通信企业主推的 Polar 码在 5G 核心标准上扳回一局,成为 5G eMBB 场景的控制信道编码方案,这一决议在 2016 年 11 月份的 3GPP 会议上通过,也引发了众多叫好声,国内甚至有媒体称:“华为拿下了 5G !”

其实这其中并没有谁拿下了谁,Polar 码也不是华为家的,华为只是主要研究 Polar 码并处在领先地位,拥有较多专利,可以更快地在此基础上推出商用产品,布局 5G 设施。eMBB 场景也只不过是 5G 应用的其中一个场景。3GPP 定义的 5G 三大场景包括:eMBB、mMTC 和 URLLC。

eMBB 对应的是3D/超高清视频等大流量移动宽带业务,mMTC 对应的是大规模物联网业务,而 URLLC 对应的是如无人驾驶、工业自动化等需要低时延高可靠连接的业务。

在 5G eMBB 场景上,Polar 成为控制信道编码方案,LDPC 成为数据信道编码方案,大家平分秋色,严格来讲没有谁是主导的说法。但是,Polar 码的胜出,打破了欧美特别是美国企业在通信技术上的垄断,体现了中国通信在国际上被认可,地位得到提升,和当年 3G、4G 时代相比已经大为不同。

在 3G、4G 时代,中国虽然主导了 TD-SCDMA 和 TD-LTE 标准,但实际并没有多少话语权,Polar 成为控制信道编码标准是中国在信道编码领域的首次突破,也为中国在 5G 标准中争取较以往更多的话语权奠定了基础。下面是三种编码方式的介绍:

  • 低密度奇偶检查码(Low-density parity-check code,LDPC code):它是线性分组码(linear block code)的一种,是可用于更正信息传输过程中错误的编码方式。它于 1962 年被首次提出,其错误校正能力非常接近理论最大值即香农极限 (Shannon Limit)。遗憾的是,受限于当时技术,低密度奇偶检查码无法实现。现在随着集成电路技术的发展,它也逐渐成为了各种先进通信系统的频道编码标准。
  • 涡轮码(Turbo code):它是信息论中一种前向纠错的编码技术,发明于 1990 至 1991年间,并于 1993 年首次发表。涡轮码是首个得以接近香农极限的现实可行的编码,在低信噪比条件下有着优越的性能,广泛运用于 3G/4G 移动通信(如 UMTS 与 LTE)、深空卫星通信等领域。
  • 极化码(Polar code):2008 年 IEEE 国际信息论研讨会(IEEE International Symposium on Information Theory,IEEE ISIT)上,土耳其毕尔肯大学埃达尔·阿利坎(Erdal Arıkan)教授首次提出了信道极化的概念。基于该理论,他给出了人类已知的第一种能够被严格证明达到信道容量的信道编码方法,并将其命名为极化码。

5.2.5 物理层

物理层将数据链路层接收的位转换为用于传输的电磁信号。数字化传输(使用数字信号传输)需要专用通道,模拟传输(使用模拟信号传输)不必需要专用通道。数字化传输需要数数转换技术或模数转换技术,模拟传输需要数模转换技术或模模转换技术。关于这些技术细节的讨论超出了本章的范围和笔者当前的知识水平,如有兴趣可查询相关网络资源。

5.3 传输介质

物理层阐述的电子信号需要传输介质才能从一个节点送到另一个节点,作为本章的结束,我们最后简要介绍一下电子信号传输中常用的介质。电信中,传输介质可分为两大类:导向介质无导向介质。导向介质包括双绞线、同轴电缆、光缆等,非导向介质包括无线电波、微波、红外波等。

双绞线(twisted pair)是由两条相互绝缘的导线按照一定的规格互相缠绕(一般以顺时针缠绕)在一起而制成的一种通用配线。把两根绝缘的铜导线按一定规格互相绞在一起,可降低信号干扰的程度,每一根导线在传输中辐射的电波会被另一根线上发出的电波抵消。我们常说的网线就是一种双绞线,它通过 RJ-45 接头(俗称水晶头)与网卡连接。

同轴电缆(coaxial cable)一般是由四层构成:最内层是一条导电铜线,线的外面有一层塑胶(作绝缘体、电介质之用)围拢,绝缘体外面又有一层薄的网状导电体(一般为铜或合金),然后导电体外面是最外层的绝缘护套。传统的有线电视网络使用的是同轴电缆,后来有线电视供应商把大多数的媒介换成了光纤电缆,只在网络的边缘和靠近客户房屋处使用同轴电缆。

光缆是包含光导纤维(optical fiber)的线缆,是一种由玻璃或塑料制成的纤维,在玻璃或塑料外覆盖有另一种密度较小的介质(称为包层),它利用了光在进入密度较低介质时既不反射也不折射的特性。微细的光纤封装在塑料护套中,使得它能够弯曲而不至于断裂。通常光纤的一端的发射装置使用发光二极管或一束激光将光脉冲传送至光纤中,光纤的另一端的接收装置使用光敏元件检测脉冲。信息在光导纤维的传输损失比电在电线传导的损耗低得多,加上主要生产原料是蕴藏丰富且极易开采的硅,使得光纤成为了长距离信息传递的重要媒介。图 5-11 向我们展示了这三种导向介质。

图 5-11 导向介质

非导向介质不通过物理上的导体传播电磁波,信号通常在自由空间中传播,电磁波谱中用于无线通信的波段从 3 KHz 到 900 THz(注:1000 G = 1 T),频率在 3 KHz ~ 1 GHz 的电磁波被称为无线电波,频率在 1 ~ 300 GHz 的电磁波被称为微波,频率在 300 GHz ~ 400 THz 的电磁波称为红外波

在前面,我们提到过 Wi-Fi 6 支持 2.4 GHz 和 5 GHz 两个频段,可见 Wi-Fi 网络的传输介质是微波,后面又提到了 5G 的频谱属于极高频,但其仍属于微波的范围。在讲到 5G 时,我们还提到过:5G 的频谱较高导致信号衍射能力较低。事实上,电磁波频率越高,其衍射能力(绕过障碍物的能力)越低,像这里提到的红外波是无法穿透墙壁的。这种弱衍射能力的优势在于可以防止不同系统之间的干扰。例如我们的遥控器使用的就是红外信号,使用遥控器时我们不必担心会受到邻居家遥控器的干扰,但这种弱衍射能力使得我们无法将红外信号应用于长距离通信。此外,我们也无法在室外使用红外波,因为太阳光中的红外波会对通信产生干扰。图 5-12 向我们展示了无线电波、微波、红外波和可见光的频谱。

图 5-12 电磁波频谱

有关计算机网络的简要介绍到这里就结束了,从 2018 年 11 月 3 日到 2019 年 5 月 7 日,断断续续半年时间,借助于各种书籍和网络资源,笔者终于完成了计算机科学导论中有关计算机网络的学习,并将其整理成为这篇博文。笔者在阅读计算机科学导论这本书的过程中,一直没有遇到太大的障碍,直到读到计算机网络这一章,当时读完一遍之后是毫无头绪,完全不知道作者在讲啥的状态,幸运的是:现在终于在黑暗中看到了一缕曙光,也许还不怎么亮,但已足够振奋人心。互联网走进普通大众的生活不过 30 年左右的时间,30 岁,对于一个人而言,还足够年轻,我想,对于互联网而言,也同样如此。互联网技术还并未与我们的传统行业实现深度结合,互联网平等、开放、自由的思想观念也还没有深入所有人的心中,万物互联也才刚刚起步,在可以预见的将来,计算机网络技术仍将绽放出灿烂的光芒。路漫漫其修远兮,吾将上下而求索,愿与诸君共勉!

  • 2
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:像素格子 设计师:CSDN官方博客 返回首页

打赏作者

tiny-boat

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值