ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux网络(二):局域网内两台主机是如何对话的?从 MAC 校验到协议栈封包与分用

Linux网络(二):局域网内两台主机是如何对话的?从 MAC 校验到协议栈封包与分用 ◆ 博主名称 小此方-CSDN博客大家好欢迎来到小此方的博客。⭐️网络系列个人专栏 【主题曲】计算机网络⭐️此方的GitHub github_此方⭐️我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)文章目录概要序論一、 局域网网络传输1.1 多样化的局域网通信标准1.2 局域网通信的核心要素MAC 地址1.2.1 MAC 地址的基本属性1.3 以太网传输原理与数据帧过滤1.3.1 局域网广播与 MAC 地址判定1.4 物理介质竞争共享资源与碰撞域1.4.1 临界资源与互斥属性1.4.2 数据碰撞与碰撞域二、 同网段主机间的数据包封装与分用机制2.1 同网段消息传输的宏观与微观视角2.1.1 逻辑逻辑同层通信与物理逐层递交2.1.2相关问题解答与细节2.1.2.1不考虑应用层协议其他协议必须解决的两个问题是什么2.1.2.2为什么要自顶向下封装2.2 报文构成报头与有效载荷2.2.1 报文的核心公式Tips看看报头的源码2.2.2 各层报文的专业称谓2.3 数据包的封装过程Encapsulation2.4 数据包的分用过程Demultiplexing2.4.1 分用的路由逻辑三、简单复盘概要序論Hello大家好我是此方本文为大家带来局域网传输的基本流程讲解。主要讲解局域网内部的数据传输流程。前半部分介绍局域网通信的基本原理包括各种局域网标准、MAC地址的作用、以太网的广播与数据帧过滤机制以及共享介质下的碰撞域问题后半部分详细拆解同网段两台主机通信的全过程分析报头与有效载荷的组成并逐层展示数据包的封装与分用流程。一、 局域网网络传输1.1 多样化的局域网通信标准在探讨网络通信时我们需要遵循从局部到整体的演变规律。局域网LAN作为网络通信的最基本单元存在着多种不同的实现标准以太网Ethernet当前最主流的局域网技术。令牌环网Token Ring早期在特定领域使用的局域网标准。无线 LANWLAN/Wi-Fi基于无线电波传输的技术标准。尽管局域网标准各式各样但它们都解决了同一基本问题同一个局域网内的两台主机是否能够直接进行通信答案是肯定的。1.2 局域网通信的核心要素MAC 地址在局域网中每台主机必须拥有唯一的标识来保证其身份的唯一性这个标识就是MAC 地址Media Access Control Address。MAC 地址 / 物理地址 / 硬件地址MAC Address / Physical Address / Hardware Address这是该网卡固化的全球唯一硬件识别码。网卡里面有一段特定的区域用来存放mac地址,未来我们的系统可以使用网卡驱动来获取网卡中的这个mac地址。1.2.1 MAC 地址的基本属性概念与作用MAC 地址用于识别数据链路层中直接相连的节点。MAC地址位于数据链路层的报头。结构与表示长度为 6 个字节通常用 16 进制数字加冒号分隔的形式表示例如08:00:27:03:fb:19。唯一性与配置网卡出厂时即已确定 MAC 地址通常具有全球唯一性且不可修改部分虚拟机中的 MAC 地址非真实硬件地址可能产生冲突也有部分网卡支持用户自定义配置。查看方式在 Windows 系统下可以通过ipconfig /all命令进行查看。讲个段子某公司核心系统崩溃定位发现底层代码硬编码校验了一个未知设备 MAC 地址。排查全公司设备无果后保洁阿姨刚好换掉一台旧智能饮水机系统连接彻底断绝。大家翻看旧饮水机标签写着代码里那串 MAC。原来早期程序员随手找了个“永不关机”的设备做加密绑定几经人员变动成了无人敢动的“神明代码”最终引发单点故障。1.3 以太网传输原理与数据帧过滤以太网的数据传输逻辑类似于上课喊名字的场景我说话指向张三李四王五赵六都可以听到。 张三说话指向我李四王五赵六都可以听到。 在教室里只有我和张三受理解信息 李四王五赵六不受理信息。1.3.1 局域网广播与 MAC 地址判定当主机 A 向主机 E 发送数据时数据包构建主机 A 将数据封装为结构体struct形式其中包含源 MAC 地址src: MacA、目标 MAC 地址dst: MacE以及具体数据内容。广播发送主机 A 将报文发送到共享的局域网物理介质上此时局域网内的所有主机主机 B、主机 C、主机 D、主机 E都会收到该数据帧。这种发出去的消息大家都可以听到叫做“泛洪”MAC 地址校验与过滤主机 B 接收到数据帧后比对目标 MAC 地址发现dst: MacE与自己的 MAC 地址MacB不匹配直接丢弃该数据包。主机 C、主机 D 采取相同方式直接丢弃。主机 E 校验后发现dst: MacE正是自己的 MAC 地址遂接收该报文并可以采用相同的方式向主机 A 进行响应。主机之间通信我们必须注意到本质是两个协议栈在通信。而数据发送的原始动力90%是人小细节补充什么是混杂模式Promiscuous Mode正常模式下的丢弃机制如果底层收到数据报文但校验发现该报文的目标 MAC 地址不是发给自己的直接丢弃该报文。混杂模式的作用当网卡被设置为混杂模式时网卡关闭物理层的过滤开关。此时无论数据帧的目标 MAC 地址是否指向自己只要是在该局域网物理介质上传播的数据帧网卡都会接收并向上层递交。网络抓包工具原理诸如 Wireshark、tcpdump 等抓包工具其核心原理就是在网络层/数据链路层之间开启网卡的混杂模式从而监听并截获局域网内所有流经的数据包。1.4 物理介质竞争共享资源与碰撞域从底层系统视角理解以太网在物理本质上是一块共享资源。1.4.1 临界资源与互斥属性因为物理介质是共享的所以在没有交换机分割的原始以太网环境中单一发送原则任何时刻只允许一台机器向网络中发送数据。临界资源Critical Resource以太网物理介质本质上属于临界资源具备互斥属性。1.4.2 数据碰撞与碰撞域如果多台主机同时向网络中发送数据信号在物理介质上叠加会产生数据干扰这种现象被称为数据碰撞Data Collision。碰撞域Collision Domain在没有交换机划分的情况下整个以太网就是一个碰撞域。碰撞检测与避免为了保证通信正常所有发送数据的机器都必须执行碰撞检测Collision Detection和碰撞避免Collision Avoidance机制即 CSMA/CD 协议。当主机检测到碰撞发生时会停止发送并等待一个随机时间后再尝试重发。在同一个以太网内部。主机数量增加会导致碰撞概率增加进而丢包概率增加。 于是单位时间发送的报文减少网速变慢。如何理解碰撞检测你发出去的报文你自己也会接收到如果听不清楚那就是碰撞了。二、 同网段主机间的数据包封装与分用机制2.1 同网段消息传输的宏观与微观视角明确了局域网物理介质的通信原理后我们看同一个网段内两台主机之间发送消息的具体过程。在 TCP/IP 协议族中数据的传输并非简单的“端到端直接投递”而是严格遵循自顶向下封装、自底向上解包的层次化流程。2.1.1 逻辑逻辑同层通信与物理逐层递交同层逻辑通信在应用层视角下主机 1 的用户 A 与主机 2 的用户 B 似乎在直接进行同层协议通信例如用户 A 发送“你好”用户 B 接收“你好”。但这种“同层直接通信”是一种逻辑假象。物理逐层递交在实际传输过程中数据必须先在发送端主机 1由上至下依次传递给下层协议最终通过底层网卡以太网驱动程序在物理介质上传输到达接收端主机 2后由对方底层的网卡接收再自底向上逐层剥离报头并向上交付。网络协议栈每一层都有协议整个过程就是一个出栈和入栈于是我们把网络协议分层叫做协议栈2.1.2相关问题解答与细节2.1.2.1不考虑应用层协议其他协议必须解决的两个问题是什么四个字分离分用。报头必须要能做到和有效载荷进行分离的能力报头中必须包含如何将自己的有效载荷交付给上层的哪一个具体协议这个我们没有代码无法细讲我们在后续的文章中会结合代码具体讲解。2.1.2.2为什么要自顶向下封装因为必须贯穿操作系统贯穿协议栈OS是硬件网卡的管理者。用户想要发送数据但是有这个能力的能力只有网卡。2.2 报文构成报头与有效载荷为了实现跨层级与跨主机的准确传输各层协议都需要在数据中添加特定的控制信息。2.2.1 报文的核心公式网络传输中的数据单位统称为报文Message其基本组成结构为报头Header对应协议层的结构体字段包含了控制与路由所需的元数据如首部长度、载荷长度、上层协议类型等。有效载荷Payload除了报头之外剩余的实际数据部分。对上一层而言其发送的整个报文在下一层看来都属于“有效载荷”。报文关系报文 报头 有效载荷。Tips看看报头的源码2.2.2 各层报文的专业称谓随着数据在协议栈中自顶向下流动不同层级对封装后的完整报文有着明确的专业称谓传输层称为段Segment例如 TCP 段。网络层称为数据报Datagram例如 IP 数据报。数据链路层称为帧Frame例如以太网帧。2.3 数据包的封装过程Encapsulation应用程序产生数据后通过协议栈向下传递并逐层添加首部的过程称为封装。以 TCP/IP 协议栈为例应用层用户数据如“你好”被传入应用层加上应用层首部Appl 首部形成应用层报文。传输层传输层如 TCP收到应用层数据后将其视为有效载荷在前端加上TCP 首部通常为 20 字节组合成TCP 段。网络层网络层IP 协议接收 TCP 段在其前端加上IP 首部通常为 20 字节组合成IP 数据报。数据链路层以太网驱动程序接收 IP 数据报在其前端加上14 字节的以太网首部并在尾部加上4 字节的以太网尾部校验码构建成完整的以太网帧数据载荷通常限制在 46~1500 字节之间。物理传输最终的以太网帧通过网卡发送到物理传输介质如以太网上。2.4 数据包的分用过程Demultiplexing当以太网帧到达目标主机后底层网卡接收该数据并开始自底向上逐层剥离首部根据首部中的“上层协议字段”将有效载荷准确交付给对应的上层协议这一过程称为分用。2.4.1 分用的路由逻辑链路层分用以太网驱动程序接收到进入的帧后剥离以太网首部与尾部。根据以太网首部中的帧类型Frame Type字段将载荷分用交给上层的IP、ARP或RARP协议。网络层分用IP 层接收到 IP 数据报后剥离 IP 首部。根据 IP 首部中的协议值Protocol Number字段将载荷分用交给对应的传输层协议如TCP、UDP、ICMP或IGMP。传输层分用传输层协议如 TCP 或 UDP剥离传输层首部根据首部中的目标端口号Port Number将最终的用户有效载荷准确交付给对应的应用程序用户进程。三、简单复盘好我们来复盘一下本文就到此结束了两台计算机通过TCP/IP协议通讯的过程如下所示好的本期内容就到这里如果对你有帮助还不要忘记点赞三联支持。我是此方我们下期再见。bye! Linux、C、算法持续连载中欢迎关注WeChat Official Account 【此方的技术栈】。
返回列表