树莓派开始,玩转Linux29:遍阅网络协议

树莓派开始,玩转Linux29:遍阅网络协议

前面的章节专注于计算机的内部,从这一章起转向计算机的外部,即网络功能。互联网的诞生晚于计算机,但它的发展极为迅速。通信协议模块,已经成为计算机操作系统密不可分的一部分。本章介绍网络协议的基础知识。

1.通信与互联网协议:

通信是一件奇妙的事情,它让信息在不同的个体间传递。动物散发着特殊的气味,传递着求偶信息。人则说着甜言蜜语,向情人表达爱意。猎人吹着口哨,悄悄地围拢猎物。服务生则大声向后厨吆喝,要加两份炸鸡和啤酒。红绿灯指挥着交通,电视上播放着广告,法老的金字塔刻着禁止进入的诅咒。有了通信,每个人都和周围的世界进行着信息连接。

在通信这个神秘的过程中,参与通信的个体总要遵守特定的协议(Protocol)。在日常交谈中,我们无形中使用约定俗成的语法。两个人使用不同的语法,就是以不同的协议来交流,彼此会不知所云。像语言、语法这样的通信协议有特定的历史渊源,很难轻易改变,但人们还能自行创造通信协议。古人在长城上放狼烟,用来警告后方有外敌入侵。这样的警告之所以能成功传递,是因为人们已经约定狼烟代表了敌人入侵。狼烟代表了敌人入侵就是一个简单的通信协议。协议可以更复杂。电报使用莫尔斯码通信。莫尔斯码用短按和长按的组合,来代表不同的英文字母。求救信号SOS,用莫尔斯码表示就是:
短短短 长长长 短短短

短表示短按,长表示长按。在莫尔斯码规定的协议中,连续的三个短信号代表S,三个长信号代表O。人们知道SOS是求助信息,是因为我们还有个SOS代表求救的协议存在于脑海里。因此莫尔斯码的求救通信,依赖了一个两层协议组成的分层通信系统。计算机之间的通信也是在不同的计算机个体之间传递信息。因为早期的计算机主要用作运算工具,所以不存在太强烈的数据需求。计算机放在一个机房内,借用缆线与各种外设连接起来。后来,计算机用户越来越多,用户之间分享数据的需求也越来越多。沿着电报、电话、电视已经积累的经验,计算机开始用电压、光照、电磁波等易于长距离传递的信号通信。

当然,计算机的通信不是那么简单。互联网是一个容许多方参与的开放网络。为了让不同设备沟通,通信协议必须标准化。计算机通信的内容又很丰富,可能是少量的文字,也可能是海量的音乐和电影。因此,通信协议又必须足够灵活,能包容不同的数据内容。在银行、医院、战场这样的关键场景中,计算机还必须保证通信的准确性和安全性。最后,参与通信的计算机很多。通信协议必须有一定的统筹策略,在保证网络通畅的前提下,尽快传递信息。计算机通过一套多层次的协议体系来满足上述的多方位需求。

2.协议分层:

互联网通信协议以TCP/IP协议为核心,并通过多种多样的协议形式向上下游延伸。本节从底层协议开始简要介绍计算机协议。

1.物理层
计算机的基础协议在通信的物理介质。所谓的物理层(PhysicalLayer),是指光纤、电缆或者电磁波等真实存在的物理媒介。这些媒介可以传送物理信号,比如亮度、电压、振幅。计算机底层的信息是二进制码,用0和1构成的序列就可以代表信息,因此在物理层只需要约定两种物理信号来分别表示0和1即可,比如用高电压表示1,低电压表示0。从物理信号到二进制的约定就构成了物理层协议。针对特定的媒介,电脑可以有相应的接口,用来接收物理信号。随后计算机将利用相应的物理层协议,把物理信号解读成二进制序列。

2.连接层
连续的二进制序列就像没有标点的文言文一样让人头脑发昏。在连接层(Link Layer),我们把二进制序列分割成帧(Frame)。所谓的帧,是一段有限的二进制序列。连接层协议能帮助计算机识别二进制序列中所包含的帧。它规定特殊的0/1组合来作为帧的起始和结束。连接层协议还规定了帧的格式。帧中包含有收信地址(SRC,Source)和送信地址(DST,Destination),还有能够探测错误的校验序列(FrameCheck Sequence)。当然,帧中最重要的是所要传输的数据。帧就像是一个信封,把数据包裹起来。以太网(Ethernet)和Wi-Fi是现在最常见的连接层协议,分别用于有线网络和无线网络。树莓派的网口通信用的是以太网协议,而无线Wi-Fi用的自然就是Wi-Fi协议。因此,树莓派至少有两种方式接入网络。相应的,树莓派上也有两个网络接口控制器(NIC,NetworkInterface Controller),也就是所谓的"网卡"。这两个网卡分别使用以太协议和Wi-Fi协议进行通信。通过连接层协议,我们可以指定帧的收信地址,从而把信息传递给其他的计算机设备。但遗憾的是,帧的收信地址只能是本地局域网内的。因此,连接层更像是一个社区的邮差,他认识社区中的每一户人家。社区中的每个人都可以将一封信,也就是一帧交给他。邮差把信送给同一社区的另一户人家。更远距离的通信还需要在更高的网络层实现。

3.网络层
网络层(Network Layer)的目的是让不同的社区之间通信。比如,让Wi-Fi局域网上的一台计算机和以太局域网上的另一台计算机通信,就需要一个"中间人"。这个"中间人"必须有以下功能。
(1)能从物理层上为两个网络接收和发送0/1序列。
(2)能同时理解两种网络的帧格式。
路由器(Router)就是为此而产生的"中间人"设备。一个路由器有多个网,因此路由器可以同时接入多个网络,并理解相应的连接层协
议。在帧经过路由到达另一个网络的时候,路由会读取帧的信息,并改写以发送到另一个网络。所以路由器就像是在两个社区都有分支的邮局。一个社区的邮差将信送到本社区的邮局分支,而邮局会通过自己在另一个社区的分支将信转交给另一个社区的邮差手中,并由另一个社区的邮差送到目的地。

由于树莓派上有多个网卡,它也可以充当一个路由器。

我们说过,连接层的帧中只能记录本地的送信地址,如"第一条街第三座房子"或者"中心十字路口拐角的小房子"这样一些本地人才知道的地址描述。邮局收到这样的信件就傻眼了,这是要送到纽约还是东京。邮局只能抱着侥幸心理读一下信------也就是帧的数据部分。邮局发现,送信人居然也懂IP协议,在信的开头写上标准的邮编------IP地址。如果目的地社区也归这个邮局管,那么邮局工作人员就把信重新装到一个新的信封中,写上对应的本地地址,交给那个社区的邮差。然而,IP地址也可能不在邮局的管辖范围内。邮局会把信件转交到其他邮局。有时候一封信要通过多个邮局转交,才能最终到达目的地,这个过程叫作路由(Route)。邮局将分离的局域网络连接成了覆盖全球的互联网。

4.传输层
上面的三层协议让不同的计算机之间可以通信。但计算机中实际上有多个运行着的程序,也就是所谓的进程。每个进程都可能有通信需求。这就好像一所房子里住了好几个人。如何让信准确送到某个人手里呢?遵照与之前相同的逻辑,在网络层协议的数据部分增加传输层(Transport Layer)信息。我在信纸上增加新的信息,也就是收信人的姓名。大楼管理员从邮差手中接过信,会根据收信人,将信送给房子中的某个人。

传输层协议,比如TCP协议和UDP协议,都使用端口号(PortNumber)来识别收信人。在写信的时候,我们写上目的地的端口。当信到达目的地的管理员手中后,他会根据传输层协议,识别端口号,将信送给不同的人。TCP和UDP协议是两种不同的传输层协议。UDP协议类似于信件交流过程,一封信包含所有的信息。TCP协议则好像两个情人间的频繁通话。他们要表达的感情太多,以至于连续的发信。另一方必须将这些信按顺序排列起来,才能看明白全部的意思。此外,TCP协议还能控制网络交通,避免网络阻塞。由于完善的功能,TCP也成了最常用的传输层协议。

5.应用层
通过上面的几层协议,我们已经可以在任意两个进程之间进行通信。然而,在应用层(Application Layer)上,还可以有更高层的协议。不同类型的进程就像从事不同行业的人。有的是律师,有的是外交官。某些行业会有特定的职业用语规范。律师之间的通信会用严格的律师术语,以免产生纠纷。外交官之间的通信,也要符合一定的外交格式,以免发生外交事故。如果是情报机构,则要通过暗号来加密信息。

同样,某个类型的应用可以使用某个应用层协议,进一步规范用语。应用层的协议包括用于Web的HTTP协议,这是浏览器工作的基础。DNS协议也是应用层协议,从而允许我们使用如douban.com这样的域名。应用层的IMAP协议用于E-mail传输。还有些加密协议让数据能安全地传递。应用层协议不但让通信更稳定也更完善,还让计算机能提供更丰富的互联网服务。

计算机通信从物理信号出发,最终实现了复杂的互联网通信,靠的就是网络协议。这些高层协议像邮差、邮局、大楼管理员一样,传递符合特定用语规范的信息。通过不同层次的封装,我们不再关心底层协议,专注于高层信息的编辑和发送。这些看起来繁杂得像森林的网络协议,是互联网最重要,也最常被忽视的基础设施。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值