网络编程基础(2)
一、IP和路由(网络层)
1.1、IP协议
1.1.1、基本概念
主机:配有IP地址,但是不进行路由控制的设备。
路由器:即配有IP地址,又能进行路由控制。
节点:主机和路由的统称。
1.1.2、协议头格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 版本 (4) | 头部长度 (4) | 服务类型 (8) | 总长度 (16) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 标识 (16) | 标志 (3) | 片偏移 (13) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 生存时间 (8) | 协议 (8) | 头部校验和 (16) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源 IP 地址 (32) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目的 IP 地址 (32) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 可选字段(可选,最多40字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段 | 比特数 | 说明 |
---|---|---|
版本(Version) | 4 bits | 标识 IP 协议版本,此处为 4 (IPv4)。 |
头部长度(IHL) | 4 bits | 定义 IPv4 头部的长度(单位:4 字节)。例如,5 表示头部长度为 5×4=20 字节 (无可选字段)。 |
服务类型(ToS) | 8 bits | 用于服务质量(QoS),如优先级标记。现代网络中常改用 DSCP(区分服务代码点)和 ECN(显式拥塞通知)。 |
总长度(Total Length) | 16 bits | 整个 IP 数据包的总长度(包括头部和数据),最大值为 65535 字节 。 |
标识(Identification) | 16 bits | 唯一标识一个数据包,用于分片重组。同一数据包的分片具有相同的标识值。 |
标志(Flags) | 3 bits | 控制分片行为: - 第 1 位:保留(必须为 0) - 第 2 位:DF(Don't Fragment)(1=禁止分片) - 第 3 位:MF(More Fragments)(1=后续还有分片) |
片偏移(Fragment Offset) | 13 bits | 标识分片在原数据包中的位置(单位:8 字节)。例如,0 表示第一个分片。 |
生存时间(TTL) | 8 bits | 数据包的最大跳数(每经过一个路由器减 1,TTL=0 时丢弃)。常见默认值:64 (Linux)或 128 (Windows)。 |
协议(Protocol) | 8 bits | 指示上层协议类型: - 6 :TCP- 17 :UDP- 1 :ICMP- 完整列表见 IANA 协议号列表 |
头部校验和(Header Checksum) | 16 bits | 仅校验 IPv4 头部的完整性(不校验数据部分)。 |
源 IP 地址 | 32 bits | 发送方的 IPv4 地址(如 192.168.1.1 )。 |
目的 IP 地址 | 32 bits | 接收方的 IPv4 地址(如 8.8.8.8 )。 |
可选字段(Options) | 最多40bit | 可扩展功能(如安全选项、时间戳等),长度可变(最多 40 字节),实际中极少使用。 |
1.1.3、网段划分
IP一般分为两个部分,网络号和主机号
网络号:保证互相连接的两个网段有不同的标识
主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
子网掩码(Subnet Mask)
-
作用:标识 IP 地址中哪些部分是网络号,哪些部分是主机号。
-
格式:与 IP 地址长度相同(IPv4 为 32 位),由连续的
1
和0
组成。
子网号 | 网络地址 | 可用主机范围 | 广播地址 |
---|---|---|---|
第 1 个子网 | 192.168.1.0 | 192.168.1.1 ~ 192.168.1.62 | 192.168.1.63 |
第 2 个子网 | 192.168.1.64 | 192.168.1.65 ~ 192.168.1.126 | 192.168.1.127 |
第 3 个子网 | 192.168.1.128 | 192.168.1.129 ~ 192.168.1.190 | 192.168.1.191 |
第 4 个子网 | 192.168.1.192 | 192.168.1.193 ~ 192.168.1.254 | 192.168.1.255 |
IPv4地址分类对比表 | ||||||
---|---|---|---|---|---|---|
类别 | 地址范围 | 默认子网掩码 | 用途 | 私有地址范围 | 支持主机数 | 特点 |
A类 | 1.0.0.0 ~ 126.255.255.255 | 255.0.0.0 (/8) | 超大型网络(政府、ISP) | 10.0.0.0/8 | ≈1677万(224−2224−2) | 网络号占8位,主机号占24位;地址空间极大。 |
B类 | 128.0.0.0 ~ 191.255.255.255 | 255.255.0.0 (/16) | 中型企业或机构 | 172.16.0.0/12 | ≈6.5万(216−2216−2) | 网络号占16位,主机号占16位;平衡规模与利用率。 |
C类 | 192.0.0.0 ~ 223.255.255.255 | 255.255.255.0 (/24) | 小型网络(家庭、办公室) | 192.168.0.0/16 | 254(28−228−2) | 网络号占24位,主机号占8位;适合小规模部署。 |
D类 | 224.0.0.0 ~ 239.255.255.255 | 无子网掩码 | 组播(Multicast) | 无私有地址 | 不适用 | 用于一对多通信(如视频流、在线会议)。 |
E类 | 240.0.0.0 ~ 255.255.255.255 | 无子网掩码 | 保留地址(实验或未来扩展) | 不可用 | 不适用 | 禁止分配给常规设备,仅用于研究。 |
特殊的IP地址:
- 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
- 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
- 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1 比
1.2、路由
路由是指导数据包充源设备通过网络传递到目标设备的过程,核心依赖路由器和路由表来实现路径的选择和转发。
1.2.1、路由的核心组件
组件 | 说明 |
---|---|
路由器(Router) | 网络层设备,负责根据路由表转发数据包,连接不同网络(如 LAN 和 WAN)。 |
路由表(Routing Table) | 存储网络路径信息,包含目标网络、下一跳地址、接口、优先级等条目。 |
路由协议(Routing Protocol) | 用于路由器间动态交换路由信息(如 OSPF、BGP)。 |
1.2.2、路由类型对比
类型 | 说明 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
静态路由 | 管理员手动配置路由表,路径固定。 | 简单、开销小、安全性高。 | 无法适应拓扑变化,维护复杂。 | 小型网络或特定路径(如默认路由)。 |
动态路由 | 路由器通过协议自动学习并更新路由表。 | 自适应网络变化,扩展性强。 | 资源消耗大(带宽、CPU)。 | 中大型复杂网络(企业网、互联网)。 |
默认路由 | 指向“未知目标”的通用路径(如 0.0.0.0/0 )。 | 简化配置,减少路由表大小。 | 依赖上层路由的准确性。 | 边缘网络出口(如家庭路由器)。 |
1.2.3、常见路由协议
内部网关协议(IGP,用于同一自治系统内)
协议 | 类型 | 算法 | 更新方式 | 适用场景 |
---|---|---|---|---|
RIP | 距离矢量 | 跳数(≤15) | 周期性广播 | 小型网络(已淘汰)。 |
OSPF | 链路状态 | 最短路径树 | 触发式更新 | 中大型企业网络。 |
EIGRP | 混合型 | DUAL算法 | 增量更新 | Cisco设备网络。 |
外部网关协议(EGP,用于不同自治系统间)
协议 | 说明 |
---|---|
BGP | 路径矢量协议,基于策略(如AS路径、优先级)选择最佳路由,用于互联网骨干。 |
1.2.4、关键概念
自治系统(AS)
由同一管理机构控制的网络集合(如 ISP),每个 AS 有唯一编号(ASN)。
NAT(网络地址转换)
将私有 IP 转换为公网 IP,解决 IPv4 地址不足问题(常见于家庭路由器)。
路由聚合(CIDR)
合并多个连续子网为超网,减少路由表条目(如将 192.168.0.0/24
至 192.168.3.0/24
聚合为 192.168.0.0/22
)。
查看路由表
Windows:route print
Linux/macOS:netstat -rn 或 ip route show
二、以太网(数据链路层)
2.1、定义
以太网是一种 局域网(LAN)技术,工作在 OSI模型的物理层和数据链路层(L1 & L2),负责设备间的直接通信。
-
核心目标:通过共享介质或交换机实现高效、可靠的本地数据传输。
-
标准化:由 IEEE 802.3 工作组制定标准(如 10BASE-T、1000BASE-T)。
2.2、核心特性
特性 | 说明 |
---|---|
MAC地址 | 每个设备有唯一的48位物理地址(如 00:1A:2B:3C:4D:5E ),用于帧寻址。 |
CSMA/CD | 早期以太网的冲突检测机制(载波侦听多路访问/冲突检测),用于半双工通信。 |
全双工模式 | 现代以太网通过交换机实现全双工通信(无冲突,双向同时传输)。 |
帧结构 | 数据封装为帧,包含目标/源MAC地址、类型/长度、数据和校验字段(见下文详解)。 |
2.3、帧结构
0 6 12 14(字节)
+-------------------+-------------------+-------------------+-------------------+
| 目标MAC地址 (6) | 源MAC地址 (6) | 类型/长度 (2) | 数据 (46-1500) |
+-------------------+-------------------+-------------------+-------------------+
| 帧校验序列 (4) |
+-------------------+
字段说明:
-
目标/源MAC地址:6字节,标识通信双方。
-
类型/长度:
-
值 ≤ 1500:表示数据长度(IEEE 802.3标准)。
-
值 ≥ 1536:表示上层协议类型(如
0x0800
对应 IPv4,0x86DD
对应 IPv6)。
-
-
数据(Payload):46~1500字节,不足46字节需填充。
-
帧校验序列(FCS):4字节CRC校验,确保帧完整性。
2.4、MAC地址
- MAC地址用来识别数据链路层中相连的节点
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址).
-
在局域网(LAN)中,MAC地址用于直接通信。设备通过ARP协议将IP地址解析为MAC地址,确保数据准确送达。
2.5、MTU
2.5.1、定义与作用
-
MTU值:一般为 1500字节(以太网标准),包含IP头部(20字节)和TCP/UDP头部,实际数据载荷约为 1460字节(如TCP MSS)。
-
分片(Fragmentation):若数据包超过MTU,路由器/设备需将其分片。但分片会降低效率(增加延迟、丢包风险)。
-
路径MTU发现(PMTUD):设备通过ICMP消息探测路径中最小MTU,动态调整数据包大小以避免分片。
2.5.2、常见MTU值
网络类型 | 典型MTU值(字节) | 备注 |
---|---|---|
标准以太网 | 1500 | 最常见 |
PPPoE(宽带拨号) | 1492 | 因PPPoE头部占用8字节 |
无线网络(Wi-Fi) | 1500 | 与有线以太网一致 |
巨型帧(Jumbo Frame) | 9000+ | 用于高速局域网,需全网支持 |
2.5.3、MTU与协议的关系
-
TCP:通过MSS(Maximum Segment Size)自动协商,确保数据段不超过MTU限制(MSS = MTU - IP头 - TCP头)。
-
UDP:无自动分片机制,若应用层数据超过MTU,IP层需强制分片(可能增加丢包风险)。
-
ICMP:用于路径MTU发现,向源设备报告“需要分片”的错误。
2.5.4、常见问题
如何查看/修改MTU?
-
查看MTU:
-
Windows:
netsh interface ipv4 show subinterfaces
-
Linux/macOS:
ifconfig
或ip link
-
-
修改MTU(需管理员权限):
-
Windows:
netsh interface ipv4 set subinterface "以太网" mtu=1480
-
Linux:
ifconfig eth0 mtu 1500
-
路由器:通过管理界面调整WAN/LAN口MTU。
-
MTU设置不当的影响
-
MTU过大:导致分片,降低性能(尤其在跨网传输时)。
-
MTU过小:增加协议头开销,降低有效吞吐量。
-
典型症状:网页加载不全、VPN断连、大文件传输失败。
2.6、ARP协议
2.6.1、定义
ARP 是用于将IP地址解析为MAC地址的网络层协议,确保同一局域网(LAN)内的设备能够通过MAC地址直接通信。它是局域网通信的基础,工作在OSI模型的数据链路层与网络层之间。
2.6.2、核心特性
核心功能
-
IP → MAC映射:根据目标设备的IP地址查询其MAC地址。
-
本地通信:仅在局域网内生效,无法跨路由器(跨网段需通过网关)。
工作流程
-
ARP请求(广播):源设备发送广播帧,询问“谁的IP是X.X.X.X?请告知你的MAC地址”。
-
ARP响应(单播):目标设备回复自己的MAC地址,其他设备忽略该请求。
-
缓存机制:设备将IP-MAC映射存入ARP缓存表(通常有效期2-20分钟)。
ARP报文格式
字段 | 说明 |
---|---|
硬件类型(Hardware Type) | 网络类型(如以太网=1) |
协议类型(Protocol Type) | 协议类型(如IPv4=0x0800) |
操作码(Opcode) | 1=请求,2=响应 |
源/目标MAC地址 | 发送方和接收方的MAC地址 |
源/目标IP地址 | 发送方和接收方的IP地址 |