计算机网络•自顶向下方法:DHCP、NAT、IPV6
获取IP地址
路由器:
- 管理员手工配置路由器各个接口的IP地址
主机:
- 管理员手工配置主机IP地址,服务器通常采用这种方法
- 使用动态主机配置协议DHCP(Dynamic Host Configuration Protocol)获取IP地址、子网掩码、缺省路由器、本地DNS服务器等配置信息,个人终端通常采用这种方法
使用DHCP的好处:
- 免去手工配置的麻烦(即插即用)
- 可用少量的IP地址服务较多的客户(地址重用)
DHCP
DHCP(动态主机配置协议)是一种网络协议,允许网络中的设备自动从 DHCP 服务器获取 IP 地址以及其他网络配置信息。它简化了网络设备的管理,因为管理员不再需要手动为每个设备分配 IP 地址。
DHCP 是一种 客户端-服务器 模型的协议,设备(客户端)向 DHCP 服务器请求网络配置信息,服务器自动响应并分配合适的配置
DHCP 消息基于 UDP 协议
DHCP 的工作过程包括以下几个步骤:
- 客户端启动请求
当一个新的设备(客户端)加入网络时,它不知道自己的 IP 地址,因此首先会发送一个 DHCP Discover 报文。这个报文是一个广播请求,询问网络中是否有 DHCP 服务器。
- DHCP Discover:客户端发送一个广播包到局域网,通知网络上有无 DHCP 服务器。
- DHCP服务器响应
网络中的 DHCP 服务器收到 DHCP Discover 请求后,会选择一个可用的 IP 地址,并将其与设备的 MAC 地址进行绑定,生成一个 DHCP Offer 报文发送回客户端。这个报文包含以下信息:
- 可用的 IP 地址
- 子网掩码
- 默认网关
- DNS 服务器地址(可选)
- 租约时间(即该 IP 地址分配的时长)
- DHCP Offer:DHCP 服务器向客户端发送一个包含 IP 地址等配置信息的响应。
- 客户端选择并请求
客户端收到一个或多个 DHCP Offer 后,会从中选择一个最合适的 IP 地址,并向选中的 DHCP 服务器发送 DHCP Request 请求,表示确认接受该 IP 地址和相关配置。
- DHCP Request:客户端选择并请求某个 DHCP 服务器提供的 IP 地址。
- DHCP 服务器确认
DHCP 服务器收到 DHCP Request 请求后,会再次向客户端发送一个 DHCP Acknowledgment(ACK) 报文,表示客户端可以使用该 IP 地址。此时,客户端就正式获得了 IP 地址和其他配置信息。
- DHCP Acknowledgment:服务器确认客户端的请求,正式分配 IP 地址。
NAT
网络地址转换(NAT) 是一种将内部网络(通常是私有IP地址)与外部网络(通常是公有IP地址)之间的地址进行转换的技术。NAT 允许多个设备通过一个公共的 IP 地址访问互联网,解决了 IPv4 地址不足的问题,并在一定程度上提高了网络的安全性。
NAT 的基本工作原理是在一个网络(通常是局域网)内的计算机和另一个网络(如互联网)之间进行 IP 地址的转换。设备发送的数据包中的源地址通常是私有IP地址,NAT 设备会将该地址转换为公有 IP 地址,然后将其转发到外部网络。
- 私有IP地址:通常用于局域网(LAN)中的设备,它们是不能直接访问互联网上的地址。
- 公有IP地址:是可以在互联网中进行路由和通信的地址。
NAT实现
外出的数据报:
- 将数据报中的(源IP地址,源端口号)替换为(NAT IP地址,NAT端口号)
NAT 转换表:
- 记录每个(源IP地址,源端口号)与(NAT IP地址,NAT端口号)的转换关系
进入的数据报:
- 取出数据报中的(目的IP地址,目的端口号)查找NAT转换表,然后用转换表中对应的(IP地址,端口号)进行替换
NAT 穿越问题
NAT穿越是指在网络地址转换(NAT)环境中实现两个或多个设备之间直接通信的一系列技术和方法。由于 NAT 会修改数据包中的源IP地址和端口号,直接通过 NAT 路由器进行端到端通信变得非常困难(就是无法访问到内内部)
例如:
在上图中Client希望连接服务器 10.0.0.1,但是
- 地址 10.0.0.1 为内部地址,对于client 不可见
- Client 只能看到NAT路由器的公共IP地址 138.76.29.7
解决方案
- 使用UPnP实现NAT穿越
- 实现一个端口映射
- 内网设备会指定一个端口(如
192.168.1.10:5000
)和外部需要访问该设备的公共端口(如203.0.113.10:5000
)
- 使用中继服务器实现NAT穿越
- NAT 后面的服务器与中继器建立连接
- 外部客户与中继器建立连接
- 中继器在两个连接之间转发分组
IPV6
IPv6地址
- 128位,使用冒号十六进制表示,每16位以十六进制的形式写成一组,组之间用冒号分隔,如8000:0:0:0:0123:4567:89AB:CDEF
- 地址表示的零压缩技术:可将连续的多组0压缩为一对冒号,如以上地址可表示为:8000**:😗*0123:4567:89AB:CDEF
- IPv6定义了三种地址类型:
- 单播地址:一个特定的网络接口
- 多播地址:一组网络接口
- 任播地址(anycast):一组网络接口中的任意一个(通常是最近的一个)
IPv6数据报格式
IPv6数据报以一个40字节的基本头开始,后面跟零个或多个扩展头,然后是数据
由于 IPv6 并不与 IPv4 完全兼容,现有的 IPv4 网络和设备需要与 IPv6 网络进行兼容。为了实现 IPv6 的平稳过渡,主要有以下几种技术:
-
双栈(Dual Stack):设备同时支持 IPv4 和 IPv6,在 IPv6 网络无法连接时回退到 IPv4。
有的 IPv4 网络和设备需要与 IPv6 网络进行兼容。为了实现 IPv6 的平稳过渡,主要有以下几种技术: -
双栈(Dual Stack):设备同时支持 IPv4 和 IPv6,在 IPv6 网络无法连接时回退到 IPv4。
-
隧道(Tunneling):通过隧道技术将 IPv6 数据包封装在 IPv4 数据包中传输。