网络寻址过程
一、网联网
1.1、局域网与互联网
局域网
一个最简单的局域网就是家庭用的WLAN,再者你所在的公司或者学校一般也都是一个小的局域网。
互联网
互联网(internet),又称国际网络,指的是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。给你一个简单的解释,就是将上述的大大小小的局域网连接起来,便形成了互联网。
互联网由大大小小的网络组合而成,路由器、交换机、网关等实现了互联网的组网和接入网方式。
二、一封情书的旅程
2.1、局域网内部寻址过程
这么一个现实的场景
你和如花小姐姐在一个城市,你很想他你搬砖之余给如花写了一封情书如上所示(有点重口味了,哈哈)
分析一下这封信,除了你对如花的爱,还能分析出什么呢?假设你办公室里两台计算机,要进行通信,你的计算机是IP1,MAC1,目标计算机是IP2,MAC2给你捋一个对应关系
致如花的一封信 | 通信 | 对应层级 |
---|---|---|
同城市 | 局域网内 | --- |
XXOO | DATA | 应用层 |
你 | 源MAC1 | 数据链路层 |
如花 | 目标MAC2 | 数据链路层 |
信 | 物理层的比特流 | 物理层 |
邮寄的过程 | 物理层的数据传输媒介 | 物理层 |
你和如花在一个城市,所以你给他的情书,都可以十一路亲自送到如花家里。这个过程类似于局域网内部主机通信,如果两台机器互相知道其MAC地址可以直接交流,前提是互相知道彼此的MAC地址,就像你认识如花一样。如果不认识,就要通过广播找到如花家的地址然后你才能将情书送过去。
是不是很形象?
看标题为什么说是局域网内部寻址过程呢?你会发现整个过程中并没有用到IP地址(并不是真的不需要IP地址,需要局域网IP地址,不过这个地址是用来去获取目标及其的MAC地址用的),只是用到了MAC地址。局域网内部的主机互联互通只需要MAC地址,而不需要IP地址,IP地址的作用是不同局域网的互联互通。
PS:如今比较流行的组网方式是一个逻辑整体(公司,学校等)或者一个区域组一个局域网,再通过交换机接入Internet。因为在局域网
中IP只是逻辑上的划分,不信你可以在你所在的公司或者学校修改一下自己的IP(最好是最后一段),依然能够连上网络。这样的话,
每个人都可以随意修改IP,IP != 用户。所以MAC地址这个时候就有用了,只有MAC地址才能表示用户。交换机中保存了 MAC <-> IP 的
映射关系。局域网访问互联网的唯一通道就是交换机。
2.2、互联网寻址过程
4.1中的你写给如花的信件,始终没有说到一个重要的信息,那就是邮编。
PS: 这里将邮编等同于地址,地址和邮编作用差不多,一般的地址会比邮编的定位更加详细,邮编是地理地址数字化的结果,具体请搜索邮
编的作用,我们这里把邮编 == 地址
如果你跟如花不在一个城市,她在上海,你在北京,十一路不好使了,你写给如花的信件就要通过邮局才能邮寄到如花手里。邮局就像是互联网,将大家联系起来,能够实现信件互通。
同样类比两台主机的通信,你的主机IP1,MAC1,如花的主机IP2,MAC2。 再来罗列一下这个对应关系。
致如花的一封信 | 通信 | 对应层级 |
---|---|---|
不同公司 | 互联网 | --- |
XXOO | DATA | 应用层 |
你的邮编 | IP | 网络层 |
如花的邮编 | IP | 网络层 |
你 | 源MAC1 | 数据链路层 |
如花 | 目标MAC2 | 数据链路层 |
信 | 物理层的比特流 | 物理层 |
邮寄的过程 | 物理层的数据传输媒介 | 物理层 |
你把信放到北京邮政,北京邮政将信件送到上海邮政,然后上海邮政再把信件送到如花手中。上述过程像是两台在不同网络内的计算机通信,邮编是什么?邮编就是IP地址,当两台通信的主机不在同一个局域网内,就需要使用IP地址找到对方所在的局域网,到达局域网内再通过MAC地址将数据送达具体的主机。
从上面两个章节,可以看到这封情书的旅程有点复杂。
- 北京邮政将信件邮寄到上海邮政
- IP寻址:网络层的工作,通过IP一个局域网到另一个局域网
- 上海邮政再将信件送到如花手中
- MAC寻址:数据链路层工作,局域网内寻址
这里还有一个问题:为什么上海邮政能找到如花?因为如花之前在上海邮政邮寄过信件,然后上海邮政知道如花的具体地址。类比到
互联网上,从一个局域网到另一个局域网,那“另一个局域网”怎么找到目标主机的呢?其实上面已经解释了,当前主流的组网方式是
大大小小的局域网通过交换机连接到互联网,交换机就是你所在的局域网的出入口,你也可以验证一下这一点,如果你在家并且你家有
路由器的wifi,两台连接wifi的手机或电脑百度IP地址,你会发现两台设备的IP地址是一样的,get?。交换机也维护了一个ARP表,接
下来就不解释为什么交换机能找到目标主机了。你应该懂了。
三、正经的网络寻址过程
第四章节中详细介绍了你和如花的爱情,这个章节正经点,说说网络寻址到底是怎样一个过程。
如上图,现在有发送发:A,接收方:B
- 主机A
- 主机A将数据发送到交换机1
- 网络层封包 IP1 --> IP2
- 数据链路层封包:MAC1 --> MAC3
- 物理层将数据转为比特流通过媒介发送数据
- 交换机1
- 交换机1将数据发送到路由器
- 网络层封包 IP1 --> IP2
- 数据链路层封包:MAC3 --> MAC4
- 物理层将数据转为比特流通过媒介发送数据
- 路由器
- 路由器将数据发送到交换机2
- 网络层封包 IP1 --> IP2
- 数据链路层封包:MAC4 --> MAC5
- 物理层将数据转为比特流通过媒介发送数据
- 交换机2
- 交换机2将数据发往主机B
- 网络层封包 IP1 --> IP2
- 数据链路层物理层封包:MAC5 --> MAC2
- 将数据转为比特流通过媒介发送数据
如上所示整个过程就完成了,值得注意的一点是网络层始终都是IP1-->IP2。不断变化的是数据链路层的MAC地址。
以上过程有几个前提,AB主机的IP1和IP2都是外网IP,但是外网IP是有限的,一般的局域网内主机使用的都是内网IP,只有接入互联网的网关(家庭宽带的光猫)才会给分配一个外网的IP。也就是说交换机1和交换机2才是公网IP,这样的话私有IP寻址的问题如何解决?答案是NAT技术。
看红色部分,为什么主机A能找到交换机1?交换机1能找到路由器...
看蓝色部分,为什么主机A知道交换机1的MAC地址为MAC3,交换机1知道路由器的MAC3...
如果主机AB使用的都是内网IP,他们如何找到对方?
带着这三个问题继续往下看。
四、ARP协议与RARP协议
ARP(Address Resolution Protocol),即地址解析协议。ARP表中维护了IP --> MAC地址的映射,另外其为了知道映射关系,需要询问网内的主机,让对方告知其MAC地址,即询问目标IP对应的MAC地址。这也是三章节中,为什么主机A知道交换机1的MAC地址的原因。
如上图所示,如果我们运行一个简单的命令,ping 192.168.1.1(IP2),整个过程大致分为两步。
- 广播:询问IP2的mac地址。并告知对方自己的IP和MAC地址
- 响应:IP2回复IP1自己的MAC地址
我们再来细化这个过程
- IP1:
- 查找本地APR地址表
- 首先IP1会在本地ARP地址表中查找,是否知道IP2的MAC地址。
- 如果ARP中存在。直接读取MAC2。
- 如果不知道
- 发起广播:询问IP2的mac地址。并告知对方对方自己的IP和MAC。
- 目标主机收到广播进行相应
- 不是目标的主机收到广播,不响应
- IP2:
- 收到IP1的广播并记录:将广播中携带的IP1的IP和MAC地址写入IP2的本地ARP表。
- 响应IP1。告知对方自己是IP2,MAC为MAC2
- IP1:
- 收到响应,将其MAC地址写入ARP表中。
arp -a然你看看自己真实的ARP缓存表
4.1、ARP欺骗
ARP协议的基本功能是以广播的形式通过目标主机的IP地址查询目标主机MAC地址。网络内的主机都可以进行ARP应答,如果黑客将自己的主机侵入到你所在的网络内,当一台主机A发起ARP广播,黑客机器进行ARP应答,这样就导致A主机会将接下来的数据发送到黑客机器。
这就是ARP欺骗。
由上可知ARP欺骗的主要原因在于发起广播的主机无法验证应答主机的真伪。
看到了上述的原因,如何解决呢?
ARP欺骗的防范方法:
- 网关定时发送IP/MAC映射
- 静态ARP
- DHCP snooping
4.2、RARP协议
RARP协议是通过MAC地址获取IP的协议,和ARP协议刚好相反。
五、路由表
如上图所示,路由表最主要的作用就是决定下一跳的目标地址是哪里。这也就解释了第三章中蓝色部分的问题,主机A怎么知道下一跳的目标是交换机1。
路由转发过程:先确定最短路径,然后再通过所选路径上的网络传输数据。
一个分组到达路由器之后,先于本地路由表中的对应的子网掩码做按位与运算,然后再在本地的路由表中查询,如果与本地IP相同,则已经到达目的端,由当前路由解析数据;如果计算出不是本地IP地址,则此IP为下一跳的路由IP,继续进行路由转发;若在当前路由器中查询不到下一跳地址,即转向默认的下一跳IP。转发分组不可能在一个路由停下,这样会给当前路由的性能造成负担,且每个转发分组的IP数据包的报头中都有一个8位的生存时间TTL,这个生存时间并不是以时间单位计数,而是计算当前已经转发过的路由次数,在源端,设置好最大转发次数值,即生存时间(time to live),每经过一个路由,数值减一,直到最终路由器检查到生存时间为0。则丢弃该分组。[推荐阅读]
六、NAT技术
NAT(Network Address Translation)即:网络地址转换。NAT技术致力于将一个局域网络通过一个外网IP接入外网中。
如图所示,在一个局域网中,虽然两台主机使用的是内网IP,但是可以通过交换机1处的网关统一提供的外网IP来接入互联网。
如果一台主机B要访问内网中的主机A,主机B如何找到主机A呢?主机B在互谅网中只能找到124.65.126.45的交换机1,NAT技术就作用在这里,NAT技术可以将到达交换机1的请求,映射到主机A上。
为什么需要NAT技术呢?你想想IP地址一共42亿+个,在物联网飞速发展的今天早已经不够用。所以要想办法找到一种方式来节省IP。
另外NAT并不是真的作用在交换机1上,而是其接入网方式决定的。但是可以肯定的是作用在局域网对外的网关上。网关,不陌生吧。
NAT如何进行内外网IP的转换的呢?如果让你设计NAT实现,怎么设计?是不是要有一个方法要给主机A做一个标记,让NAT知道访问主机A的请求是访问主机A的,而不是主机B。绕吗?这个作为不同服务器的标记就是传输层的端口。
如果是传输层的端口的话,是不是就意味着,一个局域网内对外提供8080端口的主机只有一台?是的,也不是,因为可以有平衡负载。
如果一个局域网内多台机器都提供8080端口的服务,NAT会对其进行平衡负载。
PS:不要惊讶于这种设计方式,思考下,在你公司或者学校里面,你的电脑会对外网提供服务吗?不会的,因为我
们作为互联网的使用者,我们的需求只是访问互联网,获取我们需要的呃信息即可。什么样的局域网需要对外提供服务?
嗯,如果你是一个程序员,你可能已经明白了就是服务端。各大网站、APP的服务端。所以说,这种用端口来区分内部
主机的方式是没问题的。
如上如图表所示,局域网内 出 & 入 的IP转换。