网络层和数据链路层

IP

主机 :配有IP地址但是不能进行路由控制的设备
路由器 :既配有IP地址又能进行路由控制
节点:主机和路由器的统称

IP 协议的核心特点

无连接:发送方发送数据包前,不需要和接收方建立连接;数据包独立传输,彼此无关联(可能走不同路径、乱序到达)。

不可靠:IP 协议不保证数据包的传输成功 ------ 不提供重传机制、不保证顺序、不检测数据损坏(仅头部有校验和,不校验数据部分)。

补充:可靠性由上层协议(如 TCP)实现,IP 只负责 "尽力投递"。

面向数据包:数据被分割成固定格式的 "IP 数据报"(数据包)独立传输,不关心数据的具体内容。

跨网络性:通过 IP 地址区分 "网络标识" 和 "主机标识",支持不同类型网络(局域网、广域网等)的互联互通。

网段划分

网段划分的核心原理:借位子网划分

IPv4 地址默认分为 5 类(A/B/C/D/E),其中 A/B/C 类是常用的单播地址(可分配给设备),默认网络位长度固定:

IP 地址分类详解

IP 地址类 范围(点分十进制) 默认网络位长度 默认子网掩码 示例
A 类 1.0.0.0 ~ 126.255.255.255 8 位(第 1 段) 255.0.0.0(/8) 10.0.0.5/8
B 类 128.0.0.0 ~ 191.255.255.255 16 位(前 2 段) 255.255.0.0(/16) 172.16.3.20/16
C 类 192.0.0.0 ~ 223.255.255.255 24 位(前 3 段) 255.255.255.0(/24) 192.168.5.30/24

网段划分的本质是「借主机位作为网络位」:默认网络位长度固定,通过从主机位中 "借 n 位" 作为额外的网络位,从而拆分出更多子网。

例如:C 类地址 192.168.1.0/24(默认网络位 24 位,主机位 8 位),借 2 位主机位作为网络位后:

新的网络位长度:24 + 2 = 26 位(CIDR 后缀 /26);

新的子网掩码:255.255.255.192(二进制前 26 位为 1);

子网数:2² = 4 个(借 n 位,子网数 = 2ⁿ);

每个子网的主机位长度:8 - 2 = 6 位,可用主机数 = 2⁶ - 2 = 62 个。

路由

路由(Routing)是 网络中数据从「源设备」到「目标设备」的 "路径选择与转发过程" ------ 简单说,路由就是给数据包找 "高速公路",让它能跨网段、跨网络到达目的地。

路由器(Router):路由的 "执行者"

路由器是实现路由功能的核心硬件 / 设备,本质是「连接多个子网 / 网络,并转发数据包的智能设备」,核心能力:

连接多网络:一个路由器有多个网口(如 WAN 口、LAN 口),每个网口连接一个子网 / 网络(如 WAN 口连互联网,LAN 口连家里的子网);

存储路由表:路由器内部有一张「路由表」(核心数据结构),记录了 "不同目标网络对应的转发路径";

路径选择与转发:收到数据包后,解析目标 IP 地址,查询路由表,找到下一跳(Next Hop),把数据包转发出去。

路由表(Routing Table):路由的 "地图"

路由表是路由器的 "导航地图",记录了到达各个目标网络的关键信息,每条记录(路由条目)包含以下核心字段:

路由表字段详解

字段 含义
目标网络(Destination) 要到达的目标子网/网络(如 192.168.2.0/240.0.0.0/0 表示默认路由)
子网掩码(Subnet Mask) 区分目标网络的网络位和主机位(与目标网络配套)
下一跳(Next Hop) 数据包要转发到的下一个设备 IP(如路由器的另一网口 IP、上级路由器 IP)
出接口(Interface) 数据包从路由器的哪个网口转发出去(如 eth0WAN 口)
度量值(Metric) 路径优先级(如跳数、带宽),度量值越小,路径越优(用于选最优路径)

数据链路层

功能:在同一本地网络(或同一个广播域)内,实现两个直接相连的设备之间的可靠、高效的数据帧传输。

核心功能与关键技术

数据链路层通常被划分为两个子层:逻辑链路控制(LLC) 和 介质访问控制(MAC)。

成帧

将网络层传下来的数据包(如IP数据报)封装成"帧",添加帧头和帧尾,使其成为数据链路层可识别的单元。

帧结构:

帧头:通常包含目标MAC地址、源MAC地址和类型/长度字段。

数据载荷:来自上层(网络层)的数据包。

帧尾:通常包含用于差错检测的帧校验序列(FCS)。

常见的成帧方法:

字符计数法:在帧头用一个字段标明帧内的字符数。(已很少使用)

字节填充的标志字节法:用特殊的标志字节(如 01111110)标识帧的开始和结束。如果数据中出现标志字节,就在前面插入一个转义字节。

比特填充的首尾标志法(HDLC协议常用):同样用 01111110 作为开始和结束标志。在数据中,每当发送方连续遇到5个"1",就自动插入一个"0"。接收方则进行反向操作,在连续收到5个"1"后,删除紧随其后的"0"。这保证了标志位序列在数据区中不会出现。

物理层编码违例法:利用物理信号中无效的编码序列来表示帧的边界。(如曼彻斯特编码中的高-高或低-低电平)

差错控制

确保接收方收到的帧是正确的。主要使用检错而非纠错。

核心机制:

发送方:对帧的数据部分进行特定计算,生成一个循环冗余校验(CRC) 值,并将其放入帧尾的FCS字段。

接收方:对收到的数据执行同样的CRC计算,将结果与收到的FCS值比较。

如果一致,认为帧正确,通常会回复一个确认(ACK)。

如果不一致,认为帧出错,将其丢弃,并可能回复一个否定确认(NAK) 或不回复。

后续动作:当发送方收到NAK或超时未收到ACK时,会重传该帧。这个"重传"机制是实现可靠传输的关键,它通常由更高层的协议(如数据链路层的ARQ协议或传输层的TCP)来完成。

流量控制

协调发送方和接收方的速度,防止"淹没"接收方。

核心协议:

停止等待协议:发送方每发完一帧,就停止并等待接收方的确认。收到确认后再发下一帧。简单但效率极低。

滑动窗口协议:

发送方和接收方各维护一个"窗口",窗口大小代表了无需等待确认就能连续发送的帧的最大数量。

发送方每收到一个ACK,发送窗口就向前"滑动"。

这是最常用、最高效的机制。TCP也借鉴了此思想。

介质访问控制(MAC)

这是数据链路层的下半部分,专门解决"多路访问"问题:当多个设备连接在同一个广播信道上时,如何协调它们之间的通信,避免冲突?

静态划分信道:

频分复用(FDM)、时分复用(TDM)、波分复用(WDM)、码分复用(CDM)。

优点:无冲突。缺点:资源利用率低,不够灵活。

动态分配信道:

随机访问(冲突不可避免,但有机制解决):

ALOHA:想发就发,冲突了就随机退避后再发。

CSMA:先听再说。发送前先检测信道是否空闲。

CSMA/CD(载波侦听多路访问/冲突检测):以太网(Ethernet) 使用的经典协议。"边说边听",一旦检测到冲突,立即停止发送,并等待一个随机时间后重试。

CSMA/CA(载波侦听多路访问/冲突避免):Wi-Fi 使用。由于无线网络难以在发送时检测冲突,所以采用"预约信道"的方式来尽量避免冲突,如RTS/CTS机制。

受控访问:

轮询:有一个主设备依次询问每个从设备是否要发送数据。

令牌传递:一个特殊的"令牌"在网络中循环,只有拿到令牌的设备才能发送数据。

MAC地址

概念:一个48位的全球唯一标识符,固化在网卡的ROM中,也称为物理地址。格式如:00-1A-2B-3C-4D-5E。

作用:在本地网络内,用于标识唯一的网络接口。数据链路层通过MAC地址来寻址,决定将帧交付给哪个设备。

与IP地址的区别:

IP地址:逻辑地址,用于网络层在不同网络之间进行寻址,标识设备的网络位置。它是可以变的。

MAC地址:物理地址,用于数据链路层在同一网络内部进行寻址,标识设备的物理身份。它通常是固定的。

ARP地址

ARP(地址解析协议) 是数据链路层和网络层协同工作的一个关键协议,它完美地体现了这两层之间的"粘合剂"作用

核心问题:为什么要用 ARP?

想象一下,在网络层(IP层),你的电脑(比如 192.168.1.10)想要发送一个 IP 数据包给同一局域网内的另一台电脑(192.168.1.20)。

网络层只知道目标设备的 IP 地址(192.168.1.20)。IP地址是逻辑的,用于在不同网络间寻址。

但是,数据最终要交给数据链路层来封装成帧,才能在物理网络(如以太网)上传输。而数据链路层只认 MAC 地址(如 08-00-27-0a-6c-ef),因为它是在本地网络内进行物理寻址的。

这就产生了一个核心矛盾:我知道你要去哪(IP地址),但我不知道你的物理地址(MAC地址),所以我的数据帧没法投递。

ARP 就是为了解决这个问题而生的:根据已知的 IP 地址,查询其对应的 MAC 地址。

ARP 查询(广播)

1.检查缓存:主机 A 首先查看自己的 ARP 缓存表,看是否已经有 192.168.1.20 对应的 MAC 地址。

2.构造 ARP 请求包:如果缓存中没有,主机 A 会构造一个 ARP 请求报文

3.封装与发送:主机 A 将这个 ARP 请求包封装到一个数据链路层的帧中。

目标MAC地址:设置为 FF-FF-FF-FF-FF-FF(广播地址)。

源MAC地址:主机 A 自己的 MAC 地址。

然后将这个广播帧发送到网络上。

ARP 响应(单播)

1.全员接收:局域网内的所有设备都会收到这个广播帧。

2.检查并回应:

其他设备(如 192.168.1.30)看到请求的 IP 地址不是自己,就会忽略这个请求,但可能会将主机 A 的 IP-MAC 对应关系缓存下来。

主机 B (192.168.1.20) 发现请求的 IP 地址正是自己,于是它准备响应。

3.构造 ARP 响应包:主机 B 构造一个 ARP 响应报文,可以理解为:

"单独回信": "嗨 192.168.1.10!我是 192.168.1.20,你要找的我的 MAC 地址是 BB-BB-BB-BB-BB-BB。"

4.封装与发送:主机 B 将这个 ARP 响应包封装到一个帧中。

目标MAC地址:直接使用主机 A 的 MAC 地址 (AA-AA-AA-AA-AA-AA)。

源MAC地址:主机 B 自己的 MAC 地址 (BB-BB-BB-BB-BB-BB)。

这是一个单播帧,直接发送给主机 A。

缓存结果

1.主机 A 收到 ARP 响应后,就从报文中获取到主机 B 的 MAC 地址。

2.主机 A 将这个 IP-MAC 对应关系 存入自己的 ARP 缓存表中,并设置一个有效期(通常为 2-20 分钟)。

3.现在,主机 A 就可以用主机 B 的 MAC 地址作为目标地址,正常封装数据帧并发送了。

相关推荐
biter00882 分钟前
Ubuntu 22.04 有线网络时好时坏?最终解决方案
linux·网络·ubuntu
zzzsde23 分钟前
【Linux】基础开发工具(3):编译器
linux·运维·服务器
写点什么呢24 分钟前
使用PE安装Win10系统
学习
('-')26 分钟前
《从根上理解MySQL是怎样运行的》第十二章学习笔记
笔记·学习·mysql
世界尽头与你1 小时前
SSL 签名相关漏洞
网络·安全·ssl
愚戏师1 小时前
Python3 多线程
linux·运维·服务器·python
摆烂积极分子2 小时前
安卓开发学习-安卓版本
android·学习
g***B7382 小时前
Rust在网络中的Tokio
开发语言·网络·rust
n***33352 小时前
linux redis简单操作
linux·运维·redis
h***59332 小时前
使用Canal将MySQL数据同步到ES(Linux)
linux·mysql·elasticsearch