Scott's world.

DHCP与NAT

Word count: 2kReading time: 7 min
2019/10/08 Share

DHCP与NAT

DHCP

我们知道每一个电脑都有一个ip

而我们是获取这个ip的流程就是通过DHCP服务来进行获取

DHCP服务大致流程

  • 客服端为请求ip,发送discover报文

    客户端发送一个广播,广播报文就是发送局域网内的所有其他主机

    目的ip是255.255.255.255.255,端口为67

    源ip是0.0.0.0.0,端口为68

  • DHCP服务器收到报文后进行响应发送offer报文

    DHCP服务器收到报文,看到源地址为0.0.0.0.0就知道这是一个请求ip的报文,DHCP服务器就会给它提供一个ip,包括ip地址,子码掩码,网关,ip的有效期等信息

    它通过discover报文中的MAC地址来识别客户端

    目的ip是255.255.255,255,255,端口为68

    源ip是DHCP服务器自己的ip,端口为67

  • 客户端挑选ip地址,发送Request报文

    有可能不止一台DHCP服务器收到discover报文,也就是可能会有多个DHCP服务器响应offer报文

    一般客户端是选择最先收到的offer报文,选择好了之后便会给对应的DHCP服务器发送一个request报文

    而在DHCP服务器收到request报文之后就会回复一个ACK报文并且把这个分配好的ip进行登记

    当我们的主机收到ACK报文之后,就可以进行网上冲浪了

租期

在DHCP客户端的租约时间到达1/2时,客户端会向为它分配IP地址的DHCP服务器发送request单播报文,以进行IP租约的更新

如果服务器判断客户端可以继续使用这个IP地址,就回复ACK报文,通知客户端更新租约成功;若IP地址不能再分配给客服端则回复NAK报文,通知客户端续约失败

如果客户端在租约到达1/2时续约失败,客户端会在租约到7/8时间时,广播发送request报文进行续约,DHCP服务器处理同首次分配IP地址的流程

相关报文

报文类型 描述
Discove DHCP客户端请求地址时,会在本地网络内以广播方式发送请求报文,这个报文成为Discover报文。
Offer DHCP服务器收到Discover报文后,会构造一个Offer报文(包括各种所需要的各种),发送给用户
Request DHCP客户端可能会收到很多Offer,所以必须在这些回应中选择一个。Client通常选择第一个回应Offer报文的服务器作为自己的目标服务器,并回应一个广播Request报文,通告选择的服务器
ACK DHCP服务器收到Request报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK报文作为回应,通知用户可以使用分配的IP地址
NAK 如果DHCP服务器收到Request报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则发送NAK报文作为回应,通知用户无法分配合适的IP地址。
Release 当用户不再需要使用分配IP地址时,就会主动向DHCP服务器发送Release报文,告知服务器用户不再需要分配IP地址,DHCP服务器会释放被绑定的租约。
Decline DHCP客户端收到DHCP服务器回应的ACK报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则发送Decline报文,通知服务器所分配的IP地址不可用。
Inform DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则发送Inform报文向服务器进行请求,服务器收到该报文后,将根据租约进行查找,找到相应的配置信息后,发送ACK报文回应DHCP客户端

参考

https://mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=2247485189&idx=1&sn=70571f1c204c7b1e9cedf10ff6885492&scene=21#wechat_redirect

NAT

大家都知道有外网(全球IP)和内网(私有IP),但是他们的区别是什么呢?

我们知道IPv4的IP地址是有限的,随着越来越多需要IP协议的终端设备,也就是随着分配出的IP地址越来越多,意味着能进行分配的IP地址就越来越少,所以为了解决这一个情况,出现IPv6来进行扩充

回到上面的问题,我们可以先进行这样的策略

例如对于一个公司来说,每个公司都会有一个属于自己公司的内网(称之为局域网)

假如我们给这个公司A分配一个IP=192.168.1.1,我们先把这个IP作为这个公司内网的网关

现在在公司的局域网内有三台电脑,如果这三台电脑要上网的话,就需要分配一个IP,那么我们一定需要去申请三个IP地址来使用吗?

答案肯定是否定的

我们不一定需要去申请3个IP的,在内网里面可以指定自己的规则,即我们可以这三台电脑随便分配三个IP(注意这不是申请的,而是我们自己分配的)

如下图分配

现在如果电脑A想要访问Google,Google的IP我们假设为:93.123.23.2

我们前面也已经说了电脑A的IP实际上是我们在公司A的局域网内自己的分配的,实际上并不存在这样的IP,如果它想访问局域外的网站那肯定是不行的

因为局域外或者唯一分配给公司A的网关是真实存在的,而公司A中必须通过网关来进行对局域外网站的访问

所以说为了让电脑A能够访问到Google,我们很容易想到可以以网关作为中介,通过网关来对Google进行访问然后将访问响应的数据再传送给电脑A,如下图

现在又有一个新的情况那就是电脑ABC同时通过网关去访问Google,而Google的返回结果的目的IP是网关的IP=192.168.1.1

而网关是如何区分ABC来将相应电脑的访问返回结果发送给它们呢?

不知道大家是否还记得IP地址后面的端口号呢

对,我们就可以通过映射网关和内网内电脑的端口来确定相应的电脑

所以我们分配给三台电脑映射不一样的内网端口,如下图

这个地址映射转换,也就是我们熟知的网络地址转换

英文名为Network Address Translation,简称NAT

而上面出现的电脑ABC的IP地址也称之为内网IP,即私有IP

而像Google或者百度的IP地址称为外网IP,即全球IP

下面说几点需要注意的事情

1、对于全球IP,显然每个IP都是唯一的,而对于私有IP,同一个局域网内,也得是唯一的,但在两个不同的局域网中,是可以有相同的私有IP的。

2、局域网内主机之间的通信,是不需要进行地址转换的,而如果需要访问外网,才需要进行地址转换。

实际上通过地址映射转换,可以实现我们熟知的代理,而上文中的网关也就是一个代理,外网并不知道内网中的情况,通过网关将内网中的信息隐藏了起来,外网只与网关相通信

参考

https://mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=2247485189&idx=1&sn=70571f1c204c7b1e9cedf10ff6885492&scene=21#wechat_redirect

CATALOG
  1. 1. DHCP与NAT
    1. 1.1. DHCP
      1. 1.1.1. DHCP服务大致流程
      2. 1.1.2. 租期
      3. 1.1.3. 相关报文
      4. 1.1.4. 参考
    2. 1.2. NAT
      1. 1.2.1. 参考