我们在上网的时候,通常使用的方式是域名,而不是IP地址,因为域名方便人类记忆。
那么实现这一技术的就是DNS域名解析器,DNS可以将域名网址自动转换为具体的IP地址。
域名的层级关系
DNS中的域名都是用句点来分隔的,比如www.server.com,这里的句点代表了不同层次之间的界限。
在域名中,越靠右的位置表示其层级越高
根域(.)是在对顶层(通常省略表示),下一层就是com顶级域,再下面是server.com。所以域名的层级关系类似一个树状结构:
根域的DNS服务器信息保存在互联网中所有的DNS服务器中。这样一来,任何DNS服务器就都可以找到并访问根域DNS服务器了。
因此,客户端只要能够找到任意一台DNS服务器,就可以通过它找到根域DNS服务器,然后再一路顺藤摸瓜找到位于下层的某台目标DNS服务器。
域名解析的工作流程
浏览器先看一下自己的缓存里有没有,如果没有就找操作系统的缓存要,还没有就检查本机域名解析文件hosts,如果还是没有就会向DNS服务器进行查询,查询的过程如下:
在传输一个IP数据报的时候,确定了源IP地址与目标IP地址后,就会通过主机[路由表]确定IP数据包下一跳。然而网络层的下一层是数据链路层,所以我们还得知道[下一跳]的MAC地址。
ARP如何确定对方MAC地址?
ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。
操作系统通常会把第一次通过ARP获取的MAC地址缓存起来,以便下次直接从缓存中找到对应的IP地址的MAC地址。
不过,MAC地址的缓存是有一定的期限的,超过这个期限,缓存的内容将会被清除。
RARP协议
ARP协议是已知IP地址求MAC地址,那RARP协议正好相反,它是已知MAC地址求IP地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用到。
这通常需要架设一台RARP服务器,在这个服务器上注册设备的MAC地及其 IP地址。然后再将这个设备接入网络,接着:
最后设备就根据从RARP服务器所收到的应答信息设置自己的IP地址。
DHCP在我们生活中很常见,我们的电脑通常都是通过DHCP动态获取IP地址,大大省去了配IP信息的繁琐过程。
我们的电脑通常经过四个步骤获取IP:
PS: DHCP客户端进程监听的是68端口号,DHCP服务器进程监听的是67端口号。
4个步骤:
一旦客户端收到DHCP ACK 后,交互便完成了,并且客户端能够在组用期内使用DHCP服务器分配的IP地址。
如果租约的DHCP IP地址快到期后,客户端会向服务器发送DHCP请求报文;
可以发现,DHCP交互中,全程都是使用UDP广播通信。
用的是广播,那如果DHCP服务器和客户端不是在同一个局域网内,路由器又不会转发广播包,那不是每个网络都要配一个DHCP服务器?
所以,为了解决这一问题,就出现了DHCP中继代理。有了DHCP中继代理后,对不同网段的IP地址分配也可以由一个DHCP服务器统一进行管理。
因此,DHCP服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。
为什么需要NAT协议
IPV4随着用户的增多压力不断增大,但是每一个路由器的IP地址下面都有很多的私有地址,外部消息只需要找到这个路由器,这个路由器把消息找到真正目的主机传递给它即可。每一个路由器都可以分配很多私有地址,并且不同路由器的私有地址可以重复,通过这种地址转换,能够大大增加地址的容量。
简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。
如果按照上述说法,那么N个私有IP地址,就要有N个公有IP地址,并不能缓解IPv4地址耗尽的问题。
普通的NAT转换没什么意义
由于绝大多数的网络应用都是使用传输层协议TCP和UDP来传输数据的。因此,可以把IP地址+端口号一起进行转换。
这样,就用一个全球IP地址就可以了,这种转换技术就叫网络地址和端口转换NAPT。
对于有Internet访问需求而内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,通常是出口设备的接口地址。一个对外的访问请求在到达目标以后,表现为由本组织出口设备发起,因此被请求的服务端可将响应由Internet发回出口网关。出口网关再将目的地址替换为私网的源主机地址,发回内部。这样一次由私网主机向公网服务端的请求和响应就在通信两端均无感知的情况下完成了。依据这种模型,数量庞大的内网主机就不再需要公有IP地址了。NAT的转换示意图如下所示:
图中有两个客户端192.168.1.10 和 192.168.1.11 同时与服务器 183.232.231.172进行通信,并且这两个客户端的本地端口都是1025.
此时,两个私有IP地址都转换IP地址为公有地址120.229.175.121,但是以不同的端口号作为区分。(把一个路由下的私有IP请求转换为该路由的请求,用不同的端口号来区分私有IP地址网络的主机,最终表现为该路由向服务器请求数据,接收到数据后,该路由通过端口号将数据发送给此路由下的主机)
于是生成一个NAPT路由器的转换表,就可以正确地转换地址和端口的组合,令客户端A、B能同时与服务器之间进行通信
缺点
由于NAT/NAPT都依赖于自己的转换表,因此会有以下问题:
如何解决NAT潜在问题
1. 改用IPv6
IPv6可用范围非常大,以至于每台设备都可以配置一个公有IP地址,就不需要这些地址转换了
2. NAT穿透技术
NAT穿透技术能够让网络应用程序主动发现自己位于NAT设备之后,主动获取NAT设备的公有IP,并为自己建立端口映射条目。然后就用这个条目对外通信,就不需要NAT设备来进行转换了。
ICMP的全称是Internet Control Message Protocol ,也就是互联网控制报文协议。
ICMP功能
ICMP主要的功能包括:确认IP包是否成功送达目标地址、报告发送过程中IP包被废弃点的原因和改善网络设置等。
在IP通信中,如果某个IP包因为某种原因未能到达目标地址,那么这个具体的原因将由ICMP负责通知。
ICMP的这种通知消息会使用IP进行发送。
因此,从路由器 2 返回的ICMP包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该ICMP包的主机 A 则分解ICMP的首部和数据域后得知发生问题的具体原因。
ICMP类型
ICMP大致可以分为两类: