如果说计算机把我们从工业时代带到了信息时代,那么计算机网络就可以说把我们带到了网络时代。随着使用计算机人数的不断增加,计算机也经历了一系列的快速发展,从大型通用计算机 -> 超级计算机 -> 小型机 -> 个人电脑 -> 工作站 -> 便携式电脑 -> 智能手机终端等都是这一过程的产物。计算机网络也逐渐从 独立模式 演变为了 网络互联模式 。
独立模式:计算机在联网前都可以认为是独立模式,俗称单机模式,此时的计算机不会与其他计算机通信。
图 1-1
如图 1-1 可以看到,在独立模式下,每个人都需要排队等待其他人在一个机器上完成工作后,其他用户才能使用。这样的数据是单独管理的。
图 1-2
如图 1-2,从单机模式切换到了网络互联模式,在这种模式下,每个人都能独立的使用计算机,还会有一个服务器,来为客户端 A、B、C 提供服务。在网络互联模式下,数据一般是集中管理的。
计算机网络由若干节点和链接这些节点的链路组成,网络中的节点可以是计算机、交换器、集线器或者路由器等,计算机网络按规模和覆盖范围进行划分,可以分为局域网、城域网和广域网。
局域网:一般指的是范围在几百到几公里办公楼或者校园内计算机相互连接成的计算机网络,一般用在狭小区域内的网络,一个社区、一栋楼、办公室经常使用局域网。
城域网:一个城市中的计算机所相互连接形成的计算机网络。城域网是介于广域网与局域网之间的一种高速网络。城域网设计的目标是要满足几千米范围内的大量企业、机关、公司的多个局城网互联的需求,以实现大量用户之间的数据、语音、图形与视频等多种信息的传输功能。
广域网:广域网中的计算机所形成的连接范围就更大了,常常是一个国家或是一个洲。其目的是为了让分市较远的各局域网互联。
计算机网络发展史
互联网的诞生
1946 年世界上第一台计算机问世,此时还没有计算机网络,所以计算机只能单机工作,即使两台计算机的距离非常近,他们却只能像个内向的孩子一样,守着自己的一隅。
二战之后,美苏争霸,出于军事的目的,美国组建了一个神秘的部门 ARPA,这个部门接美国国防部的要求打算研制一种分散的指挥系统,这个系统会有很多节点,每当其中某些节点被摧毁后,其它节点仍能相互通信,这个项目于 1966 年完成,ARPA 将其命名为 ARPANET(阿帕网) 。ARPANET 是最早的计算机网络之一,它就是互联网的前身。
ARPANET 是最早使用 分组交换 的计算机网络之一,通过包交换系统进行通信的数据会被格式化为带有目标机器地址的数据包,然后发送到网络上由下一台机器接收。
数据包 一词是由 Donald Davies 在 1965 年创造的,用于描述通过网络在计算机之间传输的数据,数据包在计算机网络中的位置举足轻重,可以说数据包是互联网的主人公。
ARPANET 于1969 年正式启动。同样于 1969 年,加州大学洛杉矶分校(UCLA)的 Steve Crocker 发表了第一篇 RFC 论文,这被认为是互联网的开端。同年,第一台网络交换机实现了在 ARPANET 上的第一次数据传输,这标志着 互联网的正式诞生 。
我们经常在某篇文章结尾引用.rfc 或者与某人沟通,他提出了他不求甚解的 idea,然后你继续追问他,他就让你自己查 RFC 文档(好像说的就是我),说的就是介个。 热4
官方一点解释 RFC 就是描述互联网和互联网系统的方法、行为、研究或者创新的官方文档。
通俗一点就是:互联网协议的官方文档。
TCP/IP 的诞生
虽然现在能够在几个节点之间相互通信,但是节点的数量只有四个,还是比较少。而且当时阿帕网有很多局限性,比如不同计算机网络之间不能互相通信,为了解决这个问题,APPA 又启动了新的研究项目,设法将不同的计算机局域网进行互联。
早期的 ARPANET 采用的是一种名为NCP的网络协议,但是随着网络的发展,以及多节点接入和用户对网络需求的提高,NCP 协议已经不能充分支持 ARPANET 的发展需求。而且 NCP 还有一个非常重要的缺陷,就是它只能用于相同的操作系统环境中,这也就是说,Windows 用户不能和 MacOS 用户以及 Android 用户进行通信。
所以,ARPANET 急需一种新的协议来替换已经无法满足需求的 NCP 协议,这个任务的重担交给了 Robert E. Kahn 和 Vinton G. Cerf ,这两位大神的理论放到现在,都是空前绝后的,那么这俩老教授到底干了什么事儿呢?我只轻描淡写的讲一句:他们提出了新的传输控制协议——TCP(Transmission Control Protocol)。这是计算机网络两个非常著名的科学家,很多人把 Robert E. Kahn 和 Vinton G. Cerf 称为互联网之父。1974 年,这俩人在 IEEE 期刊上发表了题为《关于分组交换的网络通信协议》的论文,正式提出 TCP/IP,用以实现计算机网络之间的互联。
虽然我们认为 TCP/IP 协议是一项非常伟大的发明,但在当时的背景下,却不被人们看好,而且 TCP/IP 的四层模型相比于 ISO 提出的七层模型来说,也显得比较简陋。但是功夫不负有心人,经过 4 年时间的不断改进,TCP/IP 协议终于完成了基础架构的搭建。终于在 1983 年,美国国防部高级研究计划局决定淘汰 NCP 协议,取而代之的是使用 TCP/IP 协议。从论文到发表,再到采纳,整整用了十年的时间。1985 年,TCP/IP 成为 UNIX 操作系统的组成部分。之后几乎所有的操作系统都逐渐支持 TCP/IP,这个协议成为主流。
进一步发展
80 年代初期,ARPANET 取得了巨大的成功,但是没有获得美国联邦机构合同的学校却不能使用。为了解决这个问题,美国国家科学基金会(NSF)开始着手建立给大学生使用的计算机科学网(CSNet)。CSNet 是在其他基础网络之上加的协议层,它使用其他网络提供的通信能力,在用户角度下它也是一个独立的网络。CSNet 采用集中控制方式,所有信息交换都经过一台中继器进行。
1986 年 NSF 投资分别在五所大学建立了超级计算机中心,并形成了 NSFNET,由于 NSF 的鼓励和资助,很多大学、政府机构甚至私营的研究机构纷纷把自己的局域网并人 NSFNET 中,从 1986 年至 1991 年,NSFNET 的子网从100 个迅速增加到 3000 多个。
不仅仅只有学校的加入,许多学术团体、企业、研究机构甚至个人也加入进来,Internet 的使用者不再限于纯计算机专业人员。新的使用者发觉计算机相互间的通讯对他们来讲更有吸引力。于是,他们逐步把 Internet 当作一种交流与通信的工具,而不仅仅只是共享 NSF 巨型计算机的运算能力。
Internet 是一系列全球信息的汇总,它由无数个子网组成,每个子网中都有若干台计算机。
进入 90 年代初期,Internet 已经有了非常多的子网,各个子网分别负责自己的架设和运作费用,而这些子网又通过 NSFNET 互联起来。NSFNET 连接全美上千万台计算机,拥有几千万用户,是 Internet 最主要的成员网。随着计算机网络在全球的拓展和扩散,美国以外的网络也逐渐接入 NSFNET 主干或其子网。
1993 年是因特网发展过程中非常重要的一年,在这一年中 Internet 完成了到目前为止所有最重要的技术创新,WWW - 万维网和浏览器的应用使因特网上有了一个令人耳目一新的平台:人们在 Internet 上所看到的内容不仅只是文字,而且有了图片、声音和动画、甚至还有了电影。因特网演变成了一个文字、图像、声音、动画、影片等多种媒体交相辉映的新世界,更以前所未有的速度席卷了全世界。
Internet 的迅速崛起、引起了全世界的瞩目,我国也非常重视信息基础设施的建设,注重与 Internet 的连接。目前,已经建成和正在建设的信息网络,对我国科技、经济、社会的发展以及与国际社会的信息交流产生着深远的影响。
我国互联网发展
虽然我国互联网的起步没有美国那么早,但是我国却有着全世界最快的互联网增速。
我国互联网发展起源于 1987 - 1993 年,这段时期国内的科技工作者开始接触 Internet 资源。在此期间,以中科院高能物理所为首的一批科研院所与国外机构合作开展一些与 Internet 联网的科研课题,通过拨号方式使用Internet 的 E-mail 电子邮件系统,并为国内一些重点院校和科研机构提供国际 Internet 电子邮件服务。
1990 年 10 月,我国正式向国际因特网信息中心登记注册了最高域名 cn,从而开通了使用自己域名的 Internet 电子邮件。
1994 年 1 月,美国国家科学基金会接受我国正式接入 Internet 的要求。1994 年 3 月,我国获准加入 Internet。4月初在中美科技合作联委会上,代表我国政府向美国国家科学基金会(NSF)正式提出要求连入 Internet,并得到认可。至此,我国终于打通了最后的环节,在 4 月 20 日,以 NCFC 工程连入 Internet 国际专线为标志,我国与 Internet 全面接触。同年 5 月,我国联网工作全部完成。我国政府对 Internet 进入我国表示认可。我国网络的域名也最终确定为 cn。此事被我国新闻界评为 1994 年我国十大科技新闻之一,被国家统计公报列为我国 1994 年重大科技成就之一。
从 1994 年开始至今,我国实现了和因特网的 TCP/IP 连接,从而逐步开通了因特网的全功能服务;大型电脑网络项目正式启动,因特网在我国进入了飞速发展时期。1995 年,我国电信分别在北京和上海设立专线,并通过电话线、DDN 专线以及 X.25 网面向社会提供 Internet 接入服务。1995 年 5 月,开始筹建 CHINANET 全国骨干网,1996 年 1 月,CHINANET 骨干网建成并正式开通,全国范围的公用计算机互联网络开始提供服务。标志着我国互联网进入快速发展阶段。
我国陆续建造了多个全国范围内的公共计算机网络,其中最大的就是下面这几个
- 中国电信互联网 CHINANET
- 中国联通互联网 UNINET
- 中国移动互联网 CMNET
- 中国教育和科研计算机网 CERNET
- 中国科学技术网 CSTNET
可以发现,我国互联网建设主要分为三个阶段。
- 第一阶段为1987—1993年,这个阶段称为启蒙阶段,或者说试验阶段,我国在这个阶段开始接触 Internet,并开展了科研课题和科技合作工作,不过阶段的网络应用仅限于小范围内的电子邮件服务。
- 第二阶段为 1994 年 - 1996 年,这个阶段为启动阶段,或者说铺设阶段,这个阶段我国开始架设、铺设骨干网,并接入 Internet,从此我国被国际上正式承认为有 Internet 的国家。然后 ChinaNet、CERnet、CSTnet等多个 Internet 络项目在全国范围相继启动。
- 第三个阶段为 1997 年至今,这个阶段面向全国范围内接入 Internet,这个阶段是我国互联网快速发展的阶段。
进入 21 世纪后,CERNET2 试验网开通,CERNET2 试验网是以 2.5 Gbit/s - 10 Gbit/s 的速度连接北京、上海和广州三个 CERNET 核心节点,这标志着我国互联网已经迈入了国际先进水平。
CNNIC(中国互联网络信息中心)每年都会公布我国互联网发展情况,感兴趣的小伙伴可以通过 www.cnnic.cn 查询到相关信息。
计算机网络发展历程
批处理
和早期的计算机操作系统一样,最开始都要先经历批处理 Batch Processing阶段,批处理的目的也是为了能让更多的人使用计算机。
批处理就是先将数据装入卡带或者磁带,并且由计算机按照一定的顺序进行读入,如下图 1-3 所示。
图 1-3
这种计算机的价格比较昂贵,并不是每个人都能够使用的,这也就客观暗示着,只有专门的操作员才能使用计算机,用户把程序提交给操作员,由操作员排队执行程序,等一段时间后,用户再来提取结果(API 程序员的早期原型。。。。。。)
这种计算机的高效性并没有很好的体现,因为涉及到各种操作不断切换,让计算机计算甚至不如手动运算快。
分时系统
在批处理之后出现的就是分时系统了,分时系统指的是多个终端与同一个计算机连接,允许多个用户同时使用一台计算机。分时系统的出现实现了一人一机的目的,让用户感觉像是自己在使用计算机,实际上这是一种 独占性 的特性,如图 1-4。
图 1-4
分时系统出现以来,计算机的可用性得到了极大的改善。分时系统的出现意味着计算机越来越贴近我们的生活。
还有一点需要注意:分时系统的出现促进了像是 BASIC 这种人机交互编程语言的诞生。
分时系统的出现,同时促进者计算机网络的出现。
计算机通信
在分时系统中,每个终端与计算机相连,这种独占性的方式并不是计算机之间的通信,因为每个人还是在独立的使用计算机。
到了 20 世纪 70 年代,计算机性能有了高速发展,同时体积也变得越来越小,使用计算机的门槛变得更低,越来越多的用户可以使用计算机。
没有一台计算机是信息孤岛 这个理念促使着计算机网络的出现和发展。
计算机网络的诞生
20 世纪 80 年代,一种能够互连多种计算机的网络随之诞生。它能够让各式各样的计算机相连,从大型的超级计算机或主机到小型电脑。
20 世纪 90 年代,虽然实现了一人一机的环境,但是这种环境的搭建仍然价格不菲。与此同时,诸如电子邮件、万维网等信息传播方式如雨后春笋般迎来了前所未有的发展,使得互联网从大到整个公司小到每个家庭内部,都得以广泛普及。
计算机网络的高速发展
现如今,越来越多的终端设备接入互联网,使互联网达到了前所未有的盛世,近年来 3G、4G、5G 通信技术的发展更是互联网高速发展的产物。
许多发展道路各不相同的网络技术也都逐渐向互联网靠拢。例如曾经一直作为通信基础设施、支撑通信网络的电话网。随着互联网的发展,其地位也随着时间的推移被 IP 网所取代,IP 也是互联网发展的产物。
网络安全
互联网也具有两面性,它的出现虽然方便了用户,但同时也方便了一些不法分子。互联网的便捷也带来了一些负面影响,计算机病毒的侵害、信息泄漏、网络诈骗层出不穷。
在现实生活中,通常情况下我们挨揍了会予以反击,因为这种行为完全是动物本能驱动的。但是在互联网中,你被不法分子攻击通常情况下是无力还击的,只能防御,因为还击需要你精通计算机和互联网,这通常情况下很多人办不到。
通常情况下公司和企业容易被作为不法分子获利的对象,所以,作为公司或者企业,要想不受攻击或者防御攻击,需要建立安全的互联网连接。
互联网协议
协议这个名词不仅局限于互联网范畴,也体现在日常生活中,比如情侣双方约定好在哪个地点吃饭,这个约定也是一种 协议 ,比如你应聘成功了,企业会和你签订劳动合同,这种双方的雇佣关系也是一种协议。注意自己对自己的约定不能成为协议,协议的前提条件必须是多人约定。
那么网络协议是什么呢?
网络协议就是网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议 。
没有网络协议的互联网是混乱的,就和人类社会一样,一个个体不能想怎么样就怎么样,你的行为是受到法律约束的。那么网络中的每台计算机也不能自己想发什么发什么,也是需要受到通信协议约束的。
我们一般都了解过 HTTP 协议, HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范 。
但是互联网又不只有 HTTP 协议,它还有很多其他的比如 IP、TCP、UDP、DNS 协议等。下面是一些协议的汇总和介绍。
网络体系结构 | 协议 | 主要用途 |
---|---|---|
TCP/IP | HTTP、SMTP、TELNET、IP、ICMP、TCP、UDP等 | 主要用于互联网、局域网 |
IPX/SPX | IPX、NPC、SPX | 主要用于个人电脑局域网 |
AppleTalk | AEP、ADP、DDP | 苹果公司现有产品互联 |
ISO 在制定标准化 OSI 模型之前,对网络体系结构相关的问题进行了充分的讨论,最终提出了作为通信协议设计指标的 OSI 参考模型。这一模型将通信协议中必要的功能分为了 7 层。通过这 7 层分层,使那些比较复杂的协议简单化。
图 1-5
在 OSI 标准模型中,每一层协议都接收由它下一层所提供的特定服务,并且负责为上一层提供服务,上层协议和下层协议之间通常会开放接口,同一层之间的交互所遵守的约定叫做协议。
OSI 标准模型
上图只是简单的介绍了一下层与层之间的通信规范和上层与下层的通信规范,并未介绍具体的网络协议分层,实际上,OSI 标准模型将复杂的协议整理并分为了易于理解的 7 层。如下图所示
图 1-6
互联网的通信协议都对应了 7 层中的某一层,通过这一点,可以了解协议在整个网络模型中的作用,一般来说,各个分层的主要作用如下
图 1-7
应用层
:应用层是 OSI 标准模型的最顶层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。包括文件传输、电子邮件远程登录和远端接口调用等协议。表示层
: 表示层向上对应用进程服务,向下接收会话层提供的服务,表示层位于 OSI 标准模型的第六层,表示层的主要作用就是将设备的固有数据格式转换为网络标准传输格式。会话层
:会话层位于 OSI 标准模型的第五层,它是建立在传输层之上,利用传输层提供的服务建立和维持会话。传输层
:传输层位于 OSI 标准模型的第四层,它在整个 OSI 标准模型中起到了至关重要的作用。传输层涉及到两个节点之间的数据传输,向上层提供可靠的数据传输服务。传输层的服务一般要经历传输连接建立阶段,数据传输阶段,传输连接释放阶段 3 个阶段才算完成一个完整的服务过程。网络层
:网络层位于 OSI 标准模型的第三层,它位于传输层和数据链路层的中间,将数据设法从源端经过若干个中间节点传送到另一端,从而向运输层提供最基本的端到端的数据传送服务。数据链路层
:数据链路层位于物理层和网络层中间,数据链路层定义了在单个链路上如何传输数据。物理层
:物理层是 OSI 标准模型中最低的一层,物理层是整个 OSI 协议的基础,就如同房屋的地基一样,物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。
TCP/IP 协议簇
TCP/IP 协议是我们程序员接触最多的协议,实际上,TCP/IP 又被称为 TCP/IP 协议簇 ,它并不特指单纯的 TCP 和 IP 协议,而是容纳了许许多多的网络协议。
OSI 模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次
图 1-8
和 OSI 七层网络协议的主要区别如下
- 应用层、表示层、会话层三个层次提供的服务相差不是很大,所以在 TCP/IP 协议中,它们被合并为应用层一个层次。
- 由于通信(数据)链路层和物理层的内容很相似,所以在 TCP/IP 协议中它们被归并在网络接口层一个层次里。
我们的主要研究对象就是 TCP/IP 的四层协议。
下面我就和你聊一聊 TCP/IP 协议簇中都有哪些具体的协议。
IP 协议
IP 是网际互联协议,英文 Internet Protocol,位于网络层。IP 协议是整个 TCP/IP 协议簇的核心,也是构成互联网的基础。IP 能够为运输层提供数据分发,同时也能够组装数据供运输层使用。它将多个网络连接成为一个互联网,这样能够提高网络的可扩展性,实现大规模网络互联。二是分割顶层网络和底层网络之间的耦合关系。
ICMP 协议
ICMP 协议是 Internet 报文控制协议,英文Internet Control Message Protocol, ICMP 协议主要用于在 IP 主机、路由器之间传递控制消息。ICMP 属于网络层的协议,当遇到 IP 无法访问目标、IP 路由器无法按照当前传输速率转发数据包时,会自动发送 ICMP 消息,从这个角度来说,ICMP 协议可以看作是错误侦测与回报机制,让我们检查网络状况、也能够确保连线的准确性。
ARP 协议
ARP 协议是地址解析协议,英文 Address Resolution Protocol,它能够根据 IP 地址获取物理地址。主机发送信息时会将包含目标 IP 的 ARP 请求广播到局域网络上的所有主机,并接受返回消息,以此来确定物理地址。收到消息后的物理地址和 IP 地址会在 ARP 中缓存一段时间,下次查询的时候直接从 ARP 中查询即可。
TCP 协议
TCP 是传输控制协议,英文Transmission Control Protocol,它是一种面向连接的、可靠的、基于字节流的传输协议,TCP 协议位于传输层,TCP 协议是 TCP/IP 协议簇中的核心协议,它最大的特点就是提供可靠的数据交付。TCP 的主要特点有 慢启动、拥塞控制、快速重传、可恢复 。
UDP 协议
UDP 协议是用户数据报协议,英文 User Datagram Protocol,UDP 也是一种传输层协议,与 TCP 相比,UDP 提供一种不可靠的数据交付,也就是说,UDP 协议不保证数据是否到达目标节点。当报文发送之后,是无法得知其是否安全完整到达的。UDP 是一种无连接的协议,传输数据之前源端和终端无需建立连接,不对数据报进行检查与修改,无须等待对方的应答,会出现分组丢失、重复、乱序等现象。但是 UDP 具有较好的实时性,工作效率较 TCP 协议高。
FTP 协议
FTP 协议是文件传输协议,英文File Transfer Protocol,应用层协议之一,是 TCP/IP 协议的重要组成之一,FTP 协议分为 FTP 服务器和 FTP 客户端两部分,FTP 服务器用来存储文件,FTP 客户端用来访问 FTP 服务器上的文件,FTP 的传输效率比较高,所以一般使用 FTP 来传输大文件。
DNS 协议
DNS 协议是域名解析协议,英文 Domain Name System,它也是应用层的协议之一,DNS 协议是一个将域名和 IP 相互映射的分布式数据库系统。DNS 缓存能够加快网络资源的访问。
SMTP 协议
SMTP 协议是邮件传输协议,英文 Simple Mail Transfer Protocol,应用层协议之一,SMTP 主要是用作邮件收发协议,SMTP 服务器是遵循 SMTP 协议的发送邮件服务器,用来发送或中转用户发出的电子邮件
SLIP 协议
SLIP 协议是指串行线路网际协议,英文 Serial Line Internet Protocol,是在串行通信线路上支持 TCP/IP 协议的一种点对点式的链路层通信协议。
PPP 协议
PPP 协议是点对点协议,英文Point to Point Protocol,是一种链路层协议,是在为同等单元之间传输数据包而设计的。设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。
网络核心概念
传输方式
网络根据传输方式可以进行分类,一般分为 面向连接型和面向无连接型 。
- 面向连接型中,在发送数据之前,需要在主机之间建立一条通信线路。
- 面向无连接型则不要求建立和断开连接,发送方可用于任何时候发送数据。接收端也不知道自己何时从哪里接收到数据。
分组交换
在互联网应用中,每个终端系统都可以彼此交换信息,这种信息也被称为报文(Message),报文是一个集大成者,它可以包括你想要的任何东西,比如文字、数据、电子邮件、音频、视频等。为了从源目的地向端系统发送报文,需要把长报文切分为一个个小的数据块,这种数据块称为分组(Packets),也就是说,报文是由一个个小块的分组组成。在端系统和目的地之间,每个分组都要经过通信链路和分组交换机,分组要在端系统之间交互需要经过一定的时间,如果两个端系统之间需要交互的分组为 L 比特,链路的传输速率问 R 比特/秒,那么传输时间就是 L / R秒。
一个端系统需要经过交换机给其他端系统发送分组,当分组到达交换机时,交换机就能够直接进行转发吗?不是的,交换机可没有这么无私,你想让我帮你转发分组?好,首先你需要先把整个分组数据都给我,我再考虑给你发送的问题,这就是 存储转发传输 。
存储转发传输
下面是一个存储转发传输的示意图。
图 1-9
由图 1-9 可以看出,分组 1、2、3 向交换器进行分组传输,并且交换机已经收到了分组 1 发送的比特,此时交换机会直接进行转发吗?答案是不会的,交换机会把你的分组先缓存在本地。这就和考试作弊一样,一个学霸要经过学渣 A 给学渣 B 传答案,学渣 A 在收到答案后,它可能直接把卷子传过去吗?学渣 A 说,等我先把答案抄完(保存功能)后再把卷子给你,当然一个及其有素质的学渣就另说了。
排队时延和分组丢失
什么?你认为交换机只能和一条通信链路进行相连?那你就大错特错了,这可是交换机啊,怎么可能只有一条通信链路呢?
所以我相信你一定能想到这个问题,当多个端系统同时给交换器发送分组,一定存在顺序到达和排队问题。事实上,对于每条相连的链路,该分组交换机都会有一个输出缓存(output buffer) 和 输出队列(output queue) 与之对应,它用于存储路由器准备发往每条链路的分组。如果到达的分组发现路由器正在接收其他分组,那么新到达的分组就会在输出队列中进行排队,这种等待分组转发所耗费的时间也被称为 排队时延 ,上面提到分组交换器在转发分组时会进行等待,这种等待被称为 存储转发时延 ,所以我们现在了解到的有两种时延,但是其实是有四种时延。这些时延不是一成不变的,其变化程序取决于网络的拥塞程度。
因为队列是有容量限制的,当多条链路同时发送分组导致输出缓存无法接受超额的分组后,这些分组会丢失,这种情况被称为丢包(packet loss),到达的分组或者已排队的分组将会被丢弃。
下图说明了一个简单的分组交换网络。
图 1-10
下面来一个情景模拟: 假定主机 A 和 主机 B 要向主机 E 发送分组,主机 A 和 B 首先通过 100 Mbps 以太网链路将其数据包发送到第一台路由器,然后路由器将这些数据包定向到 15 Mbps 的链路。如果在较短的时间间隔内,数据包到达路由器的速率(转换为每秒比特数)超过 15 Mbps,则在数据包在链路输出缓冲区中排队之前,路由器上会发生拥塞,然后再传输到链路上。例如,如果主机 A 和主机 B 背靠背同时发了 5 包数据,那么这些数据包中的大多数将花费一些时间在队列中等待。实际上,这种情况与许多普通情况完全相似,例如,当我们排队等候银行出纳员或在收费站前等候时。
转发表和路由器选择协议
我们刚刚讲过,路由器和多个通信线路进行相连,如果每条通信链路同时发送分组的话,可能会造成排队和丢包的情况,然后分组在队列中等待发送,现在我就有一个问题问你,队列中的分组发向哪里?这是由什么机制决定的?
换个角度想问题,路由的作用是什么? 把不同端系统中的数据包进行存储和转发 。在因特网中,每个端系统都会有一个 IP 地址,当主机发送分组时,会在分组的首部加上主机的 IP 地址。每台路由器都会有一个转发表(forwarding table),当一个分组到达路由器后,路由器会检查分组中目的地址的一部分,并用目的地址搜索转发表,以找出适当的传输链路,然后映射成为输出链路进行转发。
那么问题来了,路由器内部是怎样设置转发表的呢?详细的我们后面会讲到,这里只是说个大概,路由器内部也是具有路由选择协议的,用于自动设置转发表。
电路交换
在计算机网络中,另一种通过网络链路和路由进行数据传输的另外一种方式就是电路交换(circuit switching)。电路交换在资源预留上与分组交换不同,什么意思呢?
就是分组交换不会预留每次端系统之间交互分组的缓存和链路传输速率,所以每次都会进行排队传输;而电路交换会预留这些信息。一个简单的例子帮助你理解:这就好比有两家餐馆,餐馆 A 需要预定而餐馆 B 不需要预定,对于可以预定的餐馆 A,我们必须先提前与其进行联系,但是当我们到达目的地时,我们能够立刻入座并选菜。而对于不需要预定的那家餐馆来说,你可能不需要提前联系,但是你必须承受到达目的地后需要排队的风险。
下面显示了一个电路交换网络
图 1-11
在这个网络中,4条链路用于4台电路交换机。这些链路中的每一条都有4条电路,因此每条链路能支持4条并行的链接。每台主机都与一台交换机直接相连,当两台主机需要通信时,该网络在两台主机之间创建一条专用的端到端的链接(end-to-end connection)。
分组交换和电路交换的对比
分组交换的支持者经常说分组交换不适合实时服务,因为它的端到端时延时不可预测的。而分组交换的支持者却认为分组交换提供了比电路交换更好的带宽共享;它比电路交换更加简单、更有效,实现成本更低。但是现在的趋势更多的是朝着分组交换的方向发展。
分组交换网的时延、丢包和吞吐量
因特网可以看成是一种基础设施,该基础设施为运行在端系统上的分布式应用提供服务。我们希望在计算机网络中任意两个端系统之间传递数据都不会造成数据丢失,这是一个极高的目标,实践中难以达到。所以,在实践中必须要限制端系统之间的吞吐量用来控制数据丢失。如果在端系统之间引入时延,也不能保证不会丢失分组问题。所以我们从时延、丢包和吞吐量三个层面来看一下计算机网络。
分组交换中的时延
计算机网络中的分组从一台主机(源)出发,经过一系列路由器传输,在另一个端系统中结束它的历程。在这整个传输历程中,分组会涉及到四种最主要的时延: 节点处理时延(nodal processing delay)、排队时延(queuing delay)、传输时延(total nodal delay)和传播时延(propagation delay) 。这四种时延加起来就是节点总时延(total nodal delay)。
如果用 dproc dqueue dtrans dpop 分别表示处理时延、排队时延、传输时延和传播时延,则节点的总时延由以下公式决定: dnodal = dproc + dqueue + dtrans + dpop。
时延的类型
下面是一副典型的时延分布图,让我们从图中进行分析一下不同的时延类型。
图 1-12
分组由端系统经过通信链路传输到路由器 A,路由器 A 检查分组头部以映射出适当的传输链路,并将分组送入该链路。仅当该链路没有其他分组正在传输并且没有其他分组排在该该分组前面时,才能在这条链路上自由的传输该分组。如果该链路当前繁忙或者已经有其他分组排在该分组前面时,新到达的分组将会加入排队。下面我们分开讨论一下这四种时延。
节点处理时延
节点处理时延分为两部分,第一部分是路由器会检查分组的首部信息;第二部分是决定将分组传输到哪条通信链路所需要的时间。一般高速网络的节点处理时延都在微秒级和更低的数量级。在这种处理时延完成后,分组会发往路由器的转发队列中。
排队时延
在队列排队转发过程中,分组需要在队列中等待发送,分组在等待发送过程中消耗的时间被称为排队时延。排队时延的长短取决于先于该分组到达正在队列中排队的分组数量。如果该队列是空的,并且当前没有正在传输的分组,那么该分组的排队时延就是 0。如果处于网络高发时段,那么链路中传输的分组比较多,那么分组的排队时延将延长。实际的排队时延也可以到达微秒级。
传输时延
队列是路由器所用的主要的数据结构。队列的特征就是先进先出,先进食堂的先打饭。传输时延是理论情况下单位时间内的传输比特所消耗的时间。比如分组的长度是 L 比特,R 表示从路由器 A 到路由器 B 的传输速率。那么传输时延就是 L / R 。这是将所有分组推向该链路所需要的时间。正是情况下传输时延通常也在毫秒到微秒级。
传播时延
从链路的起点到路由器 B 传播所需要的时间就是传播时延。该比特以该链路的传播速率传播。该传播速率取决于链路的物理介质(双绞线、同轴电缆、光纤)。如果用公式来计算一下的话,该传播时延等于两台路由器之间的距离 / 传播速率。即传播速率是 d/s ,其中 d 是路由器 A 和 路由器 B 之间的距离,s 是该链路的传播速率。
传输时延和传播时延的比较
计算机网络中的传输时延和传播时延有时候难以区分,在这里解释一下,传输时延是路由器推出分组所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关。而传播时延是一个比特从一台路由器传播到另一台路由器所需要的时间,它是两台路由器之间距离的倒数,而与分组长度和链路传输速率无关。从公式也可以看出来,传输时延是 L/R,也就是分组的长度 / 路由器之间传输速率。传播时延的公式是 d/s,也就是路由器之间的距离 / 传播速率。
排队时延
在这四种时延中,人们最感兴趣的时延或许就是排队时延了 dqueue。与其他三种时延(dproc、dtrans、dpop)不同的是,排队时延对不同的分组可能是不同的。例如,如果 10 个分组同时到达某个队列,第一个到达队列的分组没有排队时延,而最后到达的分组却要经受最大的排队时延(需要等待其他九个时延被传输)。
那么如何描述排队时延呢?或许可以从三个方面来考虑: 流量到达队列的速率、链路的传输速率和到达流量的性质 。即流量是周期性到达还是突发性到达,如果用 a 表示分组到达队列的平均速率( a 的单位是分组/秒,即 pkt/s)前面说过 R 表示的是传输速率,所以能够从队列中推出比特的速率(以 bps 即 b/s 位单位)。假设所有的分组都是由 L 比特组成的,那么比特到达队列的平均速率是 La bps。那么比率 La/R 被称为流量强度(traffic intensity),如果 La/R > 1,则比特到达队列的平均速率超过从队列传输出去的速率,这种情况下队列趋向于无限增加。所以, 设计系统时流量强度不能大于1 。
现在考虑 La / R <= 1 时的情况。流量到达的性质将影响排队时延。如果流量是周期性到达的,即每 L / R 秒到达一个分组,则每个分组将到达一个空队列中,不会有排队时延。如果流量是突发性到达的,则可能会有很大的平均排队时延。一般可以用下面这幅图表示平均排队时延与流量强度的关系
图 1-13
横轴是 La/R 流量强度,纵轴是平均排队时延。
丢包
我们在上述的讨论过程中描绘了一个公式那就是 La/R 不能大于1,如果 La/R 大于1,那么到达的排队将会无穷大,而且路由器中的排队队列所容纳的分组是有限的,所以等到路由器队列堆满后,新到达的分组就无法被容纳,导致路由器*丢弃(drop)*该分组,即分组会丢失。
计算机网络中的吞吐量
除了丢包和时延外,衡量计算机另一个至关重要的性能测度是端到端的吞吐量。假如从主机 A 向主机 B 传送一个大文件,那么在任何时刻主机 B 接收到该文件的速率就是瞬时吞吐量(instantaneous throughput)。如果该文件由 F 比特组成,主机 B 接收到所有 F 比特用去 T 秒,则文件的传送*平均吞吐量(average throughput)*是 F / T bps。
单播、广播、多播和任播
在网络通信中,可以根据目标地址的数量对通信进行分类,可以分为 单播、广播、多播和任播 。
单播(Unicast)
单播最大的特点就是 1 对 1,早期的固定电话就是单播的一个例子,单播示意图如下。
图 1-14
广播(Broadcast)
我们一般小时候经常会跳广播体操,这就是广播的一个事例,主机和与他连接的所有端系统相连,主机将信号发送给所有的端系统。
图 1-15
多播(Multicast)
多播与广播很类似,也是将消息发送给多个接收主机,不同之处在于多播需要限定在某一组主机作为接收端。
图 1-16
任播(Anycast)
任播是在特定的多台主机中选出一个接收端的通信方式。虽然和多播很相似,但是行为与多播不同,任播是从许多目标机群中选出一台最符合网络条件的主机作为目标主机发送消息。然后被选中的特定主机将返回一个单播信号,然后再与目标主机进行通信。
图 1-17
物理媒介
网络的传输是需要介质的。一个比特数据包从一个端系统开始传输,经过一系列的链路和路由器,从而到达另外一个端系统。这个比特会被转发了很多次,那么这个比特经过传输的过程所跨越的媒介就被称为物理媒介(phhysical medium),物理媒介有很多种,比如双绞铜线、同轴电缆、多模光纤榄、陆地无线电频谱和卫星无线电频谱。其实大致分为两种:引导性媒介和非引导性媒介。
双绞铜线
最便宜且最常用的引导性传输媒介就是双绞铜线,多年以来,它一直应用于电话网。从电话机到本地电话交换机的连线超过 99% 都是使用的双绞铜线,例如下面就是双绞铜线的实物图。
图 1-18
双绞铜线由两根绝缘的铜线组成,每根大约 1cm 粗,以规则的螺旋形状排列,通常许多双绞线捆扎在一起形成电缆,并在双绞馅的外面套上保护层。一对电缆构成了一个通信链路。无屏蔽双绞线一般常用在局域网(LAN)中。
同轴电缆
与双绞线类似,同轴电缆也是由两个铜导体组成,下面是实物图。
图 1-19
借助于这种结构以及特殊的绝缘体和保护层,同轴电缆能够达到较高的传输速率,同轴电缆普遍应用在在电缆电视系统中。同轴电缆常被用户引导型共享媒介。
光纤
光纤是一种细而柔软的、能够引导光脉冲的媒介,每个脉冲表示一个比特。一根光纤能够支持极高的比特率,高达数十甚至数百 Gbps。它们不受电磁干扰。光纤是一种引导型物理媒介,下面是光纤的实物图。
图 1-20
一般长途电话网络全面使用光纤,光纤也广泛应用于因特网的主干。
陆地无线电信道
无线电信道承载电磁频谱中的信号。它不需要安装物理线路,并具有穿透墙壁、提供与移动用户的连接以及长距离承载信号的能力。
卫星无线电信道
一颗卫星电信道连接地球上的两个或多个微博发射器/接收器,它们称为地面站。通信中经常使用两类卫星:同步卫星和近地卫星。
原文链接:好家伙!计算机网络基础知识发布!
欢迎关注公众号【程序员cxuan】有更多硬核文章等着你。。。。。。
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。