|彻底搞懂网络底层!五层模型、序列化、MAC/ARP、MTU 一次吃透)
网络原理前言网络分层思想五层网络模型分层核心优势应用层详解自定义应用层协议三大主流序列化数据格式XML上古时期的数据格式JSON当下最流行的文本序列化格式ProtocolBufferProtobuf/pb二进制序列化格式超文本含义DNS 应用层协议DNS 域名解析系统DNS 工作流程DNS高并发解决方案数据链路层详解以太网协议主流链路层协议以太网数据帧格式MAC 地址物理地址载荷的类型IP数据报ARP请求/应答PADRARP请求/应答PAD总结前言上一篇《网络二》我们完整落地 Java Socket 编程实战手写 UDP 词典服务器、TCP 单线程 / 多线程 / 线程池并发服务端掌握了网络编程代码实现。但只会写代码不足以应对后端面试必须吃透底层网络理论。本篇从核心分层思想切入自上而下讲解 TCP/IP 五层模型重点讲解程序员日常开发接触最多的应用层XML/JSON/Protobuf 三种序列化格式、HTTP、DNS 域名解析再下沉到数据链路层详解以太网帧、MAC 地址、ARP/RARP 协议、MTU 分片机制打通上层业务代码与底层硬件转发的知识链路。网络分层思想五层网络模型网络的本质是众多网络协议共同协作分层解耦每一层只专注自身职责下层为上层提供能力支撑。五层模型从上至下分别为应用层面向应用程序定义数据该如何使用、交互规则是程序员接触最频繁的一层传输层关注起点主机与终点主机之间的数据传输核心就是TCP、UDP两大协议网络层核心职责是路径规划决定数据包走哪条线路抵达目标数据链路层关注相邻两个节点之间的数据转发物理层依托网线、光纤、无线电等硬件设备传输高低电平、电信号。分层核心优势解耦分层修改某一层协议不会影响其他层级代码职责清晰每层只处理自身专属工作降低开发与维护复杂度标准化全球设备遵循同一套分层标准不同厂商硬件可互通。应用层详解自定义应用层协议应用层核心自定义应用层协议。绝大多数业务场景下程序员都需要自定义应用层协议同时存在HTTP这类成熟现成协议。协议本质就是双方约定在代码中规定数据如何传输分为两步根据业务需求明确需要传输哪些信息约定信息按照固定格式组织、序列化。三大主流序列化数据格式XML上古时期的数据格式依靠标签嵌套组织结构化数据HTML属于XML的变种。示例requestuserId1000/userIdposition100, 30/position/request优点可读性极强结构清晰缺点标签冗余严重传输时占用大量网络带宽现在基本被JSON替代。JSON当下最流行的文本序列化格式典型键值对结构语法规则所有键值对整体用{ }包裹键值对之间用 , 分隔键和值之间用 : 分隔键固定位String 字符串类型值可以是数字、字符串、JSON对象、数组。示例{userId:1000,position:100, 30}优点简洁、可读性好相比XML体积大幅缩小缺点依旧是文本格式会产生额外带宽开销。ProtocolBufferProtobuf/pb二进制序列化格式以二进制方式组织、压缩数据带宽占用做到极致。优点占用带宽最低、传输效率最高适合高性能、高并发场景缺点可读性差一定程度地影响开发效率。超文本含义经验总结日常业务开发优先 JSON极致性能场景游戏、RPC、物联网优先 ProtobufXML基本淘汰。应用层中最知名的、广泛使用的现成的应用层协议是 HTTP 协议超文本传输协议。超文本不仅仅是纯文本还包含图片、视频、音频、字体等所有网络资源。DNS 应用层协议DNS 域名解析系统IP 地址是用来描述设备在网络上的位置的一串数字记忆难度极高因此引入“域名”。此时就需要有一套自动的系统建立域名 ↔ IP 地址映射关系。最早的域名解析系统是通过一个简单的本地文件来实现的 — hosts文件。但维护成本极大不可能每次更新都要将每个设备的hosts文件更新一遍因此诞生了分布式DNS服务器集群。DNS 工作流程用户输入域名客户端向DNS服务器发送查询请求DNS服务器查询对应域名绑定的IP地址返回给客户端客户端拿到IP后向目标IP建立TCP连接访问业务服务。后续工作也只需维护更新这一组服务器即可。DNS高并发解决方案“高并发”问题一台服务器硬件资源有限服务器处理每个请求就要消耗一定的资源无法承载全网海量请求。开源允许各个网站运营商搭建“DNS镜像服务器”节流让请求量变少让每个上网的设备搞一个本地缓存。一般进行DNS解析访问的都是就近的运营商的镜像服务器经常有可能出现问题。IPv4 和 IPv6 的DNS相互独立两套解析体系完全不互通。数据链路层详解以太网协议主流链路层协议以太网协议是通过网线/光纤来通信使用的协议横跨数据链路层物理层。其他通信方式WiFi、移动4G/5G蜂窝网络。以太网数据帧格式帧头载荷IP数据包帧尾校验和头部存放源MAC地址6位目标MAC地址6位2位类型字段描述了载荷数据是一个什么样的数据。载荷上层完整IP数据包。尾部CRC校验和校验数据传输是否出错。MAC 地址物理地址最开始网络层协议和数据链路层协议是各自独立发明的因此有两份地址IP地址、MAC地址。定义网卡出厂时固化的唯一硬件地址6字节十六进制表示示例A9-3B-76-9A-4D-4C作用局域网内表示单台设备交换机依靠MAC地址转发数据帧对比IPIP负责全网跨网段路由MAC仅负责同一局域网相邻节点转发特性全球唯一一台主机多网卡则拥有多个独立的MAC地址。IP 地址和 MAC 地址各自的用途IP 协议立足于全局完成整个通信过程的路径规划工作以太网协议关注于局部相邻两个设备之间的通信过程。源IP和目的IP始终是整个通信过程中最初的起点和终点源MAC和目的MAC会根据当前转发的过程每次到达一个节点向下一个节点转发时MAC会随之改变。示例我要去旅游起点是合肥终点是北京中途一次经过郑州、天津。合肥 - 郑州源IP合肥目的IP北京源MAC合肥目的MAC郑州。郑州 - 天津源IP合肥目的IP北京源MAC郑州目的MAC天津。天津 - 北京源IP合肥目的IP北京源MAC天津目的MAC北京。载荷的类型IP数据报IP数据报的最大长度不能超过1500字节MTU。IP数据报的分包组包大概率是因为MTU引起的而不是触发64KB上限。IP 数据包分片当上层 IP 报文长度超过 MTU 时IP 协议自动拆分数据包接收端重组UDP 上限关联UDP 单包最大 64KB若超过链路 MTU必须分片开发成本极高因此大数据传输优先选用 TCP。MTU数据链路层的数据报能携带的最大载荷长度。不同数据链路层协议的MTU不同与物理介质有关。ARP请求/应答PAD根据已知IP 地址查询同一局域网内设备对应的MAC 地址。交换机内部维护 ARP 映射表类似哈希表存储 IP 与 MAC 对应关系。交换机这样的设备收到以太网数据报就要根据MAC地址映射表判断往哪个网口转发。RARP请求/应答PAD反向地址解析协议根据 MAC 地址查询 IP多用于无盘设备启动。这两种协议不是传输“业务数据”而是辅助转发的协议。总结五层分层思想是网络核心设计每层各司其职分层解耦应用层三种序列化格式取舍日常业务 JSON、高性能 RPC 用 Protobuf、XML 基本淘汰DNS 解决域名难记忆问题依靠分布式 缓存支撑海量互联网访问数据链路层依靠 MAC 地址实现局域网转发ARP 完成 IP→MAC 地址映射MTU 限制单帧最大数据长度超过阈值 IP 会自动分片UDP 不适合超大报文传输。后续持续更新网络相关内容。本篇是「Java后端编程系列」的连载内容点击链接查看完整系列 上一篇网络二Java Socket 编程全实战UDP 回显 / 词典服务器、TCP 单线程→多线程线程池演进 下一篇网络四全网最细网络层原理IP 协议、IP 地址分类、子网划分、路由转发、NAT 穿透详解 点击直达 Java后端基础专栏合集