计算机网络:网络层
网络层
网际层在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
地址。