> 文章列表 > 【Linux】网络基础(网络层与链路层)

【Linux】网络基础(网络层与链路层)

哎呀,网络层和链路层,听起来是不是有点像快递小哥和货车司机的组合?一个负责地址管理,一个负责实际运送。网络层就像是快递小哥,拿着IP地址这个门牌号,找到你的包裹该送到哪个小区。而链路层则是货车司机,确保这些包裹能从一个站点安全送到下一个站点,用的是MAC地址这个“车牌号”。

那么问题来了,为什么要有这两层呢?想象一下,如果没有网络层的IP地址,快递小哥怎么知道你的包裹该往哪个城市哪个街道送?没有链路层的MAC地址,货车司机又怎么知道下一站该往哪个路口拐?

再深入一点,为什么IP地址要分那么多类,比如A类、B类、C类?这就像是城市里有不同的区域划分,A类可能是市中心的大片区域,B类是次中心,C类就是小社区了。这样划分,不仅方便管理,还能更高效地利用资源,避免“快递小哥”在大街小巷里乱窜。

最后,别忘了NAT技术,这就像是小区门口的保安,把私网地址转换成公网地址,确保每个包裹都能顺利到达目的地,而不至于在小区门口就被拦下。

所以,网络层和链路层,就像是快递系统中的两大支柱,少了谁,你的包裹都到不了家。下次当你的网速慢得像蜗牛爬的时候,不妨想想,是不是这两层里的哪位“小哥”在偷懒呢?

【Linux】网络基础(网络层与链路层)

网络层与链路层典型协议

  • 网络层
    • IP 地址
    • 地址管理
      • 网络号的划分(五种)
      • 特殊的网络以及IP地址
    • 路由选择
  • 链路层
    • MAC 地址
    • ARP 协议
    • MTU 最大传输单元
  • 其他典型协议:ICMP、DNS 、NAT技术
    • ICMP协议
    • DNS 协议
    • NAT & NAPT 技术
    • 代理

网络层

功能:负责地址管理与路由选择

IP 地址

【Linux】网络基础(网络层与链路层)

(1)4位版本:4-ipv4 ,6-ipv6
(2)4位报头长度:以 4 字节为单位描述报头长度,IP报头最长长度 60 字节,最小 20 字节
(3)8位服务类型:3位优先权弃用,4位服务类型TOS,1位保留置 0

服务类型:最小延时、最大吞吐量、最高可靠性、最小成本

(4)16位数据报长度:限制一个IP报文包含报头在内最大不超过65535(64K)大小

UDP 报文中最大数据大小必须小于 64k-8(报头长度)-20(udp协议头部)

(5)16位分片标识:
在链路层有个限制报文大小的字段–MTU 最大传输数据大小,以太网协议默认大小为 1500字节

若一个报文在网络层封装了 IP 报头之后大于MTU,则在链路层就无法进行传输,因此需要在网络层进行数据分片,将一个大的报文分割成多个小报文,分别封装在 IP 报头进行发送,这个小报文—分片

若一个大的报文被分割成了多个小的分片进行传输,则多个分片到达对端网络需要进行分片重组,重组成一个完整的报文后交付给传输层

16位分片标识:标识当前分片属于哪个原始报文
3为标志:一位保留,第二位标识禁止分片,第三位标识更多分片
13位分片偏移:标识当前分片在原始报文中的位置(相较于起始位置的偏移量),分片偏移以 8 字节为单位

Q1:网络不稳定,有可能出现乱序,如何辨别哪个分片属于哪个原始报文?
16位分片标识 — 标识当前分片属于哪个原始报文

Q2:如何获知当前分片在原始报文中的位置?
13位分片偏移 — 标识了当前分片相对于原始报文起始位置的偏移量
13位分片偏移,能够表达的最大大小:8192,因此分片偏移的单位是 8 字节
每个分片的大小都是 8 的整数倍大小(除过最后一个分片)

(6)8 位生存时间 TTL:存放一个数据报文在网络中所能经过的路由器跳数,每经过路由器一跳就会 -1,为 0 时,将报文丢弃,主要是为了避免路由器环路

(7)8 位协议版本:当前 IP 报文封装的数据所使用的协议类型(对方进行数据分用时所使用的协议类型)

(8)16 位校验和:校验数据的一致性

(9)32位源端 IP ,32位对端 IP 地址:描述数据从哪来到哪去

(10)0~40 字节的选项数据

地址管理

ipv4 版本的 IP 地址:4 字节无符号整型数字,描述的主机个数 :42亿9千万+

IP 地址不够用:动态地址分配 DHCP ;使用 NAT 技术组建私网

ipv6 版本的 IP 地址:16 字节无符号整型数字

IP 地址的组成:
网络号:一个网络的标识,一个网络所分配的IP地址中都会包含这个标识
通过网络号,路由器能够判断某个 IP 地址属于哪个网络

主机号:一台主机在一个网络中的标识
通过主机号,路由器能够判断某个 IP 是当前网络中的哪台主机;一个网络中有多少个主机号代表可以连接多少台主机

网络号的划分(五种)

(1)A 类网络:
高 1 位固定为 0,有 7 位网络号,24 位主机号
网络号范围:0~127
IP 地址范围:0.0.0.0 ~ 127.255.255.255
A 类网络通常用于组建大型网络

(2)B类网络:
高 2 位固定为 10,有 14 位网络号,16 位主机号
网络号范围:128.0 ~ 191.255
IP 地址范围:128.0.0.0 ~ 191.255.255.255
B类网络通常用于组建中型网络

(3)C类网络:
高 3 位固定为 110,21 位网络号,8 位主机号
网络号范围:192.0.0 ~ 223.255.255
IP 地址范围:192.0.0.0 ~ 223.255.255.255
C类网络通常用于组建小型网络

(4)D/E 类网络:
D类高四位固定为 1110,28位为多播组号
E类高五位固定为 11110,27位留待后用

【Linux】网络基础(网络层与链路层)

CIDR :使用子网掩码进行网络划分
子网掩码:4字节无符号整数,数据必须由二进制连续的 1 组成

【Linux】网络基础(网络层与链路层)

例题

一个公司申请了C类网络 193.23.24.0/24,而公司由四个部门构成,想要划分为 4 个子网,平均将 IP 地址分配给四个部门,请问每个子网网络号、子网掩码、IP 地址范围?

答:
193.23.24.0/24 :24标识网络号为 24 位构成,C 类网络的 主机号为 8 位,因此C类网络中一个网络中可以拥有主机号 256 个(2^8)
平均划分为 4 个子网,则每个子网的主机号个数就是 256/4=64 个,也就是 0~63

子网掩码取反可以得到子网最大主机号
子网掩码与IP地址相与可以得到网络号

因此,子网掩码也就是等于子网最大主机号取反---- 63取反:

【Linux】网络基础(网络层与链路层)
【Linux】网络基础(网络层与链路层)

特殊的网络以及IP地址

(一)特殊网络:私网

私网组建要搭配一个技术:NAT 技术----网络地址转换技术

一个私网要向外发送数据,需要流经网关设备,进行网络地址替换,替换成为网关设备对外的地址,并且在设备中记录映射关系
【Linux】网络基础(网络层与链路层)

网络划分时候,专门为组建私网划分出来几个网络号,避免与公网网络号重复

【Linux】网络基础(网络层与链路层)

私网的网络号,只要注意相邻网络不使用相同网络号,就能保证私网地址不冲突,因为私网主机对外通信使用的都是对外的公网地址,经过 NAT 网络地址替换后,对外地址不冲突,因此不相邻的私网是可以使用相同的网络号(IP地址可以重复)

(二)特殊 IP 地址

0.0.0.0:代表本地主机上的任意网卡 IP 地址(通过用于服务端程序的绑定监听地址)
255.255.255.255:全网广播地址(UDP广播)
主机号全为 0 的地址:网络号,是网络的标识–不能分配给主机
主机号全为 1 的地址:局域网广播地址,也不能分配给主机

【Linux】网络基础(网络层与链路层)

127.0.0.1:本地主机上的虚拟回环网卡地址,进行主机内部的网络通信 —> 本地网络回环测试

路由选择

路由器为流经的数据选择合适的路径进行转发(route 路由表)

每一个网络通信设备上都会有一张路由表

一个路由器连接了多少个网络,就得有多少块网卡,每一块网卡都能获取一个对应网络的IP地址,它的路由表中就会有多少条路由信息

链路层

负责相邻设备之间的数据传输

网络层 IP 地址描述的是数据从哪个主机来要到哪去,描述的是起点与终点,但是起点到终点中间需要进行层层转发才能够到达目标主机