传输层概述核心功能协议支持服务与接口工作过程传输层协议TCP(传输控制协议)特点工作过程应用场景UDP(用户数据报协议)特点工作过程应用场景服务模型TCP的服务模型核心特性服务模型的实现适用场景UDP的服务模型服务模型的实现UDP报文段结构适用场景套接字 Socket套接字的定义套接字的工作原理套接字类型套接字的全双工通信套接字的应用示例传输层的应用网络地址转换 NATNAT的主要功能NAT的类型NAT地址类型NAT的工作过程NAT的优缺点多对一映射请求和响应的上下文管理地址或端口的复用不同点
传输层概述
传输层(Transport Layer)是OSI(开放系统互联)模型的第4层,在网络通信中起着关键作用。它位于网络层之上,负责在主机之间实现可靠的数据传输和端到端的通信。以下是传输层的主要特点和功能:
核心功能
关键词: (端到端)可靠通信, 流量控制, 错误修正
分割 / 重组数据 / 数据流
- 端到端通信:
- 提供主机间的逻辑通信(不是直接的物理连接)。
- 通过端口号区分不同的应用程序。
- 数据分段和重组:
- 将应用层的数据分成更小的段(segment)以便传输。
- 在接收端重组数据,确保数据完整性。
- 可靠性和流量控制:
- 可靠性: 通过重传机制、确认应答、校验和来保证数据准确无误地到达。
- 流量控制: 调整发送方的发送速率以匹配接收方的处理能力,避免网络拥塞。
协议支持
传输层主要支持以下两种协议:
- TCP(Transmission Control Protocol,传输控制协议):
- 面向连接,提供可靠传输。
- 适用于需要高可靠性的应用,例如HTTP、FTP和电子邮件。
- UDP(User Datagram Protocol,用户数据报协议):
- 无连接,不保证可靠性。
- 适用于实时传输和对延迟敏感的应用,例如视频流、DNS查询。
服务与接口
- 提供服务接口给上层的应用层,例如套接字(Socket)。
- 使用端口号来标识应用程序(如HTTP的80端口、HTTPS的443端口)。
工作过程
传输层在通信过程中执行以下操作:
- 连接建立和释放:
- TCP通过三次握手建立连接,四次挥手释放连接。
- 数据传输:
- TCP确保数据按序到达并提供错误检测与修复。
- UDP则是尽力而为,不负责数据的完整性。
- 复用与分用:
- 复用:多个应用共享同一个传输层协议。
- 分用:接收数据后将其交给对应的应用。
5. 举例
假如您通过浏览器访问一个网站:
- 传输层将您的请求(如加载网页的HTTP请求)分段,并通过网络发送到服务器。
- 在服务器端,传输层接收数据段并重新组装,交给应用层处理。
总结来说,传输层是网络通信中的关键一环,确保数据在两个主机间高效、可靠地传递,并为上层应用提供稳定的通信基础。
传输层协议

TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)是传输层的两种主要协议,它们各自为不同类型的网络通信提供服务。以下是它们的详细比较和特点:
TCP(传输控制协议)

特点
- 可靠性: 提供数据完整性保证,确保数据无丢失、无重复、无错误。
- 面向连接: 在发送数据前需要建立连接(通过三次握手),数据传输结束后需释放连接(四次挥手)。
- 数据按序: 确保接收方按发送顺序接收数据。
- 流量控制: 根据接收方的处理能力调整发送方的速率。
- 拥塞控制: 避免因网络拥塞导致数据丢失。
工作过程
- 建立连接: 使用三次握手。
- 数据传输: 数据以段(Segment)的形式发送,接收方通过ACK(确认应答)确认收到的数据。
- 连接释放: 使用四次挥手断开连接。
应用场景
- 需要高可靠性的数据传输场景。
- 如:网页浏览(HTTP/HTTPS)、电子邮件(SMTP、IMAP)、文件传输(FTP)。
UDP(用户数据报协议)


特点
- 无连接: 不需要建立和断开连接,数据直接发送。
- 不可靠: 不提供数据完整性保证,也不进行重传和确认。若需要保证可靠则需应用层来处理.
- 轻量级: 协议头部简单(仅8字节),效率高。
- 不保证顺序: 数据可能乱序到达。
- 无拥塞控制: 可以以任意速度发送数据。
工作过程
- 每个数据包(称为数据报,Datagram)独立处理,不依赖前后数据包。
- 数据直接发送到目标端口,接收方自行处理丢失或乱序的数据。
应用场景
- 对实时性要求高,能容忍部分数据丢失的场景。
- 如:视频流(YouTube、Netflix)、在线语音通话(VoIP)、在线游戏、DNS查询。
3. TCP与UDP的对比
特点 TCP UDP
是否连接 面向连接 无连接
可靠性 可靠(重传、确认机制) 不可靠(尽力而为)
顺序性 保证数据按顺序到达 不保证顺序
开销 较高(连接管理、重传机制 较低(无连接、头部简单)
应用场景 文件传输、网页浏览等 实时视频、语音、DNS等
总结
- TCP 是一种重视数据可靠性和完整性的协议,适用于需要精确数据传输的应用。
- UDP 是一种注重效率和实时性的协议,适用于对部分数据丢失容忍度高的场景。
服务模型
TCP和UDP的服务模型分别基于其协议的特性,为网络上的数据传输提供不同的服务方式。以下是对它们服务模型的详细解释:
TCP的服务模型

首部除可选部分外共20个字节:


- 源端口和目的端口字段——各占 2 字节
- 端口是运输层与应用层的服务接口
- 运输层的复用和分用功能都要通过端口才能实现
- 序号字段 SEQ ——占 4 字节
- 传送的数据流中的每一个字节都编上一个序号
- 序号字段的值指本报文段所发送的数据的 第一个字节 的序号
- 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的 第一个字节的序号
- 数据偏移(即首部长度)—— 占 4 位
- 指出 TCP 报文段的 数据起始处 距 TCP 报文段的起始处的长度
- 单位是 32 位字(以 4 字节为计算单位)
- 保留字段——占 6 位,保留为今后使用,目前置 0
- 紧急 URG = 1 时,表明紧急指针字段有效
- 告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
- ACK = 1 时确认号字段有效, ACK = 0 时确认号字段无效
- 推送 PSH (PUSH) —— 接收 TCP 收到 PSH = 1 的报文段, 就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
- 复位 RST (RESET=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
- 同步 SYN=1 表示这是一个连接请求或连接接受报文
- 终止 FIN (FINISH) —— 用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求 释放运输连接。
- 窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。
- 检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分
- 紧急指针字段 —— 占 16 位,指出在本报文段中 紧急数据 共有多少个字节(紧急数据放在本报文段数据的最前面)
- TCP 最初只有一种选项,即最大报文段长度 MSS(Maximum Segment Size)
- MSS 告诉对方缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节
- 数据字段加上 TCP 首部才等于整个的 TCP 报文段
- 填充字段 —— 这是为了使整个首部长度是 4 字 节的整数倍。

TCP是面向连接的协议,它提供可靠的端到端通信服务,以下是TCP服务模型的核心内容:
核心特性
- 面向连接:
- 在通信开始前,必须通过三次握手建立连接。
- 数据传输结束后,使用四次挥手释放连接。
- 可靠性:
- 确认机制(ACK): 发送方会等待接收方的确认,如果未收到确认,会重传数据。
- 序号(Sequence Number): 确保数据按顺序到达,避免数据包重复或丢失。
- 校验和(Checksum): 用于检查数据的完整性。
- 流量控制:
- 滑动窗口机制: 动态调整发送窗口大小,避免接收方被数据淹没。
- 已发送且已确认的数据:
- 发送方已发送并收到接收方的确认(ACK)。
- 这些数据不会再重新发送。
- 已发送但未确认的数据:
- 发送方已发送,但尚未收到接收方的确认。
- 如果超时未收到ACK,发送方需要重传这些数据。
- 窗口内未发送的数据:
- 可以发送
- 窗口外不可发送的数据
- 尚未进入当前窗口范围的待发送数据。
- 只有窗口移动到覆盖这些数据后,这些数据才能被发送。
- 初始状态:
- 发送方根据接收方的接收窗口大小(由TCP报文的窗口字段指定)确定可发送的数据范围。
- 发送数据:
- 发送方将窗口范围内的数据发送给接收方,同时等待ACK。
- 接收ACK:
- 接收方确认收到的数据,并通知新的接收窗口大小。
- 发送方根据ACK移动窗口,将窗口向前滑动。
- 动态调整:
- 如果接收方处理能力减弱,会缩小窗口大小。
- 如果接收方处理能力恢复,会增大窗口大小。
- 若接收方收到数据1, 2, 3,并发送ACK=4。
- 窗口滑动到4-8,发送方可以发送6, 7, 8。
- 如果数据6丢失,接收方不会发送ACK=7。
- 发送方超时后重传数据6,滑动窗口暂停。
- 动态调整窗口大小:
- 接收方根据自己的处理能力通过窗口字段通知发送方。
- 实现流量控制,避免接收方被数据“淹没”。
- 提高传输效率:
- 允许发送方在等待ACK的同时继续发送数据。
- 减少等待时间,提升网络吞吐量。
- 处理数据重传:
- 未确认的数据会被暂存,超时后重传,确保可靠性。
- 发送方发送过多数据导致接收方处理不过来。
- 网络拥塞时,过多的数据导致丢包和重传。
- 滑动窗口机制通过动态调整窗口范围,控制数据的发送和接收速率。
- 它不仅提高了传输效率,还实现了对发送方的流量控制,是TCP可靠传输的重要保障。

TCP的滑动窗口机制
TCP的滑动窗口机制是一种流量控制方法,用于在数据发送方和接收方之间动态调整数据传输速率,确保发送方不会以超出接收方处理能力的速率发送数据。它是TCP协议实现可靠性和效率的重要手段。
1. 滑动窗口的核心概念
滑动窗口机制的核心思想是:在数据传输中,接收方会通知发送方一个接收窗口的大小(Window Size),表示接收方当前可以接受的最大数据量。发送方根据窗口大小控制发送数据的数量。
窗口的三部分
在滑动窗口中,待发送报文段分为四部分:
2. 滑动窗口的工作原理
滑动窗口机制的关键是窗口会根据数据的传输情况动态滑动。
工作流程
3. 滑动窗口的示例
假设滑动窗口大小为5,数据流分为1, 2, 3, 4, 5, 6, 7, 8, 9, 10:
初始状态:
窗口范围是1-5,发送方可以发送数据1, 2, 3, 4, 5。
接收ACK:
丢包或超时:
4. 滑动窗口的特点
5. 滑动窗口与流量控制
滑动窗口是TCP实现流量控制的核心机制,能够避免以下问题:
接收方通过调整窗口大小有效控制发送方的发送速率。
6. 总结
4. 拥塞控制:
- 慢启动(Slow Start): 根据网络情况逐步增加发送速率。
- 拥塞避免(Congestion Avoidance): 在网络拥塞时减少发送速率。
服务模型的实现
- TCP和UDP均使用端口号标识应用程序。周知端口号定义在RFC1700中, 0~255的端口号为TCP和UDP公共应用程序保留
- 每个TCP连接通过 套接字(Socket) 唯一标识,套接字格式为 (源IP地址, 源端口号) 和 (目标IP地址, 目标端口号) 的组合。
- TCP连接是全双工通信(双方可以同时发送和接收数据)。
- TCP不支持广播和多播
- 三次握手和四次挥手
- 第一次握手(客户端 → 服务器):
- 客户端向服务器发送一个带有 SYN=1 的TCP报文段(同步标志位)。
- 表明客户端希望建立连接,同时初始化自己的序列号 SEQ=x。
- 客户端进入 SYN-SENT 状态。
- 第二次握手(服务器 → 客户端):
- 服务器收到SYN报文段后,发送一个带有 SYN=1 和 ACK=1 的报文段。
- 表明服务器同意连接,并对客户端的SYN请求进行确认, 确认号=x+1。
- 同时初始化自己的序列号 SEQ=y。
- 服务器进入 SYN-RECEIVED 状态。
- 第三次握手(客户端 → 服务器):
- 客户端收到服务器的SYN+ACK报文段后,发送一个 ACK=1 的报文段,确认服务器的SYN。
- 确认号=y+1,并带上之前的序列号 SEQ=x+1。
- 客户端进入 ESTABLISHED(连接已建立) 状态,服务器收到ACK后也进入 ESTABLISHED 状态。
- 双方进入连接已建立状态,可以进行数据传输。
- 第一次挥手(客户端 → 服务器):
- 客户端发送一个带有 FIN=1 的TCP报文段(终止标志位)。
- 表明客户端不再发送数据,但仍可接收服务器的数据。
- 客户端进入 FIN-WAIT-1 状态。
- 第二次挥手(服务器 → 客户端):
- 服务器收到FIN报文段后,发送一个带有 ACK=1 的报文段,确认客户端的请求。
- 此时服务器进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
- 服务器继续传送未发送完的数据
- 第三次挥手(服务器 → 客户端):
- 服务器向客户端发送一个带有 FIN=1 的报文段。
- 表明服务器的数据也已经发送完毕,准备断开连接。
- 服务器进入 LAST-ACK 状态。
- 第四次挥手(客户端 → 服务器):
- 客户端收到服务器的FIN报文段后,发送一个带有 ACK=1 的报文段。
- 客户端进入 TIME-WAIT 状态,等待2个报文最大生存时间(2MSL)后,确认所有数据已被接收。
- 客户端最终进入 CLOSED 状态,服务器收到ACK后直接进入 CLOSED 状态。
- 双方都进入 CLOSED 状态,连接完全断开。
- 确保双方的接收和发送能力正常:
- 第一次握手:客户端告诉服务器“我可以发送数据”。
- 第二次握手:服务器告诉客户端“我可以接收数据并发送数据”。
- 第三次握手:客户端告诉服务器“我可以接收数据”。
- TCP连接是全双工的,连接断开需要双方各自单独关闭。
- 客户端和服务器需要分别发送FIN报文段,表示自己不再发送数据,但可以继续接收数据。
- 客户端:CLOSED → SYN-SENT → ESTABLISHED
- 服务器:CLOSED → LISTEN → SYN-RECEIVED → ESTABLISHED
- 客户端:ESTABLISHED → FIN-WAIT-1 → FIN-WAIT-2 → TIME-WAIT → CLOSED
- 服务器:ESTABLISHED → CLOSE-WAIT → LAST-ACK → CLOSED
- 重传计时器
- 控制数据包的重传时间,确保丢失的数据段可以被重新发送。
- 每当TCP发送数据包后,启动重传计时器。如果在计时器到期之前未收到对该数据包的确认(ACK),TCP会认为数据段丢失,并重新发送。
- 动态调整: 重传超时时间(RTO, Retransmission Timeout)是动态计算的,基于往返时间(RTT, Round-Trip Time)的估计值。
- 如果发生重传,TCP会以指数回退算法增加超时时间,以避免网络拥塞。
- 误重传: 如果ACK延迟过大,可能触发不必要的重传。
- 超时与网络延迟: 如果网络延迟较大,可能需要更长的RTO。
- 坚持计时器
- 用于解决窗口大小为0时的死锁问题。
- 当接收方通知发送方窗口大小为0(无法接收数据)时,发送方会停止发送数据并启动坚持计时器。
- 坚持计时器触发时,发送方会发送一个探测报文段(Window Probe),询问接收方的窗口大小是否已更新。
- 如果接收方更新了窗口大小,会通过ACK通知发送方继续发送数据。
- 如果接收方窗口仍为0,发送方会重启坚持计时器,定期发送探测报文段,直到窗口恢复。
- 避免在窗口大小为0的情况下,通信双方进入僵局。
- 保持计时器
- 检测长时间空闲的连接是否仍然有效。
- 如果一个TCP连接长时间没有数据交换,启动保持计时器以检测对端是否仍然存活。
- 当计时器到期时,发送方会发送一个保持探测包(Keepalive Probe)。
- 如果对端存活,会返回一个响应。
- 如果连续多次发送探测包都未收到响应,TCP会认为连接已断开,关闭该连接。
- 防止长时间空闲的连接占用系统资源,例如:SSH会话。
- 默认情况下,许多系统可能关闭Keepalive功能以节省资源。
- 时间等待计时器
- 确保在连接关闭时,所有的数据包都被正确处理,并防止旧的重复数据包对新连接产生干扰。
- 在TCP连接的四次挥手中,主动关闭方进入TIME-WAIT状态,并启动时间等待计时器。
- 计时器的时长是报文最大生存时间的两倍(2MSL,Maximum Segment Lifetime)。
- 在计时器到期之前,主动关闭方会保持该连接的资源,拒绝任何重复的报文段。
- 确保最后的ACK报文段到达对端。
- 避免旧连接的报文干扰新的连接。
- 如果TIME-WAIT状态的连接过多,会消耗大量系统资源。
- 三次握手是为了可靠地建立连接,确保双方通信能力正常。
- 四次挥手是为了优雅地断开连接,确保双方数据都已完全传输。
TCP的三次握手和四次挥手
TCP的三次握手和四次挥手分别用于建立连接和释放连接,是其面向连接、可靠传输的重要机制。
1. TCP三次握手(建立连接)

TCP三次握手的目标是在通信双方之间建立一个可靠的连接,确保双方能够发送和接收数据。
过程
每交流一次, 序列号++;
确认号总是对方发来数据包的序列号+1
连接建立后的状态
2. TCP四次挥手(释放连接)

TCP的四次挥手用于优雅地断开连接,确保双方所有数据都传输完成。
过程
确认机制:


连接断开后的状态
3. 为什么三次握手而不是两次?
4. 为什么四次挥手而不是三次?
5. 状态转换图
三次握手状态转换
四次挥手状态转换
TCP的四个计时器
作用
工作原理
常见问题
作用
工作原理
目的
作用
工作原理
典型应用
注意
作用
工作原理
目的
副作用
6. 总结
适用场景
- 需要高可靠性和有序数据传输的应用。
- 如:HTTP(网页浏览)、SMTP(邮件)、FTP(文件传输)。
UDP的服务模型
UDP是无连接的协议,提供简单、高效的服务。其服务模型具有以下特点:
核心特性
- 无连接:
- 不需要建立或断开(逻辑)连接,直接将数据报发送给目标。
- 每个数据报独立传输,与其他数据报无关。
- 轻量级:
- 数据报的头部信息非常少(仅8字节),传输开销低。
- 没有序号、确认机制和流量控制。
- 不可靠性:
- 不保证数据送达或按顺序到达。
- 丢失的数据不会被重传,需由应用层负责数据的完整性。
服务模型的实现
- TCP和UDP均使用端口号标识应用程序。
- 套接字格式为 (IP地址, 端口号),无需维持连接状态。
- 每个数据报以单独的方式发送,不依赖之前或之后的数据报。
UDP报文段结构

- 2字节源端口号
- 2字节目的端口号
- 2字节报文长度
- 2字节校验和
- 数据部分(报文)
适用场景
- 需要快速传输,对数据完整性和顺序要求不高的场景。
- 如:视频流、语音通话(VoIP)、DNS查询。
套接字 Socket

套接字是网络通信中的一种编程接口,用于实现进程间的网络通信。它是应用程序和传输层协议(如TCP、UDP)之间的桥梁,负责在网络中发送和接收数据。
套接字的定义
套接字是网络通信的端点,用于标识网络中两个通信实体之间的连接。它包含以下关键信息:
- IP地址:标识设备在网络中的位置。
- 端口号:标识设备上的具体应用程序或服务。
一个套接字通常由以下格式表示:
(IP地址, 端口号)
套接字的工作原理
套接字的作用是通过绑定IP地址和端口号,使应用程序能够通过传输层协议(如TCP或UDP)与其他主机进行通信。
工作过程
- 创建套接字:程序通过调用操作系统提供的接口创建套接字。
- 绑定套接字:为套接字分配IP地址和端口号。
- 建立连接(仅适用于TCP):
- 客户端套接字发起连接请求。
- 服务器端套接字监听并接受连接。
- 数据传输:
- 客户端和服务器通过套接字发送和接收数据。
- 关闭套接字:释放资源,断开通信。
套接字类型
根据传输层协议的不同,套接字分为两种类型:
TCP套接字
- 面向连接:需要建立连接后才能通信。
- 可靠传输:数据传输有确认机制。
- 使用场景:HTTP(网页浏览)、FTP(文件传输)、SMTP(邮件传输)。
UDP套接字
- 无连接:无需建立连接,直接发送数据。
- 不可靠传输:数据可能丢失或乱序。
- 使用场景:DNS查询、视频流、在线语音通话。
套接字的全双工通信
套接字支持全双工通信,这意味着通信的双方可以同时发送和接收数据。例如:
- 客户端的套接字 (客户端IP, 客户端端口)。
- 服务器的套接字 (服务器IP, 服务器端口)。
数据通过这些套接字进行传输,实现双向通信。
套接字的应用
- 客户端-服务器模型: 套接字通常用于实现客户端与服务器之间的通信。
- 服务器: 监听特定端口,等待客户端连接。
- 客户端: 连接服务器端口,发送请求并接收响应。
- 实时通信: 应用于在线游戏、实时聊天、音视频传输等。
示例
以TCP套接字为例,建立一个简单的通信:
- 客户端:
- 创建套接字。
- 连接服务器套接字。
- 发送和接收数据。
- 关闭套接字。
- 服务器:
- 创建套接字。
- 绑定IP地址和端口号。
- 监听连接请求。
- 接受客户端的连接。
- 发送和接收数据。
- 关闭套接字。
UDP和TCP在通信方式上的设计差异决定了它们使用的套接字标识方式不同:
1. UDP套接字由二元组标识
UDP是无连接协议,发送和接收数据时没有明确的连接状态维护,因此其套接字只需由以下二元组标识即可:
- 本地IP地址
- 本地端口号
原因:
- UDP不需要建立连接,也不维护发送方和接收方之间的连接状态。只要知道对应的是自己主机上的哪个进程即可
- 每次发送数据时,应用程序需要显式指定目标地址和端口号。
- 收到的数据通过本地IP和端口号即可分发到对应的应用程序。
举例:
假设一个UDP服务器绑定了IP=192.168.1.1和Port=12345,它接收来自多个客户端的请求,但并不区分每个客户端的具体连接状态,只通过端口号接收数据(只需要知道收到的数据是发给谁的 / 发出的数据是发自谁的)。
2. TCP套接字由四元组标识
TCP是面向连接的协议,在通信过程中需要区分每一条连接。TCP套接字需要以下四元组标识:
- 本地IP地址
- 本地端口号
- 远程IP地址
- 远程端口号
原因:
- TCP是一种可靠传输协议,通信双方需要通过三次握手建立连接,确保数据的有序和可靠传输。
- 一个服务器的同一个端口可能同时与多个客户端通信(即多个连接),需要通过远程IP和端口号加以区分。
- 四元组可以唯一标识一条TCP连接,从而使服务器能够正确区分和处理来自不同客户端的数据。
传输层的应用
网络地址转换 NAT


NAT(Network Address Translation,网络地址转换)是一种网络技术,用于在多个设备通过一个共享的公网IP地址访问互联网时,完成私有网络和公共网络之间的地址转换。NAT广泛应用于路由器和防火墙等设备,主要解决IP地址不足和提供一定程度的网络安全。
NAT的主要功能
- 地址复用:
允许多个设备共享一个或多个公网IP地址访问互联网,从而减少公网IP的需求。拥有公网IP的设备通常就是该网络的默认网关.
- 隐私保护和安全性:
内部网络的设备使用私有IP地址,这些地址在外部网络不可见,减少了外部攻击的可能性。
- 灵活性:
内网设备的IP地址可以自由分配和更改(对应网络层的私有IP地址),而无需通知外部网络。
NAT的类型
- 静态NAT(Static NAT):
每个私有IP地址分别映射到多个固定的公网IP地址(一一对应),通常用于需要从外部访问内网设备的场景。
- 动态NAT(Dynamic NAT):
从一组预定义的公网IP地址池中动态分配公网IP地址给私有IP(先来先服务原则, 接受了一个offer就拒绝其他)。
- 端口地址转换(PAT, Port Address Translation):
也称为NAT Overload,是最常用的NAT类型。多个私有IP通过一个公网IP访问互联网,网关使用端口号区分不同的会话。
示例:
- 内部设备
192.168.1.100
的请求通过80
端口映射到公网IP地址203.0.113.1:12345
。
- 另一个设备
192.168.1.101
则映射到203.0.113.1:12346
。
NAT地址类型

在NAT(网络地址转换)中,三种主要的地址类型是内部本地地址(Inside Local Address)、内部全局地址(Inside Global Address)和外部全局地址(Outside Global Address)。这些地址定义了网络中的私有地址和公网地址之间的转换关系,以下是详细解释:
1. 内部本地地址(Inside Local Address)
定义
- 内部本地地址是局域网内部设备所使用的私有IP地址。
- 通常是RFC 1918定义的私有地址范围(和网络层串起来了):
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
特点
- 内部本地地址在局域网中唯一标识一台主机。
- 仅在局域网内部有效,无法直接用于与互联网通信。
- 需要通过NAT转换为可路由的公网地址才能访问外网。
示例
- 家庭网络中的电脑IP地址:
192.168.1.100
。
- 企业内部服务器的地址:
10.1.1.20
。
2. 内部全局地址(Inside Global Address)
定义
- 内部全局地址是NAT设备将内部本地地址映射到外部网络(例如互联网)时,所分配的公网IP地址。
- 这些地址在公网中唯一,可被外部主机识别和访问。
特点
- 一个内部本地地址可以映射到一个唯一的内部全局地址(静态NAT),或者多个内部本地地址共享一个内部全局地址(PAT,端口地址转换)。
- 内部全局地址负责将局域网内部设备的请求路由到外部网络。
示例
- 如果家庭网络的公网IP地址是
203.0.113.1
,当局域网中的电脑192.168.1.100
访问互联网时,NAT将其映射为203.0.113.1
。
3. 外部全局地址(Outside Global Address)
定义
- 外部全局地址是局域网设备与外部网络(如互联网)通信时,目标主机的公网IP地址。
- 它是目标设备在公网中唯一标识的地址。
特点
- 外部全局地址通常是互联网服务的服务器IP地址,例如网站或云服务的地址。
- 局域网内的设备在访问外部网络时,会通过NAT记录目标的外部全局地址。
示例
- 当局域网中的设备访问www.example.com时,其对应的IP地址
93.184.216.34
就是外部全局地址。
NAT的工作过程
- 请求阶段(内部到外部):
- 局域网设备(内部本地地址,例如
192.168.1.100
)发起请求访问互联网目标(外部全局地址,例如93.184.216.34
)。
- NAT设备将内部本地地址转换为内部全局地址(例如
203.0.113.1
)。
- 响应阶段(外部到内部):
- 外部目标设备将响应发送到内部全局地址(例如
203.0.113.1
)。
- NAT设备根据映射表将数据包转发回对应的内部本地地址(例如
192.168.1.100
)。
总结
- 内部本地地址用于标识局域网内的设备。
- 内部全局地址用于在公网中标识局域网设备,是NAT转换后的地址。
- 外部全局地址是公网中目标设备的地址,用于局域网设备访问外部资源。
通过NAT的地址映射机制,这三种地址类型共同实现了私有地址和公网地址之间的转换,从而使局域网设备可以访问互联网,同时节约公网IP地址。
NAT的优缺点

优点:
- 节省IPv4公网地址资源。
- 提供一定程度的网络安全隔离。
- 支持私有网络的灵活性和扩展性。
缺点:
- 可能导致某些应用(如P2P或VoIP)连接问题。
- 增加了网络延迟,尤其是在大型网络中。
- IPv6部署时逐渐减少对NAT的需求,因为IPv6地址空间充足。
NAT在IPv4网络中非常普遍,但随着IPv6的逐步普及,其重要性逐渐降低。
从功能和架构的角度来看,NAT(网络地址转换)管理内网设备请求的方式,与操作系统使用端口号管理进程请求有一定的相似性。两者都涉及到多对一映射和上下文管理,具体分析如下:
多对一映射
- NAT
NAT将多个内网设备的私有IP地址映射到一个或几个公共IP地址,并通过端口号区分不同设备的请求。例如,多个设备通过一个公共IP地址访问互联网时,NAT会给每个设备的请求分配不同的端口号,以便能够正确路由响应数据。
- 操作系统端口管理
操作系统为每个网络进程分配唯一的端口号(结合本地IP),以便在一个设备上同时运行多个网络进程。例如,浏览器可能占用端口8080,而文件传输服务使用21端口。
请求和响应的上下文管理
- NAT
NAT维护一个连接表,用来记录私有IP和端口号与公共IP和端口号的映射关系。这类似于一个会话管理机制,使得返回的数据包能够正确地回到发起请求的设备。
- 操作系统
操作系统通过套接字(IP地址 + 端口号)来区分不同的网络进程,确保每个进程的网络通信是独立的。例如,当多个浏览器标签同时加载网页时,操作系统根据目标IP地址和端口号管理每个会话。
地址或端口的复用
- NAT
NAT可以复用公共IP地址,只需确保分配的端口号在会话期间是唯一的,从而有效节省了IP地址资源。
- 操作系统
操作系统的端口管理机制也是为了复用一个设备的网络接口(IP地址),确保多个进程可以共享网络资源。
不同点
- 范围
NAT主要用于跨越网络边界(内网到外网)的地址转换,而操作系统的端口管理更多地关注本地进程之间的资源分配。
- 透明性
NAT对内网设备的工作通常是透明的,而操作系统的端口号通常是显式分配的,开发者或用户可以直接感知。
总结来看,NAT和操作系统端口管理在核心思想上有相似性,都是为了在有限的资源(IP地址或端口号)中实现高效的多对一资源管理。