网络层协议

网络层(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. 什么是token?token是用来干嘛的?

    从事计算机行业的朋友都听说过token这么个东西,尤其是deepseek爆火后api(大家都知道什么意思吧),但是其他行业的人就很少了解到token,下面就给大家来详细介绍一下token是什么意思?t ...

  2. 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~

    大家好,我是汤师爷! 最近,腾讯发布了一款ima产品,主打用AI来帮你搜索信息.管理知识库. 说实话,一开始用混元大模型,感觉不咋地,很鸡肋的. 不过最近腾讯把DeepSeek R1接进来了,一下子解 ...

  3. 服务器vps测试脚本大全,新云linux综合工具箱-linux加速脚本 一键硬盘挂载

    服务器vps测试脚本大全 一键更换yum脚本 一键优化shh卡顿 一键更换软件源 各种linux加速 BBR原版 bbrplus 魔改plus 锐速 脚本linux加速脚本 一键硬盘挂载 一键cc防御 ...

  4. php服务器如何验证令牌

    在PHP中,令牌通常用于防止跨站请求伪造(CSRF)攻击.以下是一个简单的例子,展示了如何生成和验证令牌: 生成令牌: function generateToken($length = 32) { / ...

  5. Easyexcel(3-文件导出)

    响应头设置 通过设置文件导出的响应头,可以自定义文件导出的名字信息等 //编码格式为UTF-8 response.setCharacterEncoding("UTF-8"); // ...

  6. canvas 获取图片中某个坐标的颜色

    同步发布:https://blog.jijian.link/2020-04-05/canvas-get-color/ 由于功能受限,此处不能放 iframe 嵌入链接,如需看到实时效果,请移步 htt ...

  7. Laravel11 从0开发 Swoole-Reverb 扩展包(一) - 扩展包开发

    前言 大家好呀,我是yangyang.好久没更新了,最近新项目在使用laravel11(截止目前发文,laravel12也发布了)做开发,自己也是利用有些空闲时间做些除开业务以外的深入学习,因此也就萌 ...

  8. Django实战项目-学习任务系统-发送短信通知

    接着上期代码内容,继续完善优化系统功能. 本次增加发送短信通知功能,学习任务系统发布的任务,为了更加及时通知到学生用户,再原有发送邮件通知基础上,再加上手机短信通知功能. 第一步:开通短信通知服务 目 ...

  9. VMware ESXi系统

    esxi全称"VMware ESXi",是可直接安装在物理服务器上的强大的裸机管理系统,是一款虚拟软件,不需安装其他操作系统,是VMware服务器虚拟化的基础.通过直接访问并控制底 ...

  10. Docker镜像介绍

    一.Docker镜像介绍 镜像是Docker的三大核心概念之一. Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认的镜像仓库下载(默认使用Docker Hu ...