C#网络编程(二)----网络层/链路层
网络层协议网络层(Network Layer) 的主要功能是实现主机之间的逻辑寻址、路由选择和分组转发,确保数据在不同网络(如局域网、广域网)之间的传输
协议类别核心协议路由协议辅助协议扩展协议功能逻辑寻址、分组转发路径计算与路由表维护地址解析、错误控制、组播管理安全、NAT、QoS等典型协议IPv4/IPv6、IPSecOSPF、BGP、RIPARP、ICMP、IGMPNAT、GRE、DiffServIP
IP(Internet Protocol),是分配给连接到计算机网络的每个设备唯一标识符,用于在网络中通信。IP地址使数据包能够在网络上找到其位置,将数据从源主机路送到目的主机,跨越多个中间网络设备(路由器),屏蔽底层网络差异(如以太网、Wi-Fi、广域网)。
但IP协议有点类似渣男,秉承着不主动,不拒绝,不负责原则:
[*]无连接
不预先建立建立,直接发送数据包(Packet)。
[*]不可靠
不保证数据一定到达,不检查错误,不重传丢失的数据
它来鹅城只做三件事:
[*]编址与标识(寻址)
每个连接到网络的设备,都会有一个IP地址。IP协议使用这个地址来表示源地址与目标地址。
[*]路由与转发
每个数据包携带源IP与目IP,路由器根据"路由表"选择最佳转发路径。
路由表通过静态配置或动态协议(如 BGP、OSPF)生成,核心依据是 “最长前缀匹配” 原则
[*]分片与重组(仅接收端)
当数据包超过链路层的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的分类
[*]IPv4
最早和最常用的IP协议版本,使用32位地址,范围从0.0.0.0到255.255.255.255。约为43亿个,由于互联网的增长,已经快枯竭了。
[*]IPv6
为了解决IPv4地址枯竭,而设计的新一代IP协议。使用128位地址,提供海量的IP池。比如:fe80::a00e:9ff2:c15f:e833%21
IPv4地址已经快枯竭了,但依旧是互联网的主流。因为还有DHCP,CIDR,NAT为它续命。
看过的小伙伴一定对647号小宇宙不陌生,路由器就是为IPv4构建了一个又一个的小宇宙,不至于枯竭。
特性IPv4IPv6地址长度32位(约43亿地址)128位(足够为每粒沙子分配地址)地址空间分类严格(A/B/C类),浪费严重无类别(CIDR),地址分配灵活首部长度可变(20~60字节),处理复杂固定40字节,效率更高安全性依赖IPsec(可选)强制支持IPsec(加密与认证)移动性需额外协议(如MIP)内置移动性支持(家乡地址)分片源主机和路由器均可分片仅源主机分片,路由器不处理兼容性与IPv6不直接兼容支持双栈(同时运行IPv4/IPv6)IP地址分类
根据作用范围,IP地址可以分为两种
[*]私有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
[*]公有IP地址
有互联网服务商分配,可以在全球互联网中识别。
根据是否可以更改
[*]静态IP地址
手动分配,不会改变。适合用于长期保持相同IP的设备,比如服务器。
[*]动态IP地址
由DHCP服务器给你自动分配,每次连接网络或者超过一定时间都会改变。
ICMP
ICMP(Internet Control Message Protocol),用于IP层的错误报告和网络诊断,是一种面向无连接的协议。当IP数据无法访问目标IP,目标路由器时,会自动发送ICMP消息。
我们常用的Ping命令就是基于ICMP
链路层协议
数据链路层是 物理层(硬件连接)与 网络层(IP 寻址)的桥梁,负责在相邻节点之间传输数据帧,处理物理寻址、接入控制和错误检测。
MAC
数据链路层分为两个子层:
[*]逻辑链路控制子层(Logical Link Control,LLC)
为网络层提供统一接口(支持多协议如 IP、IPX),处理流量控制和链路管理(IEEE 802.2 标准,现代网络中功能多集成到 MAC 子层)。
LLC层常被简化,属于被抛弃的小孩
[*]媒体访问控制(Media Access Control,MAC)
负责物理寻址(MAC地址),接入控制(CSMA/CD)和数据帧的传输
MAC地址:Media Access Control Address,是网络设备的硬件地址,用于在局域网中标识设备。MAC工作在链路层,用于设备间通信。
MAC帧格式
字段长度(字节)功能描述前导码(Preamble)7由 1010...10 交替的二进制位组成,用于接收端同步时钟,使物理层设备调整接收速率。帧开始定界符(SFD)1固定为 10101011,标识MAC帧的开始,通知接收端后续为有效数据帧。目的MAC地址(DMAC)6接收方网卡的物理地址(48位),最高位为 0 表示单播地址,1 表示组播地址,全 1(FF: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 地址。
[*]ARP请求
主机 A 构造一个 ARP 请求数据包,包含自身 IP 和 MAC 地址,以及目标 IP(192.168.1.4)。
该请求以广播形式发送到局域网(所有主机都会收到)。
[*]ARP响应
所有主机收到广播后,检查目标 IP 是否为自身。
只有目标设备会响应,并发送一个包含其MAC地址的ARP响应帧。
[*]地址缓存
发送方收到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 未知,填全 0(6 字节全 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呢?
[*]解决的问题不同
MAC地址作用于链路层,是区分硬件的物理地址,MAC 地址负责每个网段内的微观传输。
IP地址作用于网络层,是区分主机的逻辑地址,IP地址指导跨网段的宏观路由。
如果只用MAC地址进行网络寻址的话,MAC地址长度48位。2^48=256TB内存。这将会是你负担不起的路由器价格。
ARP的变种与扩展
[*]反向地址解析协议(RARP)
功能与 ARP 相反:已知 MAC 地址,解析对应的 IP 地址。
现已很少使用,被 DHCP 等协议替代。
[*]免费 ARP(Gratuitous ARP)
主机主动发送 ARP 广播(即使无通信需求),属于ARP reply帧,但请求的目标是自己。
用于是告诉广播域中其它主机自己的存在,更新其他主机的 ARP 缓存(如虚拟机迁移后,负载均衡的主备切换)。
判断广播域中是否存在IP冲突
[*]无状态 ARP(Stateless ARP)
主机不维护 ARP 缓存,每次通信前都发送 ARP 请求(适用于低功耗设备或动态网络)。
眼见为实
ARP
ICMP
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]