写在前面的话,只有你自己知道你是否真的努力了,不要在看似努力的外表下浪费时间,表演给别人看,自己的提高才
是真的。这一章我们开始学习集线器,交换机和路由器,由于这一章实在是太艰涩难懂了,所以所记录的笔记我会简略一些
,那么我们开始吧!
这次的笔记我希望能回答如下问题:
1:信号从计算机流出后,会在网线中经过集线器等设备前进,那么,信号是如何在网线和集线器传输的?
2:信号在传说过程中会衰减,还会受到噪声干扰而失真,如何抑制这些影响呢?
3:交换机的工作方式是什么样的呢?
交换机并不只是简单地让信号 流过,而是先接收信号并将其还原为数字信息,
然后再重新转换成信号并发送出去的过程。这里我们将详细探索这一过程。
4:路由器是如何进行包转发操作的呢?
5:路由器与交换机是什么关系呢?
6:路由器还有什么其他的附加功能呢?(地址转换和包过滤)
我会在下面的笔记中按个回家上面的问题,希望大家看完以后能收货满满,欢迎拍砖!!!
信号是如何在网线和集线器传输的?
首先,大家要明白一个观点:每一个包都是独立传输的
为什么呢?大家应该知道,计算机发送出来的网络包会通过集线器,路由器等设备转发,最
后才会到大目的地,而这这些转发设备是根据包头部中的控制信息,在转发设备内部一个写
有转发规则的表中进行查询,以此来判断包的目的地,然后将包朝目的地方向进行转发。
邮递员在发送信的时候不看里面的内容,同样的,转发设备在转发包时也不看数据的内容。
无论包里面装的是应用程序的数据或者是TCP协议的控制信息。都不会对包的传输操作本身产生影响。
因此,所有的包在传输到目的地的过程中都是独立的,相互之间没有任何关联。
了解了这个概念以后,我们现在开始探索之旅吧!
为了防止网线中的信号衰减,我们做了很多的努力
上面的两个图连起来才是一副整图。
我们从信号流网卡进入网线开始:
。网卡中的PHY(MAU)A模 块负责将包转换成电信号,信号通过RJ-45接口进入双绞线,这部分的放
大图如图3.2的右侧部分所示。以太网信号的本质是正负变化的电压,大
家可以认为网卡的PHY(MAU)模块就是一个从正负两个信号端子输出信 号的电路。
PHY(MAU):以太网有多重派生方式,每种方式中信号收发模块的名称都 不一样。现在 100
Mbit/s 以上的以太网中叫作 PHY(物理层装置),以前低 速方式中则叫作
MAU(介质连接单元)。
网卡的PHY(MAU)模块直接连接图3.2 右侧中的RJ-45 接口,信号
从这个接口中的1号和2号针脚流入网线。然后,信号会通过网线到达集
线器的接口,这个过程就是单纯地传输电信号而已。
但是,信号到达集线器的时候并不是跟刚发送出去的时候一模一样。
集线器收到的信号有时会出现衰减(图 3.3)。 信号在网线的传输过程中,
能量会逐渐损失。网线越长,信号衰减就越严重。
同时,信号损失能量并非只是变弱而已。在第2章的图2.25、图2.26、
图2.27中我们已经看到,以太网中的信号波形是方形的,但损失能量会让
信号的拐角变圆,这是因为电信号的频率越高,能量的损失率越大 A。信号
的拐角意味着电压发生剧烈的变化,而剧烈的变化意味着这个部分的信号
频率很高。高频信号更容易损失能量,因此本来剧烈变化的部分就会变成
缓慢的变化,拐角也就变圆了。
即便线路条件很好,没有噪声,信号在传输过程中依然会发生失真,
如果再加上噪声的影响,失真就会更厉害。噪声根据强度和类型会产生不
同的影响,无法一概而论,但如果本来就已经衰减的信号再进一步失真,
就会出现对0和1的误判,这就是产生通信错误的原因。
为了抑制噪声,我们用双绞:
局域网网线使用的是双绞线,其中“双绞”的意思就是以两根信号线
为一组缠绕在一起,这种拧麻花一样的设计是为了抑制噪声的影响。
关于为什么??我这里就不写了,看不懂,大家看图吧.
除此之外还有其他的一些公益也能够提升性能:
。例如在 信号线之间加入隔板保持距离,以及在外面包裹可阻挡电磁波的金属屏 蔽网等。有了这些工艺的帮助,我们现在可以买到性能指标不同的各种
网线。
从网线到接线器,接线器的工作
当信号到达集线器后,会广播到整个网络中。以太网的基本架构就是将包发到所有的设备,然后由设备根据接收方MAC地址来判断应该接收那些包,
而集线器就是这一架构的忠实实现,它就是负责按照以太网的基本架构将信号广播出去的。
下面我们看它的工作方式:
集线器的内部结构如图3.2左侧所示。
首先,在每个接口的后面装有和网卡中的PHY(MAU)功能相同的模块,但是如果他们像网卡短一样采用直连式连线,是无法正常接收信号的,要正常接收信号,必须将“发送线图”和“接收线图”连接起来。在图3.2中,集线器中的PHY(MAU)模块与接口之间采用交叉接线的原因正式于此。
集线器的接口中有一个MDI/MDI-XB 切换开关,现在你应该知道它是干什么用的了吧A?
MDI就是对RJ-45接口和信号收发模块进行直连接线,
而MDI-X则是交叉接线。由于集线器的接口一般都是MDI-X模式,要将
两台集线器相连时,就需要将其中一台改成MDI模式(图3.5(a))。 如果
集线器上没有MDI切换开关,而且所有的接口又都是MDI-X时,可以用
交叉网线连接两台集线器。所谓交叉网线,就是一种将发送和接收信号线 反过来接的网线
信号到达集线器的PHY(MAU)模块后,会进入中继电路。中继电路
的基本功能就是将输入的信号广播到集线器的所有端口上。当然,也有一
些产品具有信号整形、错误抑制等功能,但基本上就是将输入的信号原封
不动地输出到网线接口。
接下来,信号从所有接口流出,到达连接在集线器上的所有设备。然
后,这些设备在收到信号之后会通过MAC头部中的接收方MAC地址判
断是不是发给自己的,如果是发给自己的就接受,否则就忽略 A。这样,网
络包就能够到达指定MAC地址的接收方了。
由于集线器只是原封不动地将信号广播出去,所以即便信号受到噪声
的干扰发生了失真,也会原样发送到目的地。这时,接收信号的设备,也
就是交换机、路由器、服务器等,会在将信号转换成数字信息后通过FCSA
校验发现错误,并将出错的包丢弃。当然,丢弃包并不会影响数据的传输,
因为丢弃的包不会触发确认响应。因此协议栈的TCP模块会检测到丢包, 并对该包进行重传。
看到这里,大家应该对上面的问题有了一个大概的理解了。下面我们看第二个问题:
2.交换机的工作方式是什么样的呢?
交换机的工作方式是什么样的呢?也就是包时如何通过交换机的呢?交换机的设计师将网络包鸳鸯的转发到目的地。看下图:
首先,当信号到达网线接口,并由PHY(MAU)模块进行接收,这一部分和集线器是相同的。。也就
是说,它的接口和PHY(MAU)模块也是以 MDI-X模式进行连接的
B,当信号从双绞线传入时,就会进入PHY(MAU) 模块的接收部分。
接下来,PHY(MAU)模块会将网线中的信号转换为通用格式,然后
传递给MAC模块。MAC模块将信号转换为数字信息,然后通过包末尾的
FCS校验错误,如果没有问题则存放到缓冲区中 。这部分操作和网卡基本
相同,大家可以认为交换机的每个网线接口后面都是一块网卡。网线接口
和后面的电路部分加在一起称为一个端口,也就是说交换机的一个端口就
相当于计算机上的一块网卡 。但交换机的工作方式和网卡有一点不同。网
卡本身具有MAC地址,并通过核对收到的包的接收方MAC地址判断是
不是发给自己的,如果不是发给自己的则丢弃;相对地,交换机的端口不
核对接收方MAC地址,而是直接接收所有的包并存放到缓冲区中。因此,
和网卡不同,交换机的端口不具有MAC地址 。
将包存入缓冲区后,接下来需要查询一下这个包的接收方MAC地址
是否已经在MAC地址表中有记录了。MAC地址表主要包含两个信息,一
个是设备的MAC地址,另一个是该设备连接在交换机的哪个端口上。以
图3.7中的地址表为例,MAC地址和端口是一一对应的,通过这张表就能
够判断出收到的包应该转发到哪个端口。举个例子,如果收到的包的接收
方MAC地址为00-02-B3-1C-9C-F9,则与图3.7的表中的第3行匹配,根
据端口列的信息,可知这个地址位于8号端口上,然后就可以通过交换电
路将包发送到相应的端口了 B。
3.交换电路又是如何工作的呢?
这个就牛逼了。交换点图的结构如图,它可以将输入端和输出端连接起来。
其中,信号线排列成网格状,每一个交叉点都有一个交换开关。交换点图的输入端和输出端分别连接各个接收端口和发送端口,网络包通过这个网格状的电路在端口之间流动。
牛逼吧。举个例子:
假设现在要将包从2号端口发送到7号端口,那么信号会从输入端
的2号线进入交换电路,这时,如果让左起的6个开关水平导通,然后将
第7个开关切换为垂直导通,信号就会像图上一样流到输出端7号线路, 就像水一样流过去了。
于是网络包就被发送到了7号端口。
当网络包通过交换电路到达发送端口时,端口中的MAC模块和PHY
(MAU)模块会执行发送操作,将信号发送到网线中,这部分和网卡发送信 号的过程是一样的。
根据以太网的规则,首先应该确认没有其他设备在发
送信号,也就是确认信号收发模块中的接收线路没有信号进来。如果检测
到其他设备在发送信号,则需要等待信号发送完毕;如果没有其他信号,
或者其他信号已经发送完毕,这时就可以将包的数字信息转换为电信号发 送出去
如果在发送过程中检测到其他设备发送信号,就意味着出
现了信号碰撞,这时需要发送阻塞信号以停止网络中所有的发送操作,等
待一段时间后再尝试重新发送,这一步和网卡也是一样的
交换机根据MAC地址表查找MAC地址,然后将信号发送到相 应的端口。
那么,交换机是怎么维护MAC地址表的呢?
维护操作有两种:
第一种:是收到包时,,将发送方MAC地址以及其输入端口的号码写入 MAC地址表中。
由于收到包的那个端口就连接着发送这个包的设备,所以
只要将这个包的发送方MAC地址写入地址表,以后当收到发往这个地址
的包时,交换机就可以将它转发到正确的端口了。交换机每次收到包时都
会执行这个操作,因此只要某个设备发送过网络包,它的MAC地址就会 被记录到地址表中。
第二种:删除地址表中的某条记录。
这是为了为防止设备移动时产生问题:
那么如果笔记本电脑拿到会议室以后,会议室里的交换机又如何工作的呢?
只要笔记本电脑连接到会议室的交换机,交换机就会根据笔记本电
脑发出的包来更新它的地址表。因此,对于目的地的交换机来说,不需要
什么特别的措施就可以正常工作了。
总之,交换机会自行更新或删除地址表中的记录,不需要手动维护 A。
当地址表的内容出现异常时,只要重启一下交换机就可以重置地址表,也
不需要手动进行维护。
交换机的特有工作模式:全双工模式
全双工模式是交换机特有的工作模式,它可以同时进行发送和接收操 作,集线器不具备这样的特性。
使用集线器时,如果多台计算机同时发送信号,信号就会在集线器内 部混杂在一起,进而无法使用,这种现象称为碰撞,是以太网的一个重要 特征。不过,只要不用集线器,就不会发生碰撞。
而使用双绞线时,发送和接收的信号线是各自独立的 A,因此在双绞线
中信号不会发生碰撞。网线连接的另一端,即交换机端口和网卡的PHY
(MAU)模块以及MAC模块,其内部发送和接收电路也是各自独立的,信
号也不会发生碰撞。因此,只要不用集线器,就可以避免信号碰撞了。
如果不存在碰撞,也就不需要半双工模式中的碰撞处理机制了。也就
是说,发送和接收可以同时进行。然而,以太网规范中规定了在网络中有
信号时要等该信号结束后再发送信号,因此发送和接收还是无法同时进行。
于是,人们对以太网规范进行了修订,增加了一个无论网络中有没有信号
都可以发送信号的工作模式,同时规定在这一工作模式下停用碰撞检测 (图3.10)。
这种工作模式就是全双工模式。在全双工模式下,无需等待其
他信号结束就可以发送信号,因此它比半双工模式速度要快 B。由于双方可
以同时发送数据,所以可同时传输的数据量也更大,性能也就更高。
交换机可同时执行多个转发操作
交换机只将包转发到具有特定MAC地址的设备连接的端口,其他端
口都是空闲的。如图3.7中的例子所示,当包从最上面的端口发送到最下
面的端口时,其他端口都处于空闲状态,这些端口可以传输其他的包,因
此交换机可以同时转发多个包。
相对地,集线器会将输入的信号广播到所有的端口,如果同时输入多
个信号就会发生碰撞,无法同时传输多路信号,因此从设备整体的转发能
力来看,交换机要高于集线器。
在这里还有一个自动协商
,讲的是全双工模式
和半双工模式
的切换,以提高最优的传输速率,这里就不在详诉了。
下面我们来看第四个问题:
4:路由器是如何进行包转发操作的呢?
网络包经过集线器和交换机之后,现在到达了路由器,并在此被转发到下一个路由器,这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标。不过在具体的操作过程上,路由器和交换机是有区别的。为什么呢?
因为路由器是基于IP设计的,而交换机是基于以太网设计的。看图:
书上说,这个图画的已经非常的简略了,可是我还是看不懂怎么办呢?看下面书上说的:
大家只要看明白路由器包括转发模块和端口模块两部分就可以了。其中转
发模块负责判断包的转发目的地,端口模块负责包的收发操作。这一分工模
式在第2章介绍计算机内部结构的时候也出现过,换句话说,路由器转发模
块和端口模块的关系,就相当于协议栈的IP模块和网卡之间的关系。因此,
大家可以将路由器的转发模块想象成IP模块,将端口模块想象成网卡。
通过更换网卡,计算机不仅可以支持以太网,也可以支持无线局域网,
路由器也是一样。如果路由器的端口模块安装了支持无线局域网的硬件,
就可以支持无线局域网了。
。此外,计算机的网卡除了以太网和无线局域网
之外很少见到支持其他通信技术的品种,而路由器的端口模块则支持除局
域网之外的多种通信技术,如ADSL、FTTH,以及各种宽带专线等,只要
端口模块安装了支持这些技术的硬件即可
路由器的基本原理:
路由器在转发包时,首先会通过端口将发过来的包接收进来,这一步的工
作过程取决于端口对应的通信技术。对于以太网端口来说,就是按照以太
网规范进行工作,而无线局域网端口则按照无线局域网的规范工作,总之
就是委托端口的硬件将包接收进来。接下来,转发模块会根据接收到的包
的IP头部中记录的接收方IP地址,在路由表中进行查询,以此判断转发
目标。然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件
的规则将包发送出去,也就是转发模块委托端口模块将包发送出去的意思。
还有一些补充:
刚才我们讲到端口模 块会根据相应通信技术的规范来执行包收发的操作,这意味着端口模块是
以实际的发送方或者接收方的身份来收发网络包的。以以太网端口为例,
路由器的端口具有MAC地址 ,因此它就能够成为以太网的发送方和接收 方
。端口还具有IP地址,从这个意义上来说,它和计算机的网卡是一样
的。当转发包时,首先路由器端口会接收发给自己的以太网包 ,然后查询
转发目标,再由相应的端口作为发送方将以太网包发送出去。
这一点和交换机是不同的,交换机只是将进来的包转发出去而已,它自己并不会成为
发送方或者接收方。
路由器的各个端口都具有 MAC 地址和 IP 地址。
自己吐槽一下,这一篇我写的已经想吐了...
在查表判断转发目标
这一点上,路由器和交换机的大体思路是类似的,不过具体的工作过程有所不同。
交换机是通过MAC头部中的接收 方MAC地址来判断转发目标的,而路由器则是根据IP头部中的IP地址
来判断的。由于使用的地址不同,记录转发目标的表的内容也会不同。
那么,我们看一下路由表中的信息是什么样的?
路由器根据“IP 地址”判断转发目标。
最左侧的目标地址列记录的是接收方的信息。这里可能不是很容易理
解,实际上这里的IP地址只包含表示子网的网络号部分的比特值,而表示
主机号部分的比特值全部为0B。路由器会将接收到的网络包的接收方IP
地址与路由表中的目标地址进行比较,并找到相应的记录。交换机在地址
表中只匹配完全一致的记录,而路由器则会忽略主机号部分,只匹配网络 号部分
打个比方,路由器在转发包的时候只看接收方地址属于哪个区, ×× 区发往这一边,×× 区发往那一边。
在匹配地址的过程中,路由器需要知道网络号的比特数,因此路由表 中还有一列子网掩码。子网掩码的含义和第1章的图1.9(b)中介绍的子网 掩码基本相同,通过这个值就可以判断出网络号的比特数。
上面的介绍就是路由器的工作方式,如果想进一步学习,请看书。
这里我们看一下路由器的包接收操作的整个工作过程:
首先,路由器会接收网络 包。路由器的端口有各种不同的类型,这里我们只介绍以太网端口是如何
接收包的。以太网端口的结构和计算机的网卡基本相同,接收包并存放到
缓冲区中的过程也和网卡几乎没有区别。
首先,信号到达网线接口部分,其中的PHY(MAU)模块和MAC模
块将信号转换为数字信息,然后通过包末尾的FCS进行错误校验,如果没
问题则检查MAC头部中的接收方MAC地址,看看是不是发给自己的包,
如果是就放到接收缓冲区中,否则就丢弃这个包。如果包的接收方MAC
地址不是自己,说明这个包是发给其他设备的,如果接收这个包就违反了 以太网的规则。
路由器的端口都具有MAC地址,只接收与自身地址匹配的包, 遇到不匹配的包则直接丢弃
查询路由表确定输出端口
完成包接收操作之后,路由器就会丢弃包开头的MAC头部。MAC头
部的作用就是将包送达路由器,其中的接收方MAC地址就是路由器端口
的MAC地址。因此,当包到达路由器之后,MAC头部的任务就完成了, 于是MAC头部就会被丢弃。
通过路由器转发的网络包,其接收方 MAC 地址为路由器端口的 MAC 地址
如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过 ICMPA 消息告知发送方 B。
找不到匹配路由时选择默认路由
TODO 路由表中子网掩码为 0.0.0.0 的记录表示“默认路由”。
包的有效期
从路由表中查找到转发目标之后,网络包就会被转交给输出端口,并 最终发送出去,但在此之前,路由器还有一些工作要完成。
第一个工作是更新IP 头部中的TTL(Time to Live,生存时间)字段 (参见第2章的表2.2)。 TTL字段表示包的有效期,包每经过一个路由器的 转发,这个值就会减1,当这个值变成0时,就表示超过了有效期,这个 包就会被丢弃。
发送方在发送包时会将TTL设为64或128,也就是说包经过这么多 路由器后就会“寿终正寝”。
通过分片功能拆分大网络包
这里的分片拆包让我想到了第二章中TCP对数据的拆分,不是数据已经拆分过了吗,为什么这里还要分片呢?
这是因为路由器的端口并不只有以太网一种,也可以支持其他局域网或专线通信技术。不同的线图和局域网类型各自能传输的最大包长度也不同,因此输出端口的最大长度可能会小于输入端口。即使两个端口的最大包长度相同,也可能会因为添加一些头部数据而导致包的实际长度发生变化,ADSL
,FTTH
等宽带接入技术中使用的PPPoE
协议就属于这种情况。
那么它和TCP对数据进行拆分的机制有什么不同呢?
TCP
拆分数据的操作是在数据装在包里之前进行的。拆好好后的一个数据正好是装在一个包里的,而从IP分片的角度看,这样一个包其实是一个未拆分的整体,也就是说,分片是堆一个完整的包再进行拆分的过程。
下面我们看分片操作的具体过程,看下图:
首先,我们需要知道输出端口的MTU
。最大的包长度是由端口类型决定的。
在此之前还需要看一下IP头部中的标志字段,确认是否可以分片。
如果查询标志字段发现不能分片,那么就只能丢弃这个包,并通过ICMP
消息通知发送方。
标志是可以分片,则按照输出端口的MTU
对数据进行一次拆分。
在分片中,TCP
头部及其后面的部分都是可分片的数据,尽管TCP
头部不属于用户数据,但从IP来看也是TCP请求传输的数据的一部分。数据拆分后,每一份数据前面会加上IP头部,其大部分内容都和原本的头部一模一样,但其中有部分字段需要更新,这些字段用于记录分片相关的信息。大家看IP头部结构中的那张图,上面有两个字段关于分片的:
分片偏移量:表示当前包的内容为整个IP消息的第几个字节开始的内容
表示(FLAG):该字段有3个比特,其中2个比特有效,分别代表是否允许分片,以及当前当前包是否为分包
路由器的发送操作和计算机相同
到这里,发送前的准备工作就已经完成了,接下来就会进入包的发送操作。
而这一步操作取决于输出端口的类型。。如果是以太网端口,则按照以太
网的规则将包转换为电信号发送出去;如果是ADSL则按照ADSL的规则 来转换,以此类推。
这里,我们假设路由器位于公司等局域网的内部,即输出端口也是以太网,看看这种情况是如何操作的。
以太网的包发送操作是根据以太网规则来进行的,即便设备种类不同,
规则也是相同的。也就是说,其基本过程和协议栈中的 IP 模块发送包的过 程是相同的,即在包前面加上 MAC
头部,设置其中的一些字段,然后将 完成的包转换成电信号并发送出去。
首先:查表,我们需要通过查询路由表的网关列判断对方的地址。如果网关列是一个IP地址,则这个IP地址就是我们要
转发到目标的地址;如果网关为空,则IP头部中的接受放IP地址就是要转发到的目标地址。
然后:拿到IP地址之后,我们先在ARP缓冲中查询,如果找不到则发送ARP查询请求。
路由器判断下一个转发目标的方法如下。
如果路由表的网关列内容为IP地址,则该地址就是下一个转 发目标。
如果路由表的网关列内容为空,则 IP 头部中的接收方 IP 地址 就是下一个转发目标
接着:这里就是发送方的MAC地址字段,这里填写输出端口的MAC地址。还有一个以太类型字段,填写(0800十六进制)
网络包完成以后,接下来会将其转换成电信号并通过端口发送出去。这一步的工作过程和计算机是相同的。
例如当以太网工作在半双工模式时,需要先确认线路中有没有其他信号
才能发送。如果检测到碰撞,则需要等待一段时间后重发。如果以太网在全双工模式,则不需要确认线路中的信号,则可以直接发送。
如果输出端口为以太网,则发送出去的网络包会通过交换机到达下一个路由器。由于接收方MAC地址就是下一个路由器的地址,
所以交换机会根据这一地址将包传输到下一个路由器。接下来,下一个路由器会将包转发给再下一个路由器,经过层层转发之后,网络包就到达了最终的目的地。
路由器也会使用 ARP 来查询下一个转发目标的 MAC 地址
路由器与交换机的关系
书上说了很大一堆话来解释,一句话来概括:
路由器将包的传输工作委托给了交换机进行。
他们就像IP协议和以太网的关系,IP协议本身也没有传输包的功能,它也是把传输工作委托给以太网。路由器是基于IP设计的,而交换机是基于以太网设计的。
从包的转发目标来看:
IP并不是委托以太网将包传输到最终的目的地,而是传输到下一个路由器。
在创建MAC头部时,也是从IP的路由表中查找出下一个路由器的IP地址,并通过ARP查询出MAC地
址,然后将MAC地址写入MAC头部中,这表示IP对以太网的委托只是将包传输到下一个路由器就行
了。当包到达下一个路由器后,下一个路由器又会重新委托以太网将包传输到下一个路由器。随着这一过程反复执行,包就会最终到达IP的目的地,也就是通信的对象。
IP(路由器)负责将包送达通信对象这一整体过程,而其中将包 传输到下一个路由器的过程则是由以太网(交换机)来负责的。
路由器的附加功能--地址转换
1.通过地址转换有效利用 IP 地址
这里我们需要解释一下地址转换功能出现的背景。所谓地址,就是用来识别每一台设备的标志,
因为每台设备都应该有一个唯一不重复的地址。
私有地址:规定某些地址是用于内网的,这些地址就叫做私有地址。面向公司内部的。
共有地址:原来的固定地址,面向互联网的。
在制定私有地址规则时,这些地址属于公有地址中还没有分配的范围。
换句话说,私有地址本身并没有什么特别的结构,只不过是将公有地址中
没分配的一部分拿出来规定只能在内网使用它们而已。这个范围中的地址
和其他公司重复也没关系,所以对于这些地址不作统一管理,不需要申请,
任何人都可以自由使用。当然,如果在公司内部地址有重复就无法传输网
络包了,因此必须避免在内网中出现重复的地址。
尽管这样的确能节省一部分地址,但仅凭这一点还无法完全解决问题。
公司内网并不是完全独立的,而是需要通过互联网和其他很多公司相连接,
所以当内网和互联网之间需要传输包的时候,问题就出现了,因为如果很
多地方都出现相同的地址,包就无法正确传输了。
于是,当公司内网和互联网连接的时候,需要采用图3.17 这样的结
构,即将公司内网分成两个部分,一部分是对互联网开放的服务器,另一
部分是公司内部设备。其中对互联网开放的部分分配公有地址,可以和互
联网直接进行通信,这一部分和之前介绍的内容是一样的。相对地,内网
部分则分配私有地址,内网中的设备不能和互联网直接收发网络包,而是
通过一种特别的机制进行连接,这个机制就叫地址转换。
2.地址转换的基本原理
地址转换的基本原理是在转发网络包时对IP头部中的IP地址和端口号进行改写。
具体的过程我们看图说:
假设现在要访问Web服务器,看看包是如何传输的?
首先,TCP 连接操作的第一个包被转发到互联网时,会像图3.18 这
样,将发送方IP地址从私有地址改写成公有地址。这里使用的公有地址是
地址转换设备 的互联网接入端口的地址。与此同时,端口号也需要进行改
写,地址转换设备会随机选择一个空闲的端口。然后,改写前的私有地址
和端口号,以及改写后的公有地址和端口号,会作为一组相对应的记录保
存在地址转换设备内部的一张表中。
具备地址转换功能的设备不仅有路由器,有些防火墙也有地址转换功能,
它的工作方式和路由器是相同的,因此这里我们虽然用了地址转换设备这
个词,但在这里的上下文中指的就是路由器。
改写发送方IP地址和端口号之后,包就被发往互联网,最终到达服务
器,然后服务器会返回一个包。服务器返回的包的接收包是原始包的发送
方,因此返回的包的接收方就是改写后的公有地址和端口号。这个公有地
址其实是地址转换设备的地址,因此这个返回包就会到达地址转换设备。
接下来,地址转换设备会从地址对应表中通过公有地址和端口号找到
相对应的私有地址和端口号,并改写接收方信息,然后将包发给公司内网,
这样包就能够到达原始的发送方了。
在后面的包收发过程中,地址转换设备需要根据对应表查找私有地址
和公有地址的对应关系,再改写地址和端口号之后进行转发。当数据收发
结束,进入断开阶段,访问互联网的操作全部完成后,对应表中的记录就 会被删除。
通过这样的机制,具有私有地址的设备就也可以访问互联网了。从互
联网一端来看,实际的通信对象是地址转换设备(这里指的是路由器)。
上面是以公司内网为例来进行介绍的,家庭网络中的工作过程也是完
全相同的,只是规模不同而已。
从互联网访问公司内网
对于从公司内网访问互联网的包,即便其发送方私有地址和端口号没
有保存在对应表中也是可以正常转发的,因为用来改写的公有地址就是地
址转换设备自身的地址,而端口号只要随便选一个空闲的端口就可以了,
这些都可以由地址转换设备自行判断。然而,对于从互联网访问公司内
网的包,如果在对应表中没有记录就无法正常转发。因为如果对应表中
没有记录,就意味着地址转换设备无法判断公有地址与私有地址之间的对 应关系。
换个角度来看,这意味着对于没有在访问互联网的内网设备,是无法
从互联网向其发送网络包的。而且即便是正在访问的设备,也只能向和互
联网通信中使用的那个端口发送网络包,无法向其他端口发送包。也就是
说,除非公司主动允许,否则是无法从互联网向公司内网发送网络包的。
这种机制具有防止非法入侵的效果
不过,有时候我们希望能够从互联网访问公司内网,这需要进行一些
设置才能实现。之所以无法从互联网访问内网,是因为对应表里没有相应
的记录,那么我们只要事先手动添加这样的记录就可以了(图3.19)。 一般
来说,用于外网访问的服务器可以放在地址转换设备的外面并为它分配一
个公有地址,也可以将服务器的私有地址手动添加到地址转换设备中,这
样就可以从互联网访问到这台具有私有地址的服务器了 B。
路由器的附加功能呢--包过滤功能
下面来介绍一下包过滤功能。包过滤也是路由器的一个重要附加功能,
刚才的地址转换看起来有点复杂,不过包过滤的机制并不复杂。包过滤就
是在对包进行转发时,根据MAC头部、IP头部、TCP头部的内容,按照 事先设置好的规则决定是转发这个包,还是丢弃这个包。我们通常说的防 火墙设备或软件,大多数都是利用这一机制来防止非法入侵的。
包过滤的原理非常简单,但要想设置一套恰当的规则来区分非法访问
和正常访问,只阻止非法入侵而不影响正常访问,是非常不容易的。举个
例子,为了防止从互联网非法入侵内网,我们可以将来自互联网的所有包
都屏蔽掉,但是这会造成什么结果呢?正如我们第2章介绍过的TCP的工
作过程一样,网络包是双向传输的,如果简单地阻止来自互联网的全部包,
那么从内网访问互联网的操作也会无法正常进行。
这个话题其实非常有趣,由于包过滤的使用方法和服务器的工作相关, 所以我们在探索服务器时再详细介绍吧。
当网络包通过互联网接入路由器之后,它终于要进入互联网内部了, 下一章将对这一部分进行探索。
过几天再写一篇总结,已经吐了 Over...