家用路由器构成图
家用路由器 = 路由器 + 防火墙 + 交换机 + NAT
DHCP当你的电脑连接到局域网之后,会进行DHCP协议分配ip,也就是我们的家用无线路由器会进行分配ip,那么DHCP是什么?
一、什么是DHCP?DHCP,动态主机配置协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。
DHCP服务器会从IP地址池中,挑选一个IP地址“出租“给客户端一段时间,时间到期就回收它们平时家里上网的路由器就可以充当DHCP服务器
一般我们的家用路由器就可以充当DHCP服务器
二、DHCP的四个步骤dhcp工作一共分为四个阶段:
- 发现阶段(DHCP客户端在网络中广播发送DHCP DISCOVER请求报文,发现DHCP服务器,请求IP地址租约)
- 提供阶段(DHCP服务器通过DHCP OFFER报文向DHCP客户端提供IP地址预分配)
- 选择阶段(DHCP客户端通过DHCP REQUEST报文确认选择第一个DHCP服务器为它提供IP地址自动分配服务)
- 确认阶段(被选择的DHCP服务器通过DHCP ACK报文把在DHCP OFFER报文中准备的IP地址租约给对应DHCP客户端)。
简单的说:
1.广播给局域网的DHCP服务器
2.DHCP服务器收到你的请求,分配给你一个ip
3.你的电脑收到之后,接受了这个ip,进行了广播,告诉DHCP服务器
4.服务器收到确认,响应确认给你
至此你的电脑就有ip了
- ipconfig/all:可以看到DHCP相关的详细信息,比如租约过期时间、DHCP服务器地址等
- ipconfig/release:释放租约
- ipconfig/renew:重新申请IP地址、申请续约(延长租期)
其实我之前一直再想,如果租约到期了呢?是会进行什么操作?
客户端会在租期不足的时候,自动向DHCP服务器发送REQUEST信息申请续约
第二个问题是dhcp分配了租约,但是电脑重启了会有什么样子的操作,是会重新分配?
不会的,再DHCP SERVER中,这个分配出去的IP地址,还是已分配的状态,是不会分配给其它用户的,除非到期了,才会回收。
当电脑开机的时候,还会联系DHCP,若成功联系上DHCP SERVER则更新IP租约,这样租期又回到24小时了。(租期根据不同的路由器定,一般是24小时)
总结
其实也就是我们的家用路由器(dhcp服务器)会有一个注册表,存放着mac地址与ip地址还有时间,当然我们的客户端也有属于自己的那一份,需要客户端主动续期。
步骤二 (当我们访问百度服务器进行第一次通信局域网发生了什么?)上面我们有了自己的局域网ip,那么可以进行通信了,那么当我们进行第一次通信的时候发生了什么?
当我们访问baidu.com的时候我们其实会进行域名解析,会先发送请求到dns服务器,进行第一次通信。
首先我们的计算机会判断dns服务器是不是跟我同一个网段,根据自己的子网掩码先计算自己的网段,然后用自己的子网掩码计算dns服务器的网段,一般都不是自己局域网中的,一般来讲话dns服务器都是代理商。
然后我们的计算机就会发送到网关,但是问题来了,我们的计算机因为是第一次通信,并不知道,路由器的mac地址,这个时候就会发送arp广播,然后交换机就会发送到192.168.2.8跟路由器网关192.168.2.1,然后这2台机器就会返回自己的mac地址给我们的电脑,然后进行缓存,下次通信的时候,就可以直接发送到192.168.2.1。
ARP 一、什么是ARP?译为:地址解析协议,通过IP地址获取MAC地址。
arp协议在TCP/IP模型中属于IP层(网络层),在OSI模型中属于链路层。arp协议即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。它可以解决同一个局域网内主机或路由器的IP地址和MAC地址的映射问题
总结一句话我们的局域网通信,arp是基石。
获取成功后,会缓存IP地址、MAC地址的映射信息,俗称:ARP缓存
通过ARP广播获取的MAC地址,属于动态(dynamic)缓存
存储时间比较短(默认是2分钟),过期了就自动删除
相关命令
arp-a[主机地址]:查询ARP缓存
arp-d[主机地址]:删除ARP缓存
arp-s主机地址MAC地址:增加一条缓存信息(这是静态缓存,存储时间较久,不同系统的存储时间不同)
上一步说到我们进行所谓的第一次通信的时候,其实是要访问dns服务器,具体访问哪个ip的dns服务器 其实是经历了这些下面的步骤,当我们敲击baidu.com的时候…
1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。 2. 如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。 但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly,防止被恶意篡改。 3.如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。 4. 如果LDNS仍然没有命中,就直接跳到Root Server 域名服务器请求解析 5. 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址 6. 此时LDNS再发送请求给上一步返回的gTLD 7. 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器 8. Name Server根据映射关系表找到目标ip,返回给LDNS 9. LDNS缓存这个域名和对应的ip 10. LDNS把解析的结果返回给用户,用户根据TTL值(TTL与DNS TTL有区别。二者都是生存时间,前者指ICMP包的转发次数(跳数),后者指域名解析信息在DNS中的存在时间。)缓存到本地系统缓存中,域名解析过程至此结束
浏览器缓存->系统缓存->路由器缓存->IPS服务器缓存->根域名服务器缓存->顶级域名服务器缓存->主域名服务器缓存。
当时我也不清楚路由器也有缓存,但是路由器的操作界面确实有dns服务器缓存
我们第一次请求本地并没有缓存
假设拿到了我们经历上面的步骤最终拿到了本地IPS服务器的时候,我们请求经历了哪些步骤?
首先会发送到网关 ,因为IPS服务器并不是局域网内的,但是会检查当前计算机有没有网关对应的mac地址,如果没有 arp广播获取mac地址,到网关对应的mac地址缓存起来。
当拿到网关对应的mac地址之后,(就拿家用的电脑连接Wi-Fi来说)发送到网关之后,也就是我们的家用路由器,家用路由器里面会有一个nat,这个东西会将我们的请求从私网变成公网ip,然后才可以真正的访问DNS服务器。
NAT 一、什么是NAT?简单的说就是将私有网络的地址转为公有网络的地址,
就比如说我们的家用路由器,里面其实是有一个nat的软件的.
一台家用路由器可以允许多台设备同时连接上网
那么当设备通过家用路由器向网络发送请求后,返回的响应到达路由器时,路由器必须要知道该响应对应的是哪台设备发送的请求。我们向网络供应商(ISP)申请网络访问权限时,ISP会给路由器分配一个公网ip,路由器内部的设备只能使用内网ip。NAT的作用就是实现公网/内网ip以及端口的转换。为此,需要一张表,用于记录内外ip和端口的映射关系。
假设内网中有两台设备A和B,同时访问同一个外网ip的相同端口。那么在路由器处就会记录如下映射关系:
(remote ip_r : port_r)–(local ip_a : a_port)
(remote ip_r : port_r)–(local ip_b : b_port)
假设恰好a_port和b_port的值相同,那么来自远端的响应数据到达路由器时,路由器就无法确定该请求应该给A还是给B。对于这种情况,NAT采用一个三元组来进行区分:(remote ip_r : port_r)(nat port)(local ip_a : a_port),即通过增加nat port来进行区分。当A和B请求到来时,为两个请求生成两个尚未使用的端口:a_port和b_port,并记录如下关系:
(remote ip_r : port_r)(nat a_port)(local ip_a : same_port)
(remote ip_r : port_r)(nat b_port)(local ip_b : same_port)
即当A请求到达路由器时,路由器将请求的源ip换成ISP分配的公网ip,并将源端口换成a_port;而当请求B到达路由器时,路由器将请求的源ip换成ISP分配的公网ip,并将源端口换成b_port。当A和B的请求返回时,根据返回的目的端口(返回的目的端口就是请求的源端口)是a_port还是b_port即可确定该将响应给A还是B。
总结一句话:
nat能将局域网中的ip转换为可以访问互联网的公网通过端口区分不同的局域网中不同的机器
NAT不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击(不过还是可以通过运营商查询具体的位置),隐藏并保护网络内部的计算机。
步骤四(过了NAT,我们的请求会去向何方?)如果过了家用路由器,也就是经过nat之后那么请求就会真正的发往外面的世界,那么我们的请求是怎么经过外面的请求的呢?
其实就跟我们之前的例子差不多,高铁站每一站都是路由器,那么我们总结一下
我们要去长沙xx103(请求的服务器ip),我们得到深圳北站坐车(家用路由器),经过nat转换之后然后出发,经过广州南(网络节点中的路由器)宁乡(网络节点中的路由器)最后到长沙南(网络节点中的最终路由器)然后坐公交地铁(交换机)到家xx103里面(最终的服务器)
客户端->交换机->路由器->路由器…->交换机->服务器
不过这个只是请求
其实响应就是反过来,从长沙到深圳
客户端在跟交换机传输数据的时候 使用的是cd/csma协议传输的是以太网帧,而路由器到路由器之间使用的是ppp协议
也就是说坐公交车地铁使用的是深圳通,但是坐高铁使用的是高铁票
步骤五(dns响应之后我们获取了百度的ip,开始真正的发送请求给百度了)经过步骤5我们的请求响应回来之后我们成功的收获了百度的ip,然后我们真的开始给百度发送消息了,
其实跟请求dns服务器差不多只是协议发生了变化,也是先判断是不是自己的局域网中ip,不是就发往路由器,经过nat 然后就是步骤5了.



