下篇:网络层、数据链路层与应用层:IP、NAT、ARP、DNS 一网打尽

下篇:网络层、数据链路层与应用层:IP、NAT、ARP、DNS 一网打尽

传输层解决了"端到端"的可靠性问题,但数据包如何在复杂网络中找路?

本篇从网络层 IP 协议讲起,再到数据链路层以太网、MAC、MTU、ARP,最后落到应用层 DNS 与 NAT 技术。

一、网络层:在复杂环境中确定路径

网络层的作用:在复杂的网络环境中确定一个合适的路径。

基本概念:

  • 主机:配有 IP 地址,但不进行路由控制的设备。
  • 路由器:既配有 IP 地址,又能进行路由控制。
  • 节点:主机和路由器的统称。

IP 协议头格式

IP 首部关键字段:

  • 4 位版本号:IPv4 为 4。
  • 4 位头部长度:IP 头部长度是多少个 32bit,最大 15,因此 IP 头部最大 60 字节。
  • 8 位服务类型:包括最小延时、最大吞吐量、最高可靠性、最小成本等,四者冲突,只能选一个。
  • 16 位总长度:IP 数据报整体占多少字节。
  • 16 位标识:唯一标识主机发送的报文。如果 IP 报文在数据链路层被分片,每个分片的 id 相同。
  • 3 位标志字段:第二位为 1 表示禁止分片;第三位表示"更多分片"。
  • 13 位分片偏移:分片相对于原始 IP 报文开始处的偏移,实际偏移字节数是该值 ×8。
  • 8 位生存时间 TTL:数据报到达目的地的最大报文跳数,一般是 64。每经过一个路由,TTL 减 1,减到 0 还没到达就丢弃。用于防止路由循环。
  • 8 位协议:表示上层协议类型。
  • 16 位头部校验和:CRC 校验,鉴别头部是否损坏。
  • 32 位源地址和 32 位目标地址。
  • 选项字段:不定长,最多 40 字节。

二、地址管理:网络号与主机号

IP 地址分为两部分:

  • 网络号:保证相互连接的两个网段具有不同标识。
  • 主机号:同一网段内,主机之间具有相同网络号,但必须有不同的主机号。

通过合理设置主机号和网络号,可以保证在相互连接的网络中,每台主机的 IP 地址都不相同。

手动管理子网内 IP 很麻烦,于是有 DHCP 技术,能自动给子网内新增主机节点分配 IP 地址。

一般路由器都带有 DHCP 功能,因此路由器也可以看做一个 DHCP 服务器。

分类划分方案

过去曾把所有 IP 地址分为五类:

  • A 类:0.0.0.0 到 127.255.255.255
  • B 类:128.0.0.0 到 191.255.255.255
  • C 类:192.0.0.0 到 223.255.255.255
  • D 类:224.0.0.0 到 239.255.255.255
  • E 类:240.0.0.0 到 247.255.255.255

随着 Internet 飞速发展,这种划分方案局限性显现:大多数组织申请 B 类地址,导致 B 类很快分配完,而 A 类浪费大量地址。

CIDR 与子网掩码

新的划分方案叫 CIDR:

  • 引入额外的子网掩码来区分网络号和主机号。
  • 子网掩码是 32 位正整数,通常以一串"0"结尾。
  • 将 IP 地址和子网掩码进行"按位与"操作,得到的结果就是网络号。
  • 网络号和主机号的划分与 IP 地址是 A 类、B 类还是 C 类无关。

例如:

  • IP:140.252.20.68
  • 子网掩码:255.255.255.0
  • 网络号:140.252.20.0
  • 子网地址范围:140.252.20.0 ~ 140.252.20.255

更简洁的表示:140.252.20.68/24,表示子网掩码高 24 位是 1。

特殊 IP 地址

  • 主机地址全 0:网络号,代表这个局域网。
  • 主机地址全 1:广播地址,用于给同一链路中所有主机发送数据包。
  • 127.*:本机环回测试,通常是 127.0.0.1。

私有 IP 与公网 IP

RFC1918 规定了用于组建局域网的私有 IP 地址:

  • 10.*,前 8 位是网络号,共 16,777,216 个地址。
  • 172.16. 到 172.31.,前 12 位是网络号,共 1,048,576 个地址。
  • 192.168.*,前 16 位是网络号,共 65,536 个地址。

包含在这些范围中的都称为私有 IP,其余称为全局 IP 或公网 IP。

三、NAT 与 NAPT:解决 IP 不够用

一个路由器可以配置两个 IP 地址:

  • WAN 口 IP
  • LAN 口 IP(子网 IP)

路由器 LAN 口连接的主机,都从属于当前路由器的子网。

不同路由器的子网 IP 通常一样,比如 192.168.1.1。子网内主机 IP 不能重复,但子网之间可以重复。

子网内主机需要和外网通信时,路由器将 IP 首部中的 IP 地址进行替换,替换成 WAN 口 IP。

这样逐级替换,最终数据包中的 IP 地址成为一个公网 IP。这种技术称为 NAT。

如果局域网内多个主机都访问同一个外网服务器,服务器返回数据的目的 IP 都相同。

NAT 路由器如何判定转发给哪个局域网主机?

这时使用 NAPT ,用 IP + port 来建立关联关系。

这种关联关系由 NAT 路由器自动维护。TCP 建立连接时生成表项,断开连接后删除表项。

NAT 的优缺点:

  • 优点:不需要更新硬件设备,只更新软件,就可以解决 IP 地址不够用的问题。
  • 缺点:无法从 NAT 外部向内部服务器建立连接;转换表生成和销毁有额外开销;通信过程中一旦 NAT 设备异常,即使存在热备,所有 TCP 连接也可能断开。

四、路由选择:一跳一跳问路

路由的过程,是一跳一跳"问路"的过程。

所谓"一跳",就是数据链路层中的一个区间,具体在以太网中指从源 MAC 地址到目的 MAC 地址之间的帧传输区间。

IP 数据包到达路由器时,路由器先查看目的 IP,决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器。

依次反复,一直到达目标 IP 地址。

如何判定当前数据包该发送到哪里?依靠每个节点内部维护的路由表 。

路由表可以使用 route 命令查看。

如果目的 IP 命中了路由表,就直接转发。

路由表最后一行主要由下一跳地址和发送接口组成,当目的地址与其他行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

五、数据链路层:以太网、MAC、MTU 与 ARP

认识以太网

"以太网"不是一种具体网络,而是一种技术标准。

既包含数据链路层内容,也包含一些物理层内容,例如网络拓扑结构、访问控制方式、传输速率等。

以太网是当前应用最广泛的局域网技术。

以太网帧格式:

  • 目的地址:6 字节
  • 源地址:6 字节
  • 类型:2 字节
  • 数据:46~1500 字节
  • CRC:4 字节

源地址和目的地址指网卡硬件地址,也叫 MAC 地址,长度 48 位,网卡出厂时固化。

帧协议类型字段有三种值,分别对应 IP、ARP、RARP。

帧末尾是 CRC 校验码。

MAC 地址与 IP 地址的区别

  • IP 地址描述的是路途总体的起点和终点。
  • MAC 地址描述的是路途上的每一个区间的起点和终点。

MTU

MTU 相当于发快递时对包裹尺寸的限制。

以太网帧中的数据长度规定最小 46 字节,最大 1500 字节。最大值 1500 称为以太网的最大传输单元 MTU。

MTU 对 IP 协议的影响:

  • 较大的 IP 数据包要进行分片。
  • 每个小包 IP 协议头的 16 位标识都相同。
  • 到达对端后再按顺序重组。
  • 一旦任意小包丢失,接收端重组就会失败,但 IP 层不会负责重新传输数据。

MTU 对 UDP 协议的影响:

  • UDP 携带数据超过 1472(1500 - 20 IP 首部 - 8 UDP 首部),就会在网络层分成多个 IP 数据报。
  • 任意一个丢失,都会引起接收端网络层重组失败,整个数据丢失概率大大增加。

MTU 对 TCP 协议的影响:

  • TCP 单个数据报最大消息长度称为 MSS。
  • TCP 建立连接过程中,通信双方会进行 MSS 协商。
  • 双方在发送 SYN 时会在 TCP 头部写入自己能支持的 MSS 值,然后选择较小的作为最终 MSS。

ARP 协议

ARP 不是单纯的数据链路层协议,而是介于数据链路层和网络层之间的协议。

ARP 协议建立了主机 IP 地址和 MAC 地址的映射关系。

工作流程:

  1. 源主机发出 ARP 请求,询问"IP 地址是 X 的主机的硬件地址是多少",并将请求广播到本地网段。
  2. 目的主机接收到广播 ARP 请求,发现 IP 与本机相符,则发送 ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中。
  3. 每台主机都维护一个 ARP 缓存表,可以用 arp -a 查看。表项有过期时间,一般 20 分钟。

六、应用层:DNS 与 URL 过程

DNS 是一整套从域名映射到 IP 的系统。

TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但 IP 地址不方便记忆。

于是人们发明了主机名,并使用 hosts 文件描述主机名和 IP 地址的关系。

DNS 是应用层协议,底层使用 UDP 进行解析,浏览器会缓存 DNS 结果。

浏览器中输入 URL 后发生的事情,是一个经典面试题,没有固定答案,越详细越好。

可以围绕 DNS 解析、TCP 连接、HTTP 请求、服务器处理、HTTP 响应、浏览器渲染、连接关闭等步骤展开。

七、全文总结与面试重点

数据链路层

  • 作用:两个设备(同一种数据链路节点)之间传递数据。
  • 以太网是一种技术标准。
  • 理解以太网帧格式、MAC 地址、ARP 协议、MTU。

网络层

  • 作用:在复杂网络环境中确定合适路径。
  • 理解 IP 地址、IP 地址与 MAC 地址区别。
  • 理解 IP 协议格式。
  • 了解网段划分方法。
  • 理解如何解决 IP 数目不足:CIDR、NAT、IPv6。
  • 理解私有 IP 和公网 IP。
  • 理解路由过程、IP 数据包分片原因、NAT 工作原理。

传输层

  • 作用:负责数据从发送端传输到接收端。
  • 理解端口号概念。
  • 认识 UDP,了解其特点。
  • 认识 TCP,理解可靠性、状态转化。
  • 掌握连接管理、确认应答、超时重传、滑动窗口、流量控制、拥塞控制、延迟应答、捎带应答。
  • 理解 TCP 面向字节流、粘包问题及解决方案。
  • 能够基于 UDP 实现可靠传输。
  • 理解 MTU 对 UDP/TCP 的影响。

应用层

  • 作用:满足日常需求的网络程序都在应用层。
  • 能够根据需求设计应用层协议。
  • 理解 DNS 原理和工作流程。

TCP 之所以复杂,是因为它既要保证可靠性,又要尽可能提高性能。

可靠性靠:校验和、序列号、确认应答、超时重发、连接管理、流量控制、拥塞控制。

提高性能靠:滑动窗口、快速重传、延迟应答、捎带应答。

其他还有:超时重传定时器、保活定时器、TIME_WAIT 定时器等。

下篇小结

本篇从网络层 IP 协议出发,覆盖了:

  • IP 协议头与地址管理
  • CIDR、私有 IP、公网 IP
  • NAT 与 NAPT
  • 路由选择
  • 数据链路层以太网、MAC、MTU、ARP
  • 应用层 DNS 与 URL 过程
  • 全文面试重点总结

至此,TCP/IP 网络原理的上、中、下三篇博客全部完成。

建议复习时按"分层"建立知识树:应用层 → 传输层 → 网络层 → 数据链路层,再横向串联端口、五元组、TCP 可靠性、UDP、IP、NAT、ARP、DNS 等核心概念。

相关推荐
Yang96111 小时前
鼎讯信通LDMN-JM3雷达信号模拟器在电子对抗训练中的作用
网络
ITxiaobing20232 小时前
IP 定位服务怎么选:第三方认可、实测精度和合规边界不是一回事
网络·网络协议·tcp/ip
VidDown2 小时前
从视频画面里提取文字:OCR、文字检测与结构化输出
python·网络协议·ocr·音视频·视频编解码·视频
阿钱真强道2 小时前
12 嵌入式操作系统 | UDP 服务器编程
服务器·网络协议·udp
安易算力3 小时前
智算中心网络架构选型:RDMA、InfiniBand与以太网技术深度解析
网络·架构
xiaoye-duck3 小时前
《Linux 网络编程》深入理解五种 IO 模型:从 IO 本质到非阻塞 IO 实战
linux·网络
嵌入式小能手3 小时前
飞凌嵌入式ElfBoard-Shell编程应用实例-使用WiFi拨号上网
linux·服务器·网络
兢谨网安3 小时前
Web应用渗透测试方案
网络·网络安全
码匠许师傅3 小时前
【C++三方组件】Asio 上篇:回调式 TCP 客户端与服务端
开发语言·c++·tcp/ip