《网络是怎样连接的》——第三章笔记

        本章接续上一章的内容,论述了信号(网络包)从计算机的网卡中流出,进入网线和网络设备的过程中发生了什么。着重介绍了集线器交换机路由器的基本组成和工作方式,以及三者之间存在什么样的区别。

一、集线器

        集线器的工作其实非常简单,就是将从某个端口中接收到的信号不做任何处理的从接收端口以外的所有端口发出。当然,在这之前集线器首先会通过载波侦听确认局域网中是否存在传输中的信号,以避免信号碰撞。如果有,就等待信号传输完毕;如果没有,就直接将信号广播出去,发送至和自己直接连接的每一台设备。

        这里我们首先介绍一下集线器的基本组成,集线器中包含两个主要部分:一个是转发用的中继电路;另一个是和网卡中类似的PHY/MAU信号收发模块(每个端口都对应一个PHY/MAU)。我们已经知道集线器不会对接收到的信号做任何处理,所以它也就不存在网卡中的MAC模块,因为集线器不会校验网络包的MAC地址。从中我们可以看出,集线器的构成实际上比交换机和路由器都更简单。

        我们假设现在计算机A连接了一台集线器,并向这台集线器发送了网络包,那么这其间具体的工作流程是这样的:网络包从数字信号被计算机的PHY/MAU模块转换成了能在以太网中传输的电信号,接着电信号通过计算机网卡的RJ-45接口(也称为水晶头)由PHY/MAU模块发出到网线中,我们这里假设用的是双绞线,由双绞线传输到了目标集线器的物理端口(同样是RJ-45),然后进入集线器的PHY/MAU模块,接着信号被传输到中继电路,由中继电路将电信号不做任何处理的通过广播的方式,发送给了集线器的其他端口。通过这些端口,电信号就被发送给了其他的设备。

(1)双绞线

        也许会有人问,为什么要用双绞线来作为网线呢?用单条普通线缆就不能实现信号传输么?这里需要解释一下,双绞线是当今网络连接常用的传输介质,它由两条绝缘铜导线相互绞合而成。而之所以有双绞线的出现,首先得要从电信号在线缆中的传输说起。

        通信传输中的电信号,在传输过程中会不可避免的因为能量损失而衰减,同时还会因为外界的电磁干扰(噪声)造成波形的扭曲失真。如果噪声足够强烈,就会让电信号的波形传输到接收端时变得面目全非,最后网卡通过失真信号转换回来的数字信号所对应的数据信息也就出现了错误。双绞线的出现,就是为了应对电信号在传输过程中受到的噪声干扰。

        在这个过程中,发送方会在双绞线的两条信号线中,分别传输两个完全相反(例电压为5V和-5V)的信号,也被称为差模信号。到接收方时,这两个信号会被进行放大(差分电路),也就得到了10V的信号,解决了信号衰减的问题。但我们知道信号在传输中会受到外界的电磁干扰。在上述例子中,信号线A中传输的信号是否对信号线B中传输的信号造成干扰呢?答案是肯定的,这个现象叫做串扰,但是最终接收方受到的信号却并没有怎么失真,这其中的奥秘就在于信号线A和信号线B同时发送了电流大小相同、电压方向相反的信号,可以简单的理解为它们产生了同等的噪声,而这个噪声在传输过程中相互抵消了,所以最终信号的准确性实际上并没有受到太大影响。

        上述过程讲述的是双绞线如何解决内源性噪声,我们现在知道了双绞线的“双”的由来,但是为什么要“绞”呢?下面再来解释一下,既然有内源性噪声,也就有与之对应的外源性噪声,外源性噪声的产生源很多,大到通讯信号基站,小到一个普通的LED灯,都有可能对信号线中传输的电信号产生电磁干扰。如果我们单纯将两条线并排组合的话,噪声干扰这两条线必然会存在一个先后时机(比如噪声先到达信号线A,再到达信号线B,尽管这个间隔可能非常短),那么两条信号线中传输的电信号波形就分别出现了一前一后的振幅,传输到接收方进行组合还原时也就失真了。而通过将两条信号线按照一定间隔绞合到一起,噪声即使触碰到双绞线也是几乎同时到达两条信号线,这样即便产生了一定干扰,两个信号受到的干扰波形也是同步的,造成的影响远小于先前并排组合在两条信号线中所产生一前一后波幅。

        这就是双绞线出现的原因。简单来说双绞线不仅可以解决信号衰减的问题,还能够抵抗噪声干扰,提高信号的质量稳定性

        目前市面上主流的双绞线有五类

        ① 五类(CAT-5):支持10Mbit/s(10BASE-T)和100Mbit/s(100BASE-TX)的以太网,以及125MHz的传输频率。

        ② 超五类(CAT-5e):支持1000Mbit/s(1000BASE-T)的以太网,改善了串扰,向下兼容10BASE-T和100BASE-TX。

        ③ 六类(CAT-6):支持千兆以太网和万兆(10000Mbit/s)以太网(10GBASE-T),以及250MHz的传输频率,向下兼容10BASE-T、100BASE-TX以太网。

        ④ 超六类(CAT-6e):对网线进行了改良,改善了外部串扰,兼容10GBASE-T、1000BASE-T、100BASE-TX、10BASE-T的以太网。

        ⑤ 七类(CAT-7):支持600MHz的高速传输频率,向下兼容10GBASE-T、1000BASE-T、100BASE-TX、10BASE-T以太网。

(2)MDI和MDI-X

          我们日常生活中使用的普通网线由四组绞距不同(防止内源性噪声)的被套管包裹的双绞线组成,与之相对应的基于以太网类型传输技术的RJ-45(水晶头)接口的外部(对应网卡RJ45的接口)有八个金属触点,这种设计能够支持全双工和半双工的工作模式。

        在网卡的内部,RJ-45接口通过八条信号线和PHY/MAU信号收发模块之间进行连接。这种RJ-45接口和PHY/MAU模块之间连接的信号线,根据不同的设备有不同的连接方式。对于计算机等终端设备,通常采用MDI(直连接法)方式进行连接;对于集线器和网络交换机等网络设备,采用MDI-X(交叉连接)式进行连接。

        之所以集线器和交换机中采取这种连接方式,是因为它们需要确保接收电路和发送电路连接在一起。如果计算机和集线器之间采取MDI直连接法,也就意味着集线器内部PHY/MAU模块和RJ-45接口对应的接收电路和计算机网卡内的接收电路连接在了一起(发送电路同理),就会造成接收电路永远不会有信号接收,而发送电路就算有信号流通但因为双方都是发送电路(还可能造成信号碰撞)而无法进行正常接收。

        另一方面,集线器比较特殊的地方在于它除了拥有MDI-X方式连接的接口外,同时还拥有MDI方式连接的端口,这种端口主要用于连接其他的集线器,也被称为上行端口或级联端口。而交换器和路由器都不具备这种端口,但是可以通过MDI/MDI-X切换开关,自动适应连接场景。也就是说当两个设备(无论是终端还是中转设备)连接时,必须有一方为MDI连接方式、另一方为MDI-X连接方式,只有这样才能确保正常通信。如果连接双方的连接端口都为MDI/MDI-X那么就会出现上面提到的连接冲突情况。


二、交换机  

        从上面的内容我们已经知道,集线器在转发信号时会向所有端口广播信号,这难免带来了带宽负担;并且由于集线器的半双工工作特性,线路中在同一时刻只允许接收或发送一种信号存在,又造成了等待时间成本空闲资源浪费,于是为了解决集线器传输效率过低的问题,有了交换机的出现。交换机会根据包的MAC地址完成向目标设备的定向传输,同时支持全双工的工作模式,同一时刻可以同时进行收发操作,这些都大大提高了信号的传输速率。接下来,让我们来看看交换机是如何实现这一切的。

(1)内部结构

        首先,我们从交换机的具体结构开始讲解。和集线器类似,交换机也有数个收发端口,而这些端口的背后,对应的是一张张“网卡”。上一章中已经介绍过了计算机网卡的具体构成:内存+MAC模块+PHY/MAU模块+RJ-45接口,网卡的主要工作就是收发电信号和实现数字信号和电信号之间的相互转换,有了数字信号我们就可以还原成数据信息(网络包)。我们可以注意到,与集线器不同,交换机的每个端口后面多了MAC模块,这是因为交换机必须根据包的MAC地址才能实现定向转发,有了MAC模块才能将网络传输线路中获取的电信号还原成数字信号,并获取到其中的MAC地址。

        这里需要着重强调的是,和计算机的网卡不同,交换机中的端口虽然可以被看做“网卡(结构相似)”,但是每个端口并不像计算机的网卡一样有自己独立的MAC地址。也就是说交换机的识别标识就只有它本身的MAC地址+端口号。在交换机的“网卡”后面,是一个网格状的交换电路,收发的电信号就在这个交换电路上流通,通过交换开关的变动,可以使得电信号被传输向任意端口,并且交换电路还支持同时传输多路信号(全双工)。

        最重要的还是交换机是如何实现包的定向转发的呢?这主要是通过在交换机内维护的一张MAC表,MAC表中记录了交换机的端口号,以及连接了交换机端口的外部设备的MAC地址。在接收到包时,交换机会根据包的MAC头部控制信息查询接收方的MAC地址,然后根据这个MAC地址在自己的MAC表中进行查询,如果匹配到MAC表中存在这个MAC地址,就会将包发送到MAC地址对应的端口。下面我们来具体的介绍一下整体流程。

(2)具体流程

        假设现在计算机A向交换机发送了一个网络包,我们已经知道包在网络线路中传输之前已经被计算机网卡转换为了电信号,接着电信号(高低电平)流出计算机网卡的RJ-45接口进入双绞线,然后交换机的端口会不管三七二十一将信号一股脑的接收下来,电信号经由交换机“网卡”的RJ-45接口,并被连接接口的PHY/MAU信号收发模块转换成了通用信号,然后通用信号被交给了MAC模块,MAC模块将通用信号还原成了数字信号,根据数字信号重新得出数据信息(网络包)。

        这时,交换机首先会对包的FCS进行校验,如果和自己的计算结果对不上,就说明传输过程中电信号受到干扰造成波形紊乱,那么这个包就因为数据错误所以没有意义了,于是会被MAC模块直接丢弃,然后就会进入等待计算机的TCP模块注意到长时间没有ACK包返回而进行包的重发,接着就把上面的流程又重新走了一遍。如果对包的FCS进行校验没有问题,那么此时交换机才会查看包的MAC头部信息,根据其中的接收方MAC地址在自己的MAC表中进行查询,如果查询到存在这条记录,那么交换机就会将包发往MAC地址对应的端口,包经由该端口就被传输给了目标设备。

        如果MAC表中不存在包的接收方MAC地址所对应的记录呢?此时交换机就会通过广播的方式,向所有端口的连接设备发送这个包。你可能会问,那这不就和集线器一样了吗?两者之间的区别其实在于,交换机广播了这个包以后目标设备必然会返回一个含有确认信息的网络包给计算机A。而交换机收到这个ACK包以后,会自动记录下ACK包中目标设备的MAC地址。所以在下次发送包时,交换机中就存在了这个接收方的MAC地址,可以直接将包发送到对应的端口,也就不再需要进行广播了。同时,为了应对接口设备的物理变动,造成的MAC表中记录的端口号和MAC地址对不上的问题。交换机采取了定期对过时记录进行自动删除的方式(几分钟)。

        如果接收方 MAC 地址是一个广播地址(FF:FF:FF:FF:FF:FF) ,那么交换机会将包发送到除源端口之外的所有端口。

(3)全双工和自动协商

        全双工就是网卡中的发送线路接收线路相互独立,也就意味着可以同时进行信号的收发操作。我们先前所提到的双绞线,其实就是一种可以支持全双工工作模式的传输介质,这一点可以通过分析双绞线和对应的RJ-45接口的结构看出,双绞线分为四组线缆总共八根信号线,每组线缆都可以进行发送和接收,具体收发取决于网络设备的RJ-45接口对应针脚和设别收发线路的连接方式。

        既然有了全双工,就难免牵涉到全双工的切换问题。一般来说,我们在应用全双工之前,首先需要知道连接两端的设备是否支持全双工。举个形象的例子,假设现在有一台集线器和一台交换机正在连接。首先,我们知道集线器肯定是不可能支持全双工工作模式的,但交换机却是支持的。这时,在手动模式下,就需要我们将交换机的工作模式也切换成半双工,因为只有这样才能和集线器适配以正常进行通信传输。可每次都手动切换未免也太过麻烦了,因此网络设备直接实际上可以在连接时自动进行适配,自动切换成合适的工作模式和最佳的传输效率,这种机制就是自动协商。那么自动协商是如何实现的呢?

        事实上,在没有数据信号在网络线路中进行传输时,网络线路会自动被一种“脉冲信号”所填充。网络设备可以通过这种脉冲信号知悉对方有没有正常工作,同时这种脉冲信号具有特定的频率,连接双方可以通过这种具有特定频率的脉冲信号,相互告知对方自己所支持的工作模式和传输速率。工作模式和传输速率会按照优先级被从高到低进行排列,具体的规则是全双工优先级高于半双工,高速率优先级高于低速率,设备间会根据组合的模式速率优先级,从上到下选择最优组合


三、路由器

        我们之前已经提到过,路由器的出现主要是为了应对由于设备急剧增加带来的网络规模扩大产生的问题。因为交换机的MAC表长度是有限的,如果对于规模庞大的网络仍然采用交换机进行连接,那么交换机的MAC表就不得不记录网络中的每一台设备的MAC地址,这显然是不切实际的。更不用说在查询到包的接收方是没有记录在MAC表的设备,而向网络中的所有设备发送广播所造成的信息泛洪。

(1)IP地址

        在介绍路由器前,我们首先需要重新介绍一下IP地址。我们已经知道,在一个局域网内设备间的相互通信可以通过交换机的MAC地址转发来实现,那么为什么还会需要IP地址呢?有MAC地址不就够了吗?这个问题的答案和前面提到的一样:交换机MAC表的长度有限,在网络规模扩大时无法记录下所有设备的MAC地址。于是我们可以采取这么一种思想:为每一个局域网取一个独一无二的别名,跨子网直接的通信通过这个别名来进行实现,也就意味着我们可以通过别名+MAC地址(别名对外,MAC地址对内)的方式锁定某一个局域网中的某一台设备,这大大缓解了交换机MAC表的使用。而这种局域网的别名其实就是我们所说的IP地址

集线器和交换机是用来建立局域网的,路由器将这些局域网相互连接形成网络。

        IP地址并无法取代MAC地址的工作,IP地址可以定位某一个网络的某一台设备,但包实际上还是只能在以太网中进行传输,而以太网的信号传输是基于MAC地址的。IP地址和MAC地址之间是一种协作关系,IP地址负责判断传输方向(火车司机),MAC地址负责具体的传输工作(火车)。这和TCP/IP协议的分层思想可以相互映衬:IP地址属于网络层,MAC地址属于网络层下方的数据链路层。这种分层设计还有利于在通信技术变更时的灵活性,假如我们不用以太网的方式传输,而采用无线局域网,那么此时IP地址依旧可以正常工作,只是底层的传输技术改变了。

        我们刚刚提到的局域网的别名其实是公网IP,公网IP是用来作为局域网在互联网中的身份标识的,代表整个局域网。而局域网的内部实际上也可以使用IP地址,这种对内使用的IP地址被称为私网IP,它可以用来标识局域网内的某个具体设备。因为私网IP不会对外部网络开放,因此也就不用确保它们的唯一性,我们日常在家庭网络中看到某台设备的IP地址为192.168.1.X,这个地址其实就属于局域网的私网IP。

        如今我们知道了IP地址可以标识某个子网下的某台设备,而实际的信号传输离不开数据链路层的MAC地址。下面通过讲解路由器的基本组成和工作流程,我们可以加深对IP地址、MAC地址和路由器三者之间关系的认识。

(2)内部结构

        简单来讲,路由器的内部由两个模块构成:转发模块端口模块。端口模块负责具体的收发操作,而转发模块负责判断发送给谁。转发模块和端口模块之间就像IP模块和网卡之间的关系。端口模块由路由器所采用的通信技术所决定,如果端口模块采用的是以太网的传输方式,那么我们可以理解为端口模块其实就是一张网卡(内存+MAC模块+PHY/MAU信号收发模块+RJ-45接口),端口模块还可以采用支持ADSL、FTTH或其他通信技术,不同的路由器可以有不同的端口模块。但是归根结底,端口模块的工作是实现模拟信号(电信号或光信号等)和数字信号之间的相互转换。

        转发模块的内部有一张路由表,这个路由表可以说是路由器的核心。路由表中包含了一条条数据项,这些数据项由目标地址、子网掩码、网关、接口跃点数组成。下面来介绍一下这些内容具体是什么、有什么用。

        目标地址是一个公网IP,用来和包的IP头部中的接收方IP地址进行比对;子网掩码是一串32位比特位,用来确定目标地址的网络号主机号。这样做的原因是因为在做IP地址比对时,路由器只会对目标地址的网络号部分进行比对,而主机号一般是用来确认局域网内某台具体设备的;网关的英文名是Gateway,是确认通向目标地址的下一个最近的路由器的IP地址(如果没有下一个地址,就意味着包已经进入了目标网络,就会进行局域网内的MAC转发);接口用来指向通往目标地址时,信号应该从路由器的哪个接口发出;跃点数的应用场景是包的接收方IP地址和目标地址相匹配的同时存在多条目标地址网络号长度相同的匹配数据项,那么路由器就会根据跃点数的大小来进行选择(跃点数越大,说明跳转路径越长;跃点数越小,说明跳转路径越短)。

        简单来说,转发模块的工作是确认包传输的下一个路由器的位置。通过比对路由表的内容和包的接收方IP地址,从而找到通往目的地的下一个路由器的位置,改写头部控制信息并进行传输。

(3)具体流程

        下面我们来梳理一下路由器的工作流程。首先,源主机要发送一个网络包,网卡根据包中目标服务器的IP地址在自己的路由表中查询,查询到了最近路由器的IP地址(也就是网关)。接着被网卡转换成模拟信号的包(根据ARP获取的MAC地址)被发往了路由器,路由器接收到模拟信号后会将其转换成数字信号(网络包),并核对包的接收方MAC地址,看是不是发送给自己的。这里需要注意的是,路由器的端口拥有自己独立的MAC地址和IP地址,这里和集线器和交换机是不一样的,同时也意味着一个路由器可能拥有多个不同的IP地址。核对完,MAC地址后路由器会继续校验包的FCS是否正确(交换机也做了同样的工作)。

        到这里,包的MAC头部实际上就已经完成使命,并被丢弃掉了。可以理解为现在的网络包只有IP头部+TCP包。下一步会进入路由器的转发模块,转发模块会根据包的IP头部中的接收方IP地址,在自己的路由表中进行查询,查找是否存在对应的目标地址。如果路由表没有找到对应的目标地址,就会直接发送到默认网关,这里的默认网关实际上就是目标地址为0.0.0.0、网关为接入互联网的路由器的IP地址。如果路由表中存在对应的目标地址记录,转发模块就会重新为包生成一个MAC头部,这个新的MAC头部的接收方MAC地址是对应记录网关一栏的MAC地址(通过ARP获取),而发送方的MAC地址就是对应记录接口一栏(路由器端口)的MAC地址。于是相当于包的MAC头部信息被完全重写,从中我们也可以看出实际的传输工作还得依靠MAC地址进行。

        有人可能会问,那么包的IP头部信息(收发方IP地址)是否同样会被重写呢?这里卖个关子,稍后进行讲解。转发模块新生成的MAC头部会被添加到网络包中,然后转发模块根据包的MAC头部信息将其交给对应的端口,端口模块重新将数字信息转换成模拟信号,通过接口把模拟信号传输了出去,于是包再一次进入网络线路,被发往记录网关对应的网络设备,如此循环往复直到到达目标服务器。

        这里有两个需要值得注意的点:包的有效期(TTL)和路由器的IP分片

        还记得我们先前提到路由器会重写网络包的MAC头部控制信息,那么它是否会对IP头部控制信息进行重写呢?答案是分情况。在网络包已经离开局域网进入外部网络后,在外部网络的路由器间相互流转的网络包的IP头部信息并不会被修改,因为此时网络包的IP头部的收发者IP地址已经被固定了,并且此时的IP头部信息在整个传输阶段中起到指引作用,是不能被进行修改的。可以确定的是接收方IP地址就是目标服务器的IP地址,而发送方IP地址是源主机的IP地址。

        那么什么时候IP地址会被修改呢?让我们先来看这么一个问题,我们知道在源主机刚开始向目标服务器发送信息时,包的IP头部信息是在源主机的网卡内生成的,接收方的IP地址我们可以通过DNS方式获取,但是发送方的IP地址最终是要记录在目标服务器的套接字中的。想一想此时包的发送方IP地址是什么呢?有人可能会说是计算机的IP地址。但是我们先去提到过在局域网中计算机的IP地址是私网IP地址,事实上网卡写入包IP头部的发送方IP地址也是私网地址。问题现在产生了,这岂不是意味着目标服务器在接收到这个包后,写入自己套接字的发送方IP地址是一个私网IP地址?!并且会凭借这个私网IP地址(192.168.0.X)和源主机进行通信?

        我们知道这是根本不可能发生的,因为私网IP只适合在局域网内进行使用,而在源主机到目标服务器这种跨过了许多不同网段的通信过程,使用私网IP进行通信更是天方夜谭。那么这其中到底有什么奥秘?为什么源主机将自己的私网IP写入包的发送方IP地址后,目标服务器还能识别出源主机在互联网的位置,并建立通信呢?不知道各位还记不记得,先前我们提到过每一个局域网实际上都会有一个独一无二的公网IP作为在互联网的唯一标识。而路由器的工作之一就是负责将源主机所在局域网的公网IP写入包的IP头部,将发送方的私网IP“改写”成公网IP,然后目标服务器就能根据这个公网IP确定源主机在互联网中的位置。这就是路由器会对包的IP头部进行修改的情况,既源主机的包从局域网内发往外部网络的这个中间过程,完成对IP地址的“改写”

        这个过程中所采取的技术手段就是NAT(网络地址转换)端口映射

        交换机和路由器之间的关系在于,路由器也可以是一台交换机,因为路由器存在WAN口和LAN口两种不同的接口,LAN口用于局域网这类内部通信,而WAN口连接了ISP(网络服务提供商)的网络用于接入互联网。如果我们不看WAN口,那么路由器就是一台用于局域网内部通信的“交换机”,且工作原理也是和交换机相同的(MAC表寻址)。 这也就意味着路由器实际上维护有三张表:① 用于做交换机式定向转发的MAC表;② 用于进行路由寻址的路由表;③ 用于实现NAT和端口映射的转换表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值