网络层协议

网络层(Network Layer) 的主要功能是实现主机之间的逻辑寻址、路由选择和分组转发,确保数据在不同网络(如局域网、广域网)之间的传输

协议类别 核心协议 路由协议 辅助协议 扩展协议
功能 逻辑寻址、分组转发 路径计算与路由表维护 地址解析、错误控制、组播管理 安全、NAT、QoS等
典型协议 IPv4/IPv6、IPSec OSPF、BGP、RIP ARP、ICMP、IGMP NAT、GRE、DiffServ

IP

IP(Internet Protocol),是分配给连接到计算机网络的每个设备唯一标识符,用于在网络中通信。IP地址使数据包能够在网络上找到其位置,将数据从源主机路送到目的主机,跨越多个中间网络设备(路由器),屏蔽底层网络差异(如以太网、Wi-Fi、广域网)。

但IP协议有点类似渣男,秉承着不主动,不拒绝,不负责原则:

  1. 无连接

    不预先建立建立,直接发送数据包(Packet)。
  2. 不可靠

    不保证数据一定到达,不检查错误,不重传丢失的数据

它来鹅城只做三件事:

  1. 编址与标识(寻址)

    每个连接到网络的设备,都会有一个IP地址。IP协议使用这个地址来表示源地址与目标地址。
  2. 路由与转发

    每个数据包携带源IP与目IP,路由器根据"路由表"选择最佳转发路径。

    路由表通过静态配置或动态协议(如 BGP、OSPF)生成,核心依据是 “最长前缀匹配” 原则
  3. 分片与重组(仅接收端)

    当数据包超过链路层的MTU时(如以太网MTU为1500字节),IP层将数据包拆分为多个分片(Fragment),每个分片包含独立的IP头。

    接收端会根据分布信息将这些片段重新组装成完整的数据包。

IP数据包格式

字段 长度 说明
版本 4位 IPv4(值为4)或IPv6(值为6)
首部长度 4位 以32位字为单位,最小5(20字节),最大60字节(含可选字段)
区分服务 8位 旧称TOS(服务类型),用于QoS(服务质量),如优先级、延迟、吞吐量配置
总长度 16位 数据报总字节数(首部+数据),最大65535字节
标识 16位 唯一标识同一原始数据报的分片,用于重组
标志 3位 包括“保留位”、“不分片(DF)”、“更多分片(MF)”标志
片偏移 13位 分片数据在原始数据报中的偏移量(以8字节为单位)
生存时间(TTL) 8位 数据报最大跳数(每经一个路由器减1,为0时丢弃,防止环路)
协议 8位 上层协议类型(如TCP=6,UDP=17,ICMP=1)
首部校验和 16位 仅校验IP首部,不校验数据(提高效率,可靠性由上层协议处理)
源IP地址 32位 发送方IP
目的IP地址 32位 接收方IP
可选字段 0-40字节 用于调试、安全等(如记录路由、时间戳),较少使用

IP的分类

  1. IPv4

    最早和最常用的IP协议版本,使用32位地址,范围从0.0.0.0到255.255.255.255。约为43亿个,由于互联网的增长,已经快枯竭了。
  2. Ipv6

    为了解决IPv4地址枯竭,而设计的新一代IP协议。使用128位地址,提供海量的IP池。比如:fe80::a00e:9ff2:c15f:e833%21

IPv4地址已经快枯竭了,但依旧是互联网的主流。因为还有DHCP,CIDR,NAT为它续命。

看过<三体>的小伙伴一定对647号小宇宙不陌生,路由器就是为IPv4构建了一个又一个的小宇宙,不至于枯竭。

特性 IPv4 IPv6
地址长度 32位(约43亿地址) 128位(足够为每粒沙子分配地址)
地址空间 分类严格(A/B/C类),浪费严重 无类别(CIDR),地址分配灵活
首部长度 可变(20~60字节),处理复杂 固定40字节,效率更高
安全性 依赖IPsec(可选) 强制支持IPsec(加密与认证)
移动性 需额外协议(如MIP) 内置移动性支持(家乡地址)
分片 源主机和路由器均可分片 仅源主机分片,路由器不处理
兼容性 与IPv6不直接兼容 支持双栈(同时运行IPv4/IPv6)

IP地址分类

根据作用范围,IP地址可以分为两种

  1. 私有IP地址

    用于局域网内部(LAN),不能在互联网中传输

    10.0.0.0-10.255.255.255

    172.16.0.0-172.31.255.255

    192.168.0.0-192.168.255.255
  2. 公有IP地址

    有互联网服务商分配,可以在全球互联网中识别。

根据是否可以更改

  1. 静态IP地址

    手动分配,不会改变。适合用于长期保持相同IP的设备,比如服务器。
  2. 动态IP地址

    由DHCP服务器给你自动分配,每次连接网络或者超过一定时间都会改变。

ICMP

ICMP(Internet Control Message Protocol),用于IP层的错误报告和网络诊断,是一种面向无连接的协议。当IP数据无法访问目标IP,目标路由器时,会自动发送ICMP消息。

我们常用的Ping命令就是基于ICMP

链路层协议

数据链路层是 物理层(硬件连接)与 网络层(IP 寻址)的桥梁,负责在相邻节点之间传输数据帧,处理物理寻址、接入控制和错误检测。

MAC

数据链路层分为两个子层:

  1. 逻辑链路控制子层(Logical Link Control,LLC)

    为网络层提供统一接口(支持多协议如 IP、IPX),处理流量控制和链路管理(IEEE 802.2 标准,现代网络中功能多集成到 MAC 子层)。

LLC层常被简化,属于被抛弃的小孩

  1. 媒体访问控制(Media Access Control,MAC)

    负责物理寻址(MAC地址),接入控制(CSMA/CD)和数据帧的传输

MAC地址:Media Access Contril Addres,是网络设备的硬件地址,用于在局域网中标识设备。MAC工作在链路层,用于设备间通信。

MAC帧格式

字段 长度(字节) 功能描述
前导码(Preamble) 7 1010...10 交替的二进制位组成,用于接收端同步时钟,使物理层设备调整接收速率。
帧开始定界符(SFD) 1 固定为 10101011,标识MAC帧的开始,通知接收端后续为有效数据帧。
目的MAC地址(DMAC) 6 接收方网卡的物理地址(48位),最高位为 0 表示单播地址,1 表示组播地址,全 1FF:FF:FF:FF:FF:FF)为广播地址。
源MAC地址(SMAC) 6 发送方网卡的物理地址(48位),无组播/广播标识,始终为单播地址。
类型字段(Type) 2 标识上层协议类型:
- 0x0800:IP协议
- 0x0806:ARP协议
- 0x86DD:IPv6协议
该字段区分帧承载的是哪种网络层数据。
数据字段(Data) 46~1500 封装上层(网络层)的数据包(如IP数据报、ARP报文)。
- 最小长度46字节:若上层数据不足,需填充(Pad)至46字节,确保CSMA/CD机制正常工作(最小帧长64字节,减去14字节头部和4字节FCS,剩余46字节)。
- 最大长度1500字节:即MTU(最大传输单元),超过则需在网络层分片。
帧校验序列(FCS) 4 基于CRC(循环冗余校验)算法生成的校验码,用于检测帧在传输过程中是否发生错误,校验范围包括DMAC、SMAC、Type、Data和Pad字段(不包括前导码和SFD)。

网络层与链路层的桥梁,ARP

Address Resolution Protocol(ARP,地址解析协议) 是计算机网络中用于将 IP 地址(网络层地址)解析为 MAC 地址(数据链路层地址) 的关键协议。它是局域网(LAN)通信的基础,主要解决 “已知 IP 地址,如何获取对应物理地址” 的问题。其帧直接封装在数据链路层(如以太网)的帧中

场景:主机 A(IP: 192.168.1.1)要向主机 B(IP: 192.168.1.4)发送数据,但不知道 B 的 MAC 地址。

  1. ARP请求

    主机 A 构造一个 ARP 请求数据包,包含自身 IP 和 MAC 地址,以及目标 IP(192.168.1.4)。

    该请求以广播形式发送到局域网(所有主机都会收到)
  2. ARP响应

    所有主机收到广播后,检查目标 IP 是否为自身。

    只有目标设备会响应,并发送一个包含其MAC地址的ARP响应帧。
  3. 地址缓存

    发送方收到ARP响应后,会将目标设备的IP地址和MAC地址映射关系缓存到本地。以便下次发送数据时,无需再进行地址解析。

ARP数据帧格式

字段 长度(字节) 描述 示例值(以太网 + IPv4)
硬件类型(Hardware Type) 2 标识底层硬件类型(如以太网、令牌环等)。
以太网对应值为 0x0001
0x0001(以太网)
协议类型(Protocol Type) 2 标识上层协议类型(如 IPv4、IPv6 等)。
IPv4 对应值为 0x0800
0x0800(IPv4)
硬件地址长度(Hardware Address Length) 1 硬件地址(如 MAC 地址)的长度(单位:字节)。
以太网 MAC 地址为 6
0x06
协议地址长度(Protocol Address Length) 1 协议地址(如 IP 地址)的长度(单位:字节)。
IPv4 地址为 4
0x04
操作码(Operation Code) 2 标识 ARP 操作类型:
1 = ARP 请求(Request),
2 = ARP 响应(Reply),
3 = RARP 请求(反向解析,已过时),
4 = RARP 响应。
0x0001(请求)、0x0002(响应)
发送方硬件地址(Sender Hardware Address) 可变(依硬件地址长度) 发送方的硬件地址(如发送方 MAC 地址)。
以太网中为 6 字节。
发送方 MAC 地址(例:00-0C-29-12-34-56,二进制填充)
发送方协议地址(Sender Protocol Address) 可变(依协议地址长度) 发送方的协议地址(如发送方 IP 地址)。
IPv4 中为 4 字节。
发送方 IP 地址(例:192.168.1.100,点分十进制转换为 4 字节)
目标硬件地址(Target Hardware Address) 可变(依硬件地址长度) 目标的硬件地址:
- ARP 请求时,因目标 MAC 未知,填全 06 字节全 0);
- ARP 响应时,填入目标真实 MAC 地址。
请求时:00-00-00-00-00-00(全 0);
响应时:目标 MAC 地址
目标协议地址(Target Protocol Address) 可变(依协议地址长度) 目标的协议地址(如目标 IP 地址,需解析的 IP)。 目标 IP 地址(例:192.168.1.200,点分十进制转换为 4 字节)

既生瑜何生亮?

IP地址与MAC地址都能表示唯一,那为什么既有IP,又有MAC呢?

  1. 解决的问题不同

    MAC地址作用于链路层,是区分硬件的物理地址,MAC 地址负责每个网段内的微观传输

    IP地址作用于网路层,是区分主机的逻辑地址,IP地址指导跨网段的宏观路由

如果只用MAC地址进行网络寻址的话,MAC地址长度48位。2^48=256TB内存。这将会是你负担不起的路由器价格。

ARP的变种与扩展

  1. 反向地址解析协议(RARP)

    功能与 ARP 相反:已知 MAC 地址,解析对应的 IP 地址。

    现已很少使用,被 DHCP 等协议替代。

  2. 免费 ARP(Gratuitous ARP)

    主机主动发送 ARP 广播(即使无通信需求),属于ARP reply帧,但请求的目标是自己

    用于是告诉广播域中其它主机自己的存在,更新其他主机的 ARP 缓存(如虚拟机迁移后,负载均衡的主备切换)。

    判断广播域中是否存在IP冲突

  3. 无状态 ARP(Stateless ARP)

    主机不维护 ARP 缓存,每次通信前都发送 ARP 请求(适用于低功耗设备或动态网络)。

眼见为实

ARP

ICMP

C#网络编程(二)----网络层/链路层的更多相关文章

  1. Linux网络编程(二)

    Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...

  2. C#网络编程二:Socket编程

    一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...

  3. linux2.6.24内核源代码分析(2)——扒一扒网络数据包在链路层的流向路径之一

    在2.6.24内核中链路层接收网络数据包出现了两种方法,第一种是传统方法,利用中断来接收网络数据包,适用于低速设备:第二种是New Api(简称NAPI)方法,利用了中断+轮询的方法来接收网络数据包, ...

  4. 18 网络编程-TCP/IP各层介绍(5层模型讲解)

    1.TCP/IP五层协议讲解 物理层--数据链路层--网络层--传输层--应用层 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就 ...

  5. Java网络编程二:Socket详解

    Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...

  6. 网络编程-TCP/IP各层介绍(5层模型讲解)

    1.TCP/IP五层协议讲解 物理层--数据链路层--网络层--传输层--应用层 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就 ...

  7. 网络编程、OSI七层协议

    目录 软件开发架构 1.什么是软件开发架构 2.软件开发架构 3.架构优劣势 4.架构发展趋势 网络编程简介 1.如何理解网络编程 2.网络编程的目的 3.网络编程的意义 4.网络编程的起源 5.网络 ...

  8. Linux 网络编程二(Socket创建)

    TCP通信 一个程序使用套接字需要执行4个步骤. --分配套接口和初始化 --连接 --发送或接收数据 --关闭套接字 涉及到的调用包括socket.bind.listen.connect(阻塞线程) ...

  9. IOS研究之网络编程(二)-Cocoa Streams使用具体解释

     本文以及相关的系列文章是我总结的iOS网络开发方面的知识点,本文是第二篇,主要分析了Cocoa Streams中的几个重要类 Cocoa Streams实际上是Objective-C对CFNet ...

  10. 【Linux 网络编程】OSI七层模型

    OSI(Open System Interconnection)开放系统互联模型(1)应用层: 应用层与应用程序界面沟通,以达到展示给用户的目的.(2)表示层: 表示层对网络传输的数据进行交换,使得多 ...

随机推荐

  1. .NET最佳实践:webapi返回IAsyncEnumerable提升性能

    什么是IAsyncEnumerable IAsyncEnumerable<T> 是 .NET 中用于表示异步数据流的接口. 它允许你逐个异步地获取数据项,而不是将所有数据一次性加载到内存中 ...

  2. P6108 [Ynoi2009] rprsvq 积分题解

    给 EI 题解写注 qwq.. 化简方差: \[\frac{1}{n}\sum(a_i-\overline a)^2\\ =\frac{1}{n}(\sum a_i^2-2\overline {a}\ ...

  3. Flink同步mysql到iceberg

    一.如何做一致性保障 1.全量数据分片读取,增量数据单并发读取,保证增量阶段不会乱序2.全量阶段写入失败会清空表后重新写入,避免重复数据.3.全量阶段多task并行读取,把每个task开始结束时间提交 ...

  4. DeepSeek模型量化

    技术背景 大语言模型(Large Language Model,LLM),可以通过量化(Quantization)操作来节约内存/显存的使用,并且降低了通讯开销,进而达到加速模型推理的效果.常见的就是 ...

  5. elementUI中如何在Tabs标签页的标题文字后面添加文字或图标

    1.效果如下: 实现代码如下:<el-tab-pane name="first"> <span slot="label"> <sp ...

  6. Data Warehouse - [00] 参考文献

    浪尖大数据:什么是数据仓库的架构?企业数据仓库架构如何建设? 浪尖大数据:元数据管理在数据仓库的实践应用 - 要养成终生学习的习惯 -

  7. 【渗透测试】Vulnhub DarkHole

    渗透环境 攻击机:   IP: 192.168.216.129(Kali) 靶机:     IP:192.168.216.130 靶机下载地址:https://www.vulnhub.com/entr ...

  8. 阿里巴巴开源ETL(数据的抽取、转换、加载)工具-----DataX

    一个比Sqoop好用的数据传输工具 下载maven的时候,加一个 -P让下载的压缩包到指定目录 而要让档案自动储存到指令的目录下,则需要借用-P这个参数wget -p 目录 网址wget -P /ro ...

  9. vim使用技巧记录

    1.查找 '/' + 要找的字符串(正则表达式) + Enter # 查找偏移 'n': 查找下一个 'N': 查找上一个 大小写敏感性:字符串尾接\c不敏感,\C敏感 可以~/.vimrc在配置中配 ...

  10. vuepress-reco搭建与部署指南

    个人博客:槿苏的知识铺 一.前言   在技术飞速发展的今天,高效地编写.维护和呈现文档已成为开发者不可或缺的能力.无论是开源项目.团队协作还是个人知识沉淀,一套结构清晰.体验优雅的文档系统都能显著提升 ...