网络层描述
ipconfig
分片
假设原始数据包总长 4000字节,MTU(Maximum Transmission Unit)=1500字节(以太网默认),分片如下:
分片 | 分片大小 | 片偏移 | MF标志 | 计算逻辑 |
---|---|---|---|---|
1 | 1480 | 0 | 1 | 从第0字节开始,1480字节,还有后续分片。 |
2 | 1480 | 185 | 1 | 偏移=1480/8=185 ,仍有后续分片。 |
3 | 1040 | 370 | 0 | 偏移=(1480+1480)/8=370 ,最后一片。 |
注意:
每个分片的IP头部长度(通常20字节)不包含在分片数据长度内。
片偏移值必须为整数(因为单位是8字节),因此分片长度需是8的倍数(IP层会自动填充)。
最大的长度是2^16,片偏移所能表示的最大数是2^13,所以一片应该是8个字节
子网掩码
解决IP地址浪费问题
早期问题:
IPv4地址只有32位,总量有限(约43亿个)。若按传统分类(A/B/C类)分配,会导致大量地址浪费。例如:一个公司需要500个IP,但B类地址(
/16
)提供6.5万个,远超需求。
子网划分的优化:
通过子网掩码灵活划分网络,避免浪费。将一个大网络(如
192.168.0.0/16
)拆分为多个小网络(如192.168.1.0/24
)。
Q1:子网掩码必须连续吗?
是的,标准的子网掩码是连续的
1
和0
(如255.255.255.0
)。非连续掩码(如
255.0.255.0
)已淘汰(早期用于复杂划分,现由CIDR取代)。
Q2:如何计算子网掩码?
方法1:根据需求的主机数计算。
例如:需要60个主机 → 主机位至少6位(
2^6-2=62
) → 掩码=/26
(255.255.255.192
)用二进制表示为11111111.11111111.11111111.11000000。
方法2:使用CIDR表示法(如
192.168.1.0/24
)。
CIDR(Classless Inter-Domain Routing,无类别域间路由)是用于灵活划分IP地址的表示方法,取代传统的A/B/C类地址划分,核心特点:
格式:
IP地址/前缀长度
(如192.168.1.0/24
)。作用:明确指定网络号和主机号的边界,实现更高效的地址分配。
CIDR | 子网掩码 | 可用主机数 | 适用场景 |
---|---|---|---|
/32 | 255.255.255.255 | 1 | 单设备(如VPN端点) |
/30 | 255.255.255.252 | 2 | 点对点链路(如路由器互联) |
/24 | 255.255.255.0 | 254 | 小型局域网(家庭/办公室) |
/16 | 255.255.0.0 | 65,534 | 大型企业内网 |
/8 | 255.0.0.0 | 16,777,214 | 传统A类网络 |
子网掩码的作用:
通过按位与(AND)运算,从IP地址中分离出网络号和主机号。
示例:
IP地址:
192.168.1.100
子网掩码:
255.255.255.0
(即/24
)计算:
192.168.1.100 → 11000000.10101000.00000001.01100100 255.255.255.0 → 11111111.11111111.11111111.00000000 -------------------------- AND 192.168.1.0 → 网络号 0.0.0.100 → 主机号
结论:
网络号:
192.168.1.0
主机号:
100
(范围:1~254,0和255保留)
NAT
NAT(Network Address Translation,网络地址转换)是一种将私有IP地址转换为公有IP地址的技术,主要用于解决IPv4地址短缺问题,并隐藏内网拓扑结构,提升安全性。
NAT设备(如路由器)维护一张转换表,记录内网IP和端口与外网IP和端口的映射关系。
示例流程:
内网主机(
192.168.1.100:54321
)访问公网服务器(8.8.8.8:80
)。NAT路由器将源地址替换为公网IP(如
203.0.113.1:60000
)。- 服务器响应到
203.0.113.1:60000
,NAT根据转换表将数据转发给内网主机。
prerouting 路由前 postrouting 路由后
链类型 | 处理阶段 | 典型动作 | 应用场景 |
---|---|---|---|
PREROUTING | 路由前(入站) | DNAT(端口转发) | 将公网请求转发到内网服务器。 |
POSTROUTING | 路由后(出站) | MASQUERADE/SNAT | 内网设备共享公网IP上网。 |
路由表
IPv4路由表摘要 (route print)
网络目标 | 网络掩码 | 网关 | 接口 | 跃点数 |
---|---|---|---|---|
0.0.0.0 | 0.0.0.0 | 192.168.106.254 | 192.168.106.103 | 35 |
127.0.0.0 | 255.0.0.0 | 在链路上 | 127.0.0.1 | 331 |
127.0.0.1 | 255.255.255.255 | 在链路上 | 127.0.0.1 | 331 |
127.255.255.255 | 255.255.255.255 | 在链路上 | 127.0.0.1 | 331 |
192.168.17.0 | 255.255.255.0 | 在链路上 | 192.168.17.1 | 291 |
192.168.17.1 | 255.255.255.255 | 在链路上 | 192.168.17.1 | 291 |
192.168.17.255 | 255.255.255.255 | 在链路上 | 192.168.17.1 | 291 |
192.168.44.0 | 255.255.255.0 | 在链路上 | 192.168.44.1 | 291 |
192.168.44.1 | 255.255.255.255 | 在链路上 | 192.168.44.1 | 291 |
192.168.44.255 | 255.255.255.255 | 在链路上 | 192.168.44.1 | 291 |
192.168.106.0 | 255.255.255.0 | 在链路上 | 192.168.106.103 | 291 |
192.168.106.103 | 255.255.255.255 | 在链路上 | 192.168.106.103 | 291 |
224.0.0.0 | 240.0.0.0 | 在链路上 | 127.0.0.1 | 331 |
224.0.0.0 | 240.0.0.0 | 在链路上 | 192.168.17.1 | 291 |
255.255.255.255 | 255.255.255.255 | 在链路上 | 127.0.0.1 | 331 |
本地环回
127.0.0.0 是 IPv4 地址空间中保留的环回网络(Loopback Network)的起始地址,其作用是为设备提供内部自我通信的通道。以下是关键点:
范围:
127.0.0.0/8
(即127.0.0.0
~127.255.255.255
)。最常用地址:
127.0.0.1
(本地环回地址,别名localhost
)。
Q1:127.0.0.0
和 127.0.0.1
的区别?
地址 | 用途 |
---|---|
127.0.0.0 | 网络标识(通常不用于通信),代表整个环回网络。 |
127.0.0.1 | 实际用于本机通信的环回地址(等价于 localhost )。 |
Q2:其他 127.x.x.x
地址能用吗?
可以,但无实际意义(如
127.99.88.77
也会环回到本机),通常建议只用127.0.0.1
。
Q3:IPv6 的环回地址是什么?
IPv6 的环回地址为
::1
(相当于 IPv4 的127.0.0.1
)。
组播
224.0.0.0 是 IPv4 地址空间中 组播(Multicast) 的起始地址,属于 D类地址(范围:224.0.0.0
~ 239.255.255.255
)。它的核心用途是支持一对多的网络通信,即一个发送者向多个接收者同时传输数据。
核心用途
(1) 组播通信
特点:数据包发送到组播地址后,所有加入该组的设备都会接收(而非广播的全体接收)。
示例:
视频会议(如Zoom、Teams使用组播传输音视频流)。
股票行情推送(同一组播组内的终端同步接收数据)。
(2) 协议专用地址
本地网络控制协议:
224.0.0.0/24
保留给本地网络协议(数据包不跨路由器转发):224.0.0.1
:所有主机的组播地址(如ARP替代协议)。224.0.0.2
:所有路由器的组播地址。224.0.0.5
:OSPF路由协议。224.0.0.251
:mDNS(Apple Bonjour/零配置网络)。
(3) 全局组播
范围:
224.0.1.0
~238.255.255.255
可跨路由器转发,用于互联网级应用(如IPTV)。
默认网关
默认网关是本地网络中负责将数据包转发到其他网络(如互联网)的路由器或三层交换机的IP地址。它是设备访问外部网络的“出口”,当目标IP不在当前子网时,数据包会被发送到默认网关。
跨网络通信:
当设备需要访问其他子网或互联网时,数据包会先发送到默认网关,由网关决定下一跳路径。
示例:你的电脑(192.168.1.100
)访问百度(220.181.38.148
),数据包会先发给网关(如192.168.1.1
)。路由中转:
网关根据路由表将数据包转发到目标网络(如ISP的路由器或另一子网的路由器)。NAT转换(家庭/企业网络):
网关通常兼任NAT设备,将私有IP(如192.168.1.x
)转换为公有IP(如203.0.113.1
)。
Q1:默认网关可以设置多个吗?
可以,但通常只有一个生效(优先级由路由表决定)。多网关用于负载均衡或冗余备份(需协议如VRRP支持)。
Q2:网关IP必须属于本地子网吗?
必须!否则设备无法通过ARP找到网关的MAC地址。
错误示例:设备IP:
192.168.1.100/24
(子网192.168.1.0/24
)网关IP:
192.168.2.1
(不属于该子网)→ 无法通信。
Q3:没有默认网关会怎样?
设备只能访问同一子网内的其他设备,无法上网或访问其他子网。
DHCP
DHCP(Dynamic Host Configuration Protocol)是一种自动分配IP地址的网络协议,允许设备(如电脑、手机)在接入网络时,自动获取以下配置信息:
IP地址
子网掩码
默认网关
DNS服务器
其他选项(如域名、时间服务器等
以一台电脑连接Wi-Fi为例:
DHCP Discover(发现)
设备广播发送
DHCP Discover
报文,寻找可用的DHCP服务器。
DHCP Offer(提供)
服务器回应
DHCP Offer
,提供一个可用的IP地址(暂未分配)。
DHCP Request(请求)
设备选择其中一个Offer,广播
DHCP Request
确认请求。
DHCP Ack(确认)
服务器最终确认分配,发送
DHCP Ack
,包含完整的网络配置。
注:整个过程通过UDP广播(端口67/68)完成,通常耗时仅几毫秒。
类型 | 动态IP | 静态IP |
---|---|---|
分配方式 | 自动分配(通常通过DHCP协议) | 手动固定配置 |
变化频率 | 定期更换(租约到期或重新连接时) | 永久不变 |
管理方 | 由路由器或ISP的DHCP服务器管理 | 由用户或网络管理员手动设置 |
ARP
1. ARP的作用
解决什么问题:
已知目标设备的IP地址,需要获取其MAC地址(因为局域网内通信依赖MAC地址,而非IP)。典型场景:
同一子网内的设备通信(如192.168.1.100
访问192.168.1.200
)。
报文类型 | 传输的MAC地址 | 说明 |
---|---|---|
ARP请求 | 包含发送方的MAC地址 | 广播询问:“谁有IP X ?请告诉MAC地址,我的MAC是 AA:BB:CC:DD:EE:FF 。” |
ARP响应 | 包含目标设备的MAC地址 | 单播回应:“IP X 的MAC地址是 11:22:33:44:55:66 。” |
在网络上传输的为什么是ip地址而不是网络号?
在网络传输中,传输的是IP地址,但网络号是路由和转发的关键依据
1. 数据包中传输的内容
传输的是完整的IP地址(如
192.168.1.100
),而非单独的网络号。IP包头格式:
源IP地址(Source IP):发送方的完整IP(如
192.168.1.100
)。目标IP地址(Destination IP):接收方的完整IP(如
8.8.8.8
)。不直接包含网络号,但子网掩码(或CIDR前缀)由路由设备本地存储。
2. 网络号的作用
网络号(如 192.168.1.0
)是路由器和交换机在转发数据包时的关键判断依据:
路由决策:
设备通过目标IP 按位与(AND)子网掩码,提取网络号。
查询路由表,匹配网络号决定下一跳(如默认网关或直连网络)。
示例:
目标IP:
192.168.1.200
,子网掩码:255.255.255.0
→ 网络号192.168.1.0
。路由表匹配
192.168.1.0/24
,直接发送给该子网内的设备。
子网隔离:
不同网络号的设备需通过路由器通信(如
192.168.1.0/24
和10.0.1.0/24
)。同网络号的设备可直接二层转发(通过MAC地址)。
3. 为什么不全传输网络号?
效率问题:
IP地址已包含足够信息,网络号可通过子网掩码实时计算,无需额外传输。灵活性:
子网掩码可动态配置(如VLSM),同一IP在不同网络中可能属于不同子网。
局域网访问公网服务器的全过程
以下是局域网内设备(如 192.168.1.100
)访问公网服务器(如 203.0.113.5:80
)的详细步骤,涵盖 ARP、NAT、路由、TCP握手 等关键环节:
1. 局域网内通信准备
(1) 检查目标IP是否在同一子网
设备计算目标IP的网络号:
203.0.113.5 & 255.255.255.0 = 203.0.113.0
对比本地网络号
192.168.1.0
→ 不在同一子网,需通过默认网关转发。
(2) 获取网关MAC地址(ARP)
设备发送 ARP请求(广播):
Who has 192.168.1.1? Tell 192.168.1.100
网关响应 ARP应答(单播):
192.168.1.1 is at AA:BB:CC:DD:EE:FF
结果:设备将网关MAC(
AA:BB:CC:DD:EE:FF
)存入ARP缓存。
2. 构造HTTP请求并发送
(1) 生成TCP数据包
应用层:浏览器生成HTTP请求
GET / HTTP/1.1
。传输层:封装为TCP段(源端口
54321
,目标端口80
,SYN标志位)。网络层:
源IP:
192.168.1.100
目标IP:
203.0.113.5
(2) 发送到网关
链路层:
源MAC:
设备MAC(00:11:22:33:44:55)
目标MAC:
网关MAC(AA:BB:CC:DD:EE:FF)
物理层:通过交换机/网卡发送到网关(路由器)。
3. 路由器处理(NAT转换)
(1) 源地址转换(SNAT)
路由器检查NAT表,若不存在映射则新建:
内部:192.168.1.100:54321 → 外部:203.0.113.1:60000
修改数据包:
源IP:
192.168.1.100
→203.0.113.1
(路由器公网IP)源端口:
54321
→60000
(2) 路由决策
查询路由表,确定下一跳(如ISP网关
202.102.1.1
)。通过公网接口(如
eth1
)发送数据包。
4. 公网传输
数据包经过多个路由器跳转(通过BGP/OSPF协议寻路),最终到达服务器
203.0.113.5
。服务器收到TCP SYN包,回复
SYN-ACK
(目标IP:203.0.113.1:60000
)。
5. 路由器反向转换(DNAT)
路由器根据NAT表将响应包的目标IP/端口还原:
外部:203.0.113.1:60000 → 内部:192.168.1.100:54321
转发到内网设备
192.168.1.100
。
6. 完成TCP连接
设备收到
SYN-ACK
,回复ACK
,完成三次握手。HTTP请求正式发送,服务器返回网页数据(流程与上述类似)。