Post

计算机网络:网络层

网络层

网际层在OSI七层网络模式中,位于数据链路层与传输层之间,起着非常重要的作用。

IP地址

IP地址规则

我们知道主机想要上网,需要先有一个IP地址,eg:192.169.0.101,那么这个IP地址有什么规则呢?

IP地址由4个字节组成,分为网络号和主机号两部分,网络号是其在整个互联网的网络中的唯一标识,主机号则是主机在自己网络内的唯一标识,所以网络号+主机号就能让IP地址在整个互联网中保证唯一。

网络号和主机号通过子网掩码 netmask 区分,我们在设置IP地址时,会同时设置一个子网掩码,它同样是4字节,eg:255.255.255.0, 子网掩码中值为1的位数就是IP地址的网络号的位数。eg:

1
2
3
4
ip      192.168.0.100
netmask 255.255.255.0
-- 网络号: 192.168.0
-- 主机号: 100

IP地址根据网络号的不同段分为几种类型:

  • A类: 以 01开头的
  • B类: 以 10 开头的
  • C类: 以 11 开头的
  • D类: 以 111 开头的
  • E类: 以 1111 开头的

特殊IP

  • 主机号位全为0的IP是保留的,表示该网络号。
  • 主机号位全为1的IP也是保留的,表示该网络的广播地址。
  • 127.0.0.1是主机的回环IP,当请求的目的地址是127.0.0.1时,会交给主机内部的软件处理。

为什么需要IP地址

之前在数据链路层的文章中有提到,每个网卡都会有一个48位的 MAC地址,并且MAC地址保证全球唯一,那么为什么不能直接用MAC地址,而是用IP地址呢?

其实MAC地址与IP地址的关系可以用一个例子说明,你在网购时填写的收货地址,都是填的门牌地址,而不是家里的坐标经纬度。IP地址更像是我们生活中填写的收货地址,省市区小区对应网络号,几单元几号则对应主机号,通过这样的逻辑划分,能够更加容易的做网络路由。相比与IP地址,MAC地址就无规律可言,无法通过它进行快速的分组路由。

路由

同一网络内的主机通讯

同一个网络内的主机通信过程实际上非常简单。 网络内的主机通过集线器、交换机等设备连接在一起,它们IP地址的网络号都是相同,主机号不同。 其实在同一网络内,主机间通讯主要依靠的是MAC地址,如果知道目的MAC地址,将其加在数据链路层的帧头上,然后源主机在整个网络内发起广播,收到数据帧的主机检查帧头的目的MAC地址是否是本机的MAC地址,如果不是则丢弃,如果是则进行处理,这样数据就传输过来了。

那么源主机如何才能知道目的主机的MAC地址呢?这就需要引入一个新的协议, ARP 协议。

ARP协议

ARP(地址解析协议)就是用来通过IP地址查询MAC地址的协议。一般我们的主机上都会保存IP地址与MAC地址映射关系的高速缓存,但如果主机是新加入网络的,或者目的主机是新加入网络的,缓存中就没有目的IP/MAC的映射关系。 此时ARP协议就会发起广播,例如:

我的IP是 192.168.0.101 MAC地址是 3f:33:43:87:2f:3c, 192.168.0.121 你的MAC地址是多少?

网络内所有主机收到消息,会判断目的IP是否和本机IP一致,如果不一致就丢弃,如果一致就回复:

我是 192.168.0.121  我的MAC地址是 3f:33:4a:87:5f:3c

这样源主机就得到了目的主机的MAC地址,就可以按照上面描述的方式,给目的主机发送数据了。

为了提升网络效率,获取到目的主机的MAC地址后,会将其存储在本地缓存中,下次再给相同IP主机发送数据时,从缓存中获取MAC地址就行,缓存有效期一般是十几分钟。 如果这期间目的主机的网卡坏了,换了一张网卡,那么此时,主机与目的主机间的通讯可能就不通了,因为MAC地址已经变了, 此时其实不用着急,因为过几分钟通讯可能就恢复了,因为ARP缓存过期会重新走上面的流程获取到新的MAC地址。

路由表

This post is licensed under CC BY 4.0 by the author.