计算机网络常见知识点总结(下)
下篇主要是传输层和网络层相关的内容。
一、TCP 与 UDP
TCP 与 UDP 的区别
TCP | UDP | |
---|---|---|
是否面向连接 | 是,必须建立连接(三次握手) | 否,不需要建立连接 |
是否可靠 | 是,提供可靠传输(确认、重传机制) | 否,不保证数据传输的可靠性 |
是否有状态 | 是,维护连接状态(连接表) | 否,传输时无连接状态 |
传输效率 | 较慢,因为有连接管理和流量控制 | 较快,开销小,缺乏可靠性保障 |
传输形式 | 面向字节流 | 面向数据报文段(包) |
首部开销 | 20 ~ 60 字节 | 8 字节 |
是否提供广播或多播服务 | 否,支持点对点通信 | 是,支持一对多、多对一、多对多 |
流量控制 | 支持(拥塞控制、滑动窗口) | 不支持流量控制 |
错误检测与纠正 | 有,能进行差错检测并纠正(通过校验和) | 有,提供校验和,但无纠正机制 |
使用场景 | 文件传输、网页浏览、邮件传输等 | 视频直播、实时游戏、DNS查询等 |
传输的顺序性 | 保证按顺序到达 | 不保证顺序 |
连接释放 | 需要释放连接(四次挥手) | 无需释放连接 |
总结
- TCP 是可靠、面向连接的协议,确保数据传输的顺序和完整性,适用于要求高可靠性的场景,如文件传输、网页浏览等。
- UDP 是不可靠、无连接的协议,传输效率高但不保证数据的顺序和完整性,适用于要求低延迟、高传输效率的场景,如实时音视频传输、在线游戏等。
什么时候选择 TCP,什么时候选择 UDP?
选择 TCP 的场景:
- 文件传输:如 FTP、SFTP 等,传输过程中要求数据的完整性和顺序性。
- 电子邮件:如 SMTP、IMAP、POP3,邮件传输中要求数据的可靠性和顺序。
- 网页浏览:HTTP 和 HTTPS 协议要求数据能够准确传输,保证页面加载正确。
- 远程登录:如 SSH、Telnet 等,要求数据传输不丢失且顺序正确。
- 数据库通信:如 MySQL、PostgreSQL 等数据库,需要保证数据的一致性和可靠性。
选择 UDP 的场景:
- 实时语音通信:如 VoIP(语音通信)、视频通话等,实时性要求高,即使丢失一些数据,影响也不大。
- 视频直播:如直播平台(Twitch、YouTube Live 等),用户观看视频时允许一定的丢包和延迟,但要求传输速度较快。
- 在线游戏:如多人在线游戏,低延迟和高并发要求远高于数据的完整性,丢失少量数据影响不大。
- DNS 查询:DNS 请求和响应通常使用 UDP,因为查询频繁且不需要建立连接。
- 广播和多播通信:如局域网中的广播或视频流多播等,UDP 支持一对多或多对多的传输模式。
总结
- 选择 TCP:当传输的数据需要保证完整性、顺序性,且对延迟和效率要求相对较低时。
- 选择 UDP:当实时性要求较高,丢失少量数据对整体效果影响不大时。
HTTP 基于 TCP 还是 UDP?
- HTTP/1.0 和 HTTP/2.0 是基于 TCP 协议的。所有的 HTTP 请求和响应数据都通过 TCP 连接传输,确保数据的可靠性和顺序性。HTTP/2.0 还引入了多路复用(Multiplexing)来改善性能,但仍然依赖于 TCP 连接。
- HTTP/3.0 改变了这一点,HTTP/3.0 不再基于 TCP,而是基于 UDP 协议,使用 QUIC(Quick UDP Internet Connections) 协议来解决 TCP 的一些缺点,特别是 队头阻塞问题。QUIC 协议能有效减少连接建立时间,并且在多路复用数据流时,避免了 TCP 中由于单个流丢包导致整个连接阻塞的问题。
为什么 HTTP/3 使用 QUIC 协议而不是 TCP?
- 减少队头阻塞:在 HTTP/2 中,多个请求共享一个 TCP 连接,导致一个请求的延迟可能会影响其他请求。HTTP/3 通过 QUIC 协议解决了这个问题,使得每个数据流独立,某个流发生丢包时,不会影响到其他流。
- 减少握手延迟:传统的 TCP 连接需要进行三次握手,然后再进行 TLS 握手,建立 HTTPS 连接需要的往返时间(RTT)较长。QUIC 协议(基于 UDP)减少了握手的延迟,尤其在使用 TLS 1.3 时,QUIC 可以在 0 或 1 个 RTT 的情况下建立连接,大大提升了性能。
总结
- HTTP/1.0 和 HTTP/2.0:基于 TCP 协议。
- HTTP/3.0:基于 UDP 协议,使用 QUIC 协议来解决 TCP 的一些限制和性能瓶颈。
使用 TCP 的协议有哪些?使用 UDP 的协议有哪些?
使用 TCP 的协议
- HTTP 协议(HTTP/3.0 之前):用于浏览器与 Web 服务器之间的通信。
- HTTPS 协议:安全的 HTTP 协议,通过 SSL/TLS 加密传输数据。
- FTP 协议:用于在计算机之间传输文件,存在安全隐患(无加密)。
- SMTP 协议:用于发送电子邮件,不负责接收邮件。
- POP3/IMAP 协议:用于从邮件服务器接收电子邮件。IMAP 支持邮件同步和更丰富的功能。
- Telnet 协议:用于通过终端登录到远程服务器,存在明文传输安全风险。
- SSH 协议:提供安全的远程登录和数据传输,防止信息泄露。
- SFTP 协议:基于 SSH 的文件传输协议,提供加密传输。
使用 UDP 的协议
- HTTP 协议(HTTP/3.0):HTTP/3.0 改用基于 UDP 的 QUIC 协议,解决了队头阻塞问题。
- DHCP 协议:动态主机配置协议,用于分配 IP 地址给客户端。
- DNS 协议:域名系统(DNS),将域名解析为 IP 地址,支持 UDP 和 TCP。
- NTP 协议:网络时间协议,用于同步计算机时间。
- TFTP 协议:简单文件传输协议,常用于引导计算机或进行小文件传输。
- RTP 协议:实时传输协议,常用于语音和视频传输。
- SNMP 协议:简单网络管理协议,用于监控和管理网络设备。
- VoIP 协议:基于 UDP 的语音通信协议,确保低延迟传输。
总结
- TCP:适用于需要可靠传输、顺序性、连接控制和重传机制的场景。
- UDP:适用于需要快速传输、低延迟、对丢包不敏感的场景。
TCP 三次握手和四次挥手
TCP 三次握手
三次握手的目的是为了在客户端和服务器之间建立一个可靠的连接,确保双方都能够发送和接收数据。下面是三次握手的详细过程:
第一次握手:
- 客户端向服务器发送一个 SYN(同步)包,表示客户端希望建立连接,并进入 SYN_SEND 状态。这个包里包含了一个初始序列号(ISN,Initial Sequence Number),表示客户端的初始序列号。
第二次握手:
- 服务器收到客户端的 SYN 包后,若同意建立连接,就会返回一个 SYN-ACK 包,表示服务器已经接收到客户端的请求,并且愿意建立连接。此包包含服务器自己的初始序列号,以及对客户端序列号的确认(即客户端序列号 + 1)。
第三次握手:
- 客户端收到服务器的 SYN-ACK 包后,会再发送一个 ACK 包给服务器,确认收到服务器的同步包。此时,客户端和服务器都知道对方的初始序列号,连接正式建立。
为什么要三次握手?
- 第一次握手客户端向服务器表明自己希望建立连接并且发送了自己的初始序列号。
- 第二次握手服务器同意连接并回复自己的初始序列号以及确认客户端的序列号。
- 第三次握手客户端确认服务器的序列号,完成连接。
通过三次握手,双方可以确认各自的接收能力,确保双方都准备好开始数据传输,避免了空连接或半连接的情况。
第 2 次握手传回了 ACK,为什么还要传回 SYN?
- SYN 是连接请求的标志,表示服务器愿意与客户端建立连接。在第二次握手中,SYN 与 ACK 都被发送,因为要确保双方确认连接请求及初步的序列号同步。单独发送 ACK 可能无法标明请求连接的意思,因此需要 SYN。
TCP 四次挥手
四次挥手是为了安全地关闭连接,确保双方都可以完成数据的发送,并且双方都确认连接已经完全关闭。下面是四次挥手的详细过程:
第一次挥手:
- 客户端发送 FIN 包,表示自己已经没有数据要发送了,但仍然可以接收数据。客户端进入 FIN_WAIT_1 状态。
第二次挥手:
- 服务器收到客户端的 FIN 包后,表示可以关闭连接,但服务器仍然可以继续向客户端发送数据,因此服务器会发送一个 ACK 包来确认客户端的关闭请求。此时服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。
第三次挥手:
- 服务器完全准备好关闭连接,发送 FIN 包,表示自己没有数据要发送了。此时服务器进入 LAST_ACK 状态。
第四次挥手:
- 客户端收到服务器的 FIN 包后,发送 ACK 包确认。此时客户端进入 TIME_WAIT 状态,等待一定时间(2 * MSL,即报文段最长寿命),以确保服务器收到确认包后才进入 CLOSED 状态。服务器进入 CLOSED 状态。
为什么要四次挥手?
- 客户端可能仍然有数据需要接收,因此在第一次发送 FIN 后,它还需要等待服务器的确认(第二次挥手)。
- 服务器可能仍有数据要发送,因此在确认客户端的 FIN 后,服务器需要再发送 FIN 包,表示自己也准备关闭连接。
为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?
- ACK 包的作用是确认接收到客户端的 FIN 包,而 FIN 包是表示服务器端数据发送完成并准备关闭连接。两者含义不同,无法合并。如果合并,可能导致客户端和服务器的状态不一致,出现不正常的关闭过程。
常见问题解答
如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?
- 如果服务器的 ACK 包没有送达客户端,客户端会在一定时间内重传该 FIN 包。直到客户端确认接收到 ACK 后才会进入 FIN_WAIT_2 状态。如果在超时之后没有收到确认,连接依然保持在 FIN_WAIT_1 状态,客户端会重新发送 FIN 包。
为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?
- 这是为了防止 ACK 包丢失。在 TIME_WAIT 状态期间,客户端保留了连接信息,确保服务器能够收到 ACK 包,防止因网络延迟或丢包导致服务器重新发送 FIN 包,客户端再确认的情形。此外,客户端在此状态下可以清理任何可能延迟到达的旧数据包。
总结
- 三次握手:用于建立连接,确保双方都准备好传输数据。
- 四次挥手:用于优雅地关闭连接,确保双方都能完成数据传输并正确关闭连接。
参考答案:TCP 三次握手和四次挥手(传输层) 。
TCP 如何保证传输的可靠性?(重要)
二、IP
IP 协议的作用
IP 协议(Internet Protocol,网际协议)是 TCP/IP 协议族中至关重要的协议之一,属于网络层。其主要作用是负责在不同网络之间传输数据,并根据 IP 地址进行路由选择,确保数据能够从源主机传输到目标主机。具体来说,IP 协议承担着以下几个重要职责:
数据包格式定义:
- IP 协议定义了数据传输中每个数据包的结构,包括头部信息和数据部分。数据包头部包含了源地址、目标地址、版本号、数据包长度等重要信息。
寻址和路由:
- IP 协议使用 IP 地址 来唯一标识网络上的每一台主机。它负责根据目标 IP 地址选择最佳路径,将数据包从源主机传输到目标主机。路由是由网络中各个路由器完成的,它们根据 IP 地址的信息来决定数据包应该转发到哪个网络接口。
分片和重组:
- 当数据包需要通过不同的网络传输时,IP 协议会根据链路的最大传输单元(MTU)将数据包分片。各个片段在传输过程中会根据相同的标识符被组装在一起,以便目标主机能够正确地重组数据。
错误检测:
- IP 协议在每个数据包头部包含一个 校验和,用于检测数据包在传输过程中是否发生了错误。虽然 IP 协议本身不负责修复错误,但它会在发现错误时丢弃损坏的包。
无连接服务:
- IP 协议本身是一个 无连接的协议,它只负责将数据包从源地址传送到目标地址,完全不关心数据包是否按顺序到达、是否丢失或是否重复。具体的可靠性保证由 TCP 等传输层协议来完成。
IPv4 与 IPv6
- IPv4:
- 是目前广泛使用的 IP 协议版本,地址长度为 32 位,支持大约 43 亿个独立的 IP 地址。由于互联网的快速发展,IPv4 地址池逐渐耗尽,这促使了 IPv6 的出现。
- IPv6:
- IPv6 是 IPv4 的继任者,使用 128 位地址,理论上能够提供 340 万亿亿亿 个独立的 IP 地址。IPv6 解决了 IPv4 地址不足的问题,并且还增强了路由效率和网络安全性。
小结
IP 协议通过 寻址、路由、分片与重组等方式,保证了数据在网络中的传输与到达,属于网络层的核心协议。随着互联网的发展,IPv6 正逐渐取代 IPv4,尤其是在全球地址需求日益增加的背景下。
什么是 IP 地址?IP 寻址如何工作?
IP 地址(Internet Protocol address)是分配给每个连入互联网的设备或域(如计算机、服务器、路由器等)上的唯一标识符。IP 地址确保设备能够在网络上互相识别并进行通信。
IP 地址的组成
IPv4 地址:
- 采用 32 位 二进制表示,通常以四个 十进制数形式出现,每个数的范围是 0 到 255。每个数之间用 点(
.
)分隔,例如:192.168.1.1
。 - 示例:
192.168.1.1
(每个数字是 8 位,即一个字节,共 4 个字节)
- 采用 32 位 二进制表示,通常以四个 十进制数形式出现,每个数的范围是 0 到 255。每个数之间用 点(
IPv6 地址:
- 采用 128 位 二进制表示,通常以 8组 16 位的十六进制数表示,每组数之间用 冒号(
:
)分隔。IPv6 地址可以表示为2001:0db8:85a3:0000:0000:8a2e:0370:7334
。 - 示例:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 采用 128 位 二进制表示,通常以 8组 16 位的十六进制数表示,每组数之间用 冒号(
IP 地址的作用
- 唯一标识:每个 IP 地址是唯一的,用于标识互联网或局域网中的每个设备。
- 路由和寻址:IP 地址在网络中用于指引数据包的传输路径。源设备发送数据包时,包含 源 IP 地址(标识发送者)和 目标 IP 地址(标识接收者)。网络中的路由器根据目标 IP 地址转发数据包,直到数据包到达目标设备。
IP 寻址如何工作
IP 寻址的工作原理基于以下步骤:
设备发送数据包:
- 当设备(例如计算机或手机)需要向其他设备发送数据时,它会创建一个 数据包,这个数据包包含了源设备的 源 IP 地址 和目标设备的 目标 IP 地址。
网络设备转发数据包:
- 网络中的路由器和交换机会检查数据包中的目标 IP 地址。根据该地址,它们会选择合适的路径将数据包从源设备转发到目标设备。
数据包到达目标设备:
- 目标设备接收到数据包后,使用目标 IP 地址来确定这是发给自己的数据包,并进行处理。
端到端通信:
- 在整个过程中,所有的数据包传输都依据目标 IP 地址的寻址来进行路由,从而确保数据包能够从源设备正确地传输到目标设备。
IP 地址的分类与使用
私有 IP 地址与公共 IP 地址:
- 私有 IP 地址:仅用于局域网内的通信,如
192.168.x.x
、10.x.x.x
、172.16.x.x
等。它们不能直接用于互联网上的通信。 - 公共 IP 地址:在全球范围内唯一标识设备,路由器或服务器在连接互联网时通常会分配一个公共 IP 地址。
- 私有 IP 地址:仅用于局域网内的通信,如
IP 地址的划分:
- IPv4 地址分为不同的类(A、B、C、D、E),并且存在不同的 子网掩码,用于确定一个网络中的设备如何分配地址。
- IPv6 地址具有更大的地址空间,设计上主要是解决 IPv4 地址枯竭问题,同时也引入了更高效的地址配置与管理机制。
总结
IP 地址是互联网中设备唯一标识符,它通过源 IP 地址和目标 IP 地址在设备间实现通信。网络设备根据目标 IP 地址进行路由,确保数据能够从源设备传输到目标设备,支撑了整个互联网的基础设施。
什么是 IP 地址过滤?
IP 地址过滤 是一种基于网络层的安全技术,用于限制或阻止特定 IP 地址、IP 地址范围或子网的访问。通过 IP 地址过滤,网络管理员可以允许或拒绝来自某些 IP 地址的数据流,从而增强网络的安全性和控制力。
IP 地址过滤的工作原理
IP 地址过滤通过检查进入网络的数据包中的源或目标 IP 地址来决定是否允许该数据包通过。具体的工作过程如下:
- 数据包检查:网络设备(如防火墙、路由器)会检查每个数据包中的 IP 地址,确定其是否符合预定的规则。
- 匹配规则:设备根据预设的过滤规则,检查源 IP 地址或目标 IP 地址是否符合允许或拒绝的条件。
- 允许或拒绝:根据匹配结果,设备会决定是否允许数据包通过网络。如果不符合规则,数据包将被丢弃或拒绝,无法进入目标设备。
常见的 IP 地址过滤规则
- 阻止特定 IP 地址:通过过滤规则可以阻止来自特定 IP 地址的请求。例如,防止某个恶意 IP 地址攻击服务器。
- 允许或拒绝 IP 地址范围:可以通过设置 IP 地址范围来允许或拒绝整个子网的访问。例如,只允许某个局域网的 IP 地址访问资源。
- 黑名单与白名单:通过维护黑名单(阻止不受信任的 IP 地址)或白名单(仅允许特定 IP 地址访问)来实现过滤。
IP 地址过滤的应用场景
- 防止恶意攻击:如果某个 IP 地址发起了拒绝服务攻击(DoS)或其他恶意活动,管理员可以通过过滤来阻止该 IP 地址的访问。
- 控制访问权限:对于一些需要限制访问的服务,可以使用 IP 地址过滤来确保只有来自特定 IP 地址或 IP 范围的请求才能访问。
- 提高安全性:在某些场景下,可以结合 IP 地址过滤与认证、授权等其他安全措施一起使用,增加网络的整体安全性。
IP 地址过滤的局限性
- 易被伪造:攻击者可以通过伪造 IP 地址来绕过 IP 地址过滤机制。
- 无法解决所有问题:仅仅依赖 IP 地址过滤并不能完全保证网络安全,还需要结合防火墙、入侵检测、加密等多种安全技术。
- IP 地址动态变化:对于一些动态 IP 地址或使用代理的用户,IP 地址过滤可能无法有效阻止所有不必要的访问。
总结
IP 地址过滤是一种基础的网络安全措施,主要通过允许或阻止特定 IP 地址的访问来防止恶意攻击和控制网络访问。但单独使用 IP 地址过滤并不能确保网络的完全安全,通常需要与其他安全措施结合使用。
IPv4 和 IPv6 的区别
特性 | IPv4 | IPv6 |
---|---|---|
地址长度 | 32 位(4 字节) | 128 位(16 字节) |
地址表示 | 点分十进制表示(例如:192.168.1.1) | 十六进制表示,以冒号分隔(例如:2001:0db8:85a3::8a2e:0370:7334) |
地址空间 | 约 42 亿个(2^32) | 约 3.4 × 10^38 个(2^128) |
地址类型 | 主要有公有地址和私有地址 | 所有地址都是全球唯一地址,默认没有私有地址 |
地址分配方式 | 依赖于 NAT(网络地址转换)进行私有地址映射 | 通过 SLAAC(无状态地址自动配置)可以实现自动分配 |
网络配置 | 需要使用 DHCP 协议进行动态地址分配 | 支持无状态自动配置(SLAAC)和 DHCPv6 两种方式 |
地址的路由效率 | 路由表较为复杂,存在地址资源耗尽的问题 | 由于地址空间巨大,路由表更简洁,高效且容易管理 |
报头结构 | IPv4 头部复杂,有多个字段需要处理 | IPv6 头部简化,去除了很多不必要的字段,提高了效率 |
包头大小 | 固定为 20 字节 | 固定为 40 字节 |
NAT(网络地址转换) | 依赖 NAT(常见于私有网络) | 不需要 NAT,每个设备可拥有一个唯一的公网地址 |
安全性 | 安全性较弱,常需要额外的安全措施(如 IPsec) | 安全性更强,内建支持 IPsec |
广播支持 | 支持广播 | 不支持广播,改为使用多播和任播 |
IPv4 的限制 | 地址耗尽,导致无法为每个设备分配唯一 IP 地址 | 通过更大地址空间解决了地址枯竭的问题 |
IPv6 的优势
- 更大的地址空间:IPv4 的地址已几乎耗尽,而 IPv6 提供了 2^128 个地址,足以满足全球设备的需求。
- 简化的头部结构:IPv6 的报头相比 IPv4 简单了很多,减少了路由器的处理负担,提高了网络的效率。
- 更强的安全性:IPv6 默认支持 IPsec,提供加密和认证功能,增强了数据传输的安全性。
- 支持无状态自动配置:IPv6 主机可以在没有 DHCP 服务器的情况下通过 SLAAC 自动配置自己的地址。
- 无须使用 NAT:由于 IPv6 提供足够的 IP 地址,网络中的每个设备都可以拥有全球唯一的地址,避免了 IPv4 中必须使用 NAT 的问题。
总结
IPv6 设计的根本目的是解决 IPv4 地址枯竭的问题,并通过一系列改进提高网络的效率、安全性以及可扩展性。尽管 IPv6 已逐步被推广使用,但 IPv4 仍然在许多网络环境中占主导地位,尤其是在一些较为旧的网络中。随着互联网设备的激增,IPv6 将逐渐成为全球主流的 IP 协议。
获取客户端真实 IP 的方法
应用层方法:
- X-Forwarded-For 头:这是通过 HTTP 请求头部传递客户端 IP 的常见方法。通过代理服务器或负载均衡器转发请求时,原始客户端 IP 会通过
X-Forwarded-For
字段附加在请求中。该字段包含了请求链中的所有代理 IP 地址,最后一个 IP 地址通常是客户端的真实 IP。缺点是它可能被伪造,所以不完全可靠。
示例代码(获取客户端 IP):
String ipAddress = request.getHeader("X-Forwarded-For"); if (ipAddress == null || ipAddress.isEmpty()) { ipAddress = request.getRemoteAddr(); // 如果没有X-Forwarded-For头,使用远程地址 }
- X-Forwarded-For 头:这是通过 HTTP 请求头部传递客户端 IP 的常见方法。通过代理服务器或负载均衡器转发请求时,原始客户端 IP 会通过
传输层方法:
TCP Options:通过修改 TCP 连接的选项字段,可以将真实的源 IP 信息传递到接收端。这种方法适用于任何基于 TCP 的协议,但需要通信双方在 TCP 协议栈上进行额外的改造。因此,通常需要客户端和服务端都支持定制的 TCP 协议栈或插件。
Proxy Protocol:通过 Proxy Protocol 协议,可以确保反向代理服务器将客户端的 IP 和端口信息传递给后端应用服务器。例如,Nginx 和 HAProxy 支持 Proxy Protocol,可以在代理服务器上启用该协议并传递真实客户端的 IP 信息。
网络层方法:
- 隧道 + DSR(Direct Server Return)模式:该方法适用于通过隧道传输数据的情境,通常用于负载均衡架构中。它的核心思想是利用隧道技术确保真实的客户端 IP 信息不会丢失,但其配置复杂度较高,一般不常用。
总结
- 应用层方法(通过
X-Forwarded-For
)最为常见,但可能不可靠。 - 传输层方法(如 TCP Options 或 Proxy Protocol)较为可靠,适用于有代理或负载均衡的场景。
- 网络层方法(隧道 + DSR)提供了最强的 IP 保证,但也最为复杂,适合大规模的负载均衡系统。
在实际应用中,通常会结合代理服务器配置和网络层技术,来最大程度地确保客户端 IP 的准确获取。
NAT 的作用是什么?
NAT 的作用
NAT(Network Address Translation,网络地址转换)是互联网中用于处理网络层 IP 地址转换的技术,主要作用如下:
IP 地址映射:
- NAT 可以将局域网内设备的私有 IP 地址转换为公有 IP 地址,使得多个设备通过一个公有 IP 地址访问外部互联网。
- 这种转换可以是从私有 IP 地址到公有 IP 地址的映射,也可以是从公有 IP 地址到私有 IP 地址的反向映射。
解决 IPv4 地址短缺问题:
- IPv4 地址资源有限,NAT 技术通过允许多个设备共享一个公有 IP 地址,解决了 IPv4 地址枯竭的问题。
- 例如,家庭或企业网络中的多个设备可以通过路由器的一个公有 IP 地址连接到互联网。
提高网络安全性:
- NAT 隐藏了内部网络的实际 IP 地址,使外部网络无法直接访问局域网中的设备。外部设备只能通过 NAT 设备的公有 IP 地址进行通信,从而提高了网络的安全性。
- 内部网络的设备不暴露于外部,防止外部对局域网设备的直接攻击。
NAT 的类型
静态 NAT:
- 静态 NAT 是一对一的映射,将私有 IP 地址映射到公有 IP 地址上。每个内部设备都有一个唯一的公有 IP 地址。
- 适用于需要直接从外部访问内部设备的场景。
动态 NAT:
- 动态 NAT 允许多个内部设备通过一个或多个公有 IP 地址进行访问。私有 IP 地址和公有 IP 地址之间的映射是动态分配的。
- 一般用于私有网络中的设备发起访问外部网络时。
端口地址转换(PAT):
- PAT,也称为“多对一” NAT,将多个内部 IP 地址通过不同的端口映射到单个公有 IP 地址上。这种方式允许大量设备共享一个公有 IP 地址。
- 这是最常见的 NAT 类型,通常用于家庭路由器和小型企业网络。
结论
- NAT 是一种关键的技术,用于缓解 IP 地址不足问题,并且提高了内网安全性。
- 它通过将私有 IP 地址和公有 IP 地址之间进行映射,允许多个内部设备共享一个公有 IP 地址,且对外部隐藏内部网络结构。
相关阅读:NAT 协议详解(网络层)。
三、ARP
MAC 地址简介
MAC 地址(Media Access Control Address) 是一种用于唯一标识网络设备的硬件地址,也称为物理地址、网卡地址或以太网地址。它是网络硬件(如网卡、路由器等)在局域网(LAN)中通信时的身份标识。
MAC 地址的特点
唯一性:
- 每个网络设备的网卡都有一个独立的 MAC 地址,理论上,MAC 地址在全球范围内是唯一的。这个唯一标识符可以确保不同设备之间不会冲突。
- 它是硬件层的标识,不会因为网络的变化而改变。即使设备更换了 IP 地址,MAC 地址依然保持不变。
格式:
- MAC 地址是一个 48 位的地址,通常以 6 个十六进制数表示(每个十六进制数 2 位,共 6 * 2 = 12 位)。例如:
00:1A:2B:3C:4D:5E
。 - 其中,前 24 位由 IEEE(Institute of Electrical and Electronics Engineers)组织分配,表示生产厂商(也叫 OUI,Organizationally Unique Identifier)。后 24 位是厂商自己分配的,用来唯一标识该厂商生产的设备。
- MAC 地址是一个 48 位的地址,通常以 6 个十六进制数表示(每个十六进制数 2 位,共 6 * 2 = 12 位)。例如:
永久性和不可变性:
- MAC 地址是网卡的硬件特征,与网络设备的身份关联,通常是不可修改的。因此,MAC 地址具有永久性。
可携带性:
- 不同于 IP 地址,MAC 地址的变化不会影响设备的网络连接,它只依赖于设备的网卡,不受网络配置的影响。即使设备在不同网络中,也不改变其 MAC 地址。
广播地址:
- MAC 地址
FF:FF:FF:FF:FF:FF
是一个特殊的地址,用于表示广播。当数据包使用这个地址时,它会被发送到局域网内的所有设备。
- MAC 地址
MAC 地址与 IP 地址的区别
- MAC 地址:唯一标识网络设备的硬件地址,是设备的“身份证”,用于局域网通信,且不会随网络环境变化而变化。
- IP 地址:用于网络层的通信,帮助定位设备的位置,在不同的网络中可能会发生变化。
总结
MAC 地址是网络设备的唯一标识符,它可以确保网络设备之间正确的通信。它不仅用于局域网的设备识别,还在网络协议中扮演着关键角色,如 ARP 协议中的地址解析。
ARP 协议解决了什么问题?
ARP 协议,全称 地址解析协议(Address Resolution Protocol),它解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。