目录
1.DNS
DNS是一整套从域名映射到IP的系统
DNS背景
我们之前介绍应用层到数据链路层时,一直使用的都是IP地址,但是当我们真正访问一个网页时,我们输入的却不是目标IP地址,而是该网站的名称一类的英文简写以便人们记忆。这种字符串就被称为主机名,使用hosts文件来描述主机名和IP地址的关系。
DNS系统
- 一个组织的系统管理结构,维护系统内的每个主机IP和主机名的对应关系。
- 如果新计算机接入网络,将这个信息注册到数据库中。
- 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址。
查看hosts文件(现在已经很少用了)
bash: /etc/hosts
1.2 域名
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。
www.baidu.com
- com 一级域名,表示这是一个企业域名,同级的还有“net”,“org”等。
- baidu 二级域名,公司名。
- www 只是一种习惯用法,来表示主机支持的协议。
为什么要有域名?
让用户用起来更舒服,辨识度更高。
1.3 DNS域名解析服务的简单流程
当浏览器输入一个域名之后,会通过UDP协议传输到“域名解析服务”服务器,从该服务器中拿到KV映射关系对应的IP地址,然后才会正常的进行数据发送。
由于世界上所有主机在访问页面时,都会进行DNS域名解析服务,如果仅是一台服务器,负载过于严重。所以这个域名解析服务器是分层的,可以理解为每个地区都有一台这样的服务器,如果在本级找不到映射关系,就会去上一级“域名解析服务器”继续查找。
域名的重要性
域名解析是一个比较简单的服务,但是它非常重要。一旦有人掐断了域名解析服务,那在网络中所有的非IP访问都会瘫痪。
一个现象:有时候QQ、微信等是正常的。但是浏览器打不开页面
浏览器内置的DNS IP地址对应的服务挂掉了。
1.4 浏览器输入url后发生的事情
首先浏览器进行三次握手,先把连接建立好,然后结合用户请求,建立http请求,涉及到http格式,构建一个http request,通过连接推送到服务器。服务器经过读,将请求读到应用层,然后对http请求做分析,提取本次需求的资源和该次请求所对应的方法。定位到对应资源,在服务端把资源打开,然后通过服务器的方式构建http响应。将http响应再通过网络推送到浏览器端。浏览器端拿到数据,也进行读取,读到完整的响应。对响应的报头和有效载荷解析,识别到请求的内容。如果请求是一个网页,我们把网页交给浏览器,浏览器再对网页内容做解释,最后呈现出网页的效果。
更详细请见
当你在浏览器地址栏输入一个URL后回车,将会发生的事情?_wuhenliushui的博客-CSDN博客
1.5 小结
- DNS是应用层协议。
- DNS底层使用UDP进行解析。
- 浏览器会缓存DNS结果。
2.ICMP协议
ICMP是一个网络层的协议。ICMP的功能包括:
- 确认IP是否成功到达目标地址。
- 通知在发送过程中IP包被丢弃的原因。
- ICMP也是基于IP协议工作的,但是它并不是传输层的功能,所以依然归结为网络层协议。
2.1 ping命令
bash: ping www.baidu.com
- 注意ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址.
- ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期).
- ping命令会先发送一个 ICMP Echo Request给对端;
- 对端接收到之后, 会返回一个ICMP Echo Reply。
2.2 traceroute命令
也是基于ICMP协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器。
3.NAT技术
- NAT能够将私有IP对外通信时转为全局IP,也就是一种将私有IP和全局IP相互转换的技术方法。
- 学校、家庭、公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP。
- 全局IP要求唯一,但是私有IP不需要。在不同的局域网中出现相同的私有IP是完全不影响的。
3.1 NAT转换过程
子网的数据向外交付时看似没有什么问题。但是一旦外网拿到了数据,怎么给子网发回去呢?首先公网中不存在私有IP,其次就算有,但私有IP是可以重复的,我怎么知道发给谁呢?
所以路由器需要做一件事。将报文中的源IP地址进行替换(替换成WAN口IP)。每一个经过运行商的内网路由器都要这样逐级替换(公网路由不需要做),最终数据包中的IP地址成为一个公网IP,这种技术称为NAT。
那如果同一个局域网中,有多个主机都访问同一个外网服务器,那么对应服务器返回的数据中,目的IP都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网主机?
——NAPT
3.2 NAPT
使用IP+port来解决这个问题。路由器不仅仅是将源IP进行替换,还会为我们维护一张映射表。
- 在进行源地址转换的过程中,可能不一定只替换原IP,必要的时候,源端口也需要被替换。
- 路由器在NAT转换的过程中,除了单纯的替换,还会为我们根据报文请求的四元组,为我们构建一映射关系。
- 源IP表示唯一的一台主机,源端口表示该主机上的唯一的一个进程。源IP+源端口就可以表示自己在自己的内网中的唯一性。
- 无论从外向内,还是从内向外,都能在各自的网络中表示唯一性,所以,这个映射关系是互为KEY值的。
问题:如果我从来没有访问过外网,外网可以直接访问内网吗?
理论上不可以,但是有很多基于NAT原理的软件,可以帮助我们进行从外网访问到内网。——内网穿透。
内网穿透的原理:用户下载了某一种软件,该软件会定时,向服务端发送请求,从而让NAT路由器帮我们建立好映射。
3.3 NAT技术的缺陷
- 无法从NAT外部向内部服务器建立连接。
- 转换表的生成和销毁都需要额外开销。
- 通信的过程种一旦NAT设备异常,即使存在热备,所有的TCP连接也会断开。(路由器挂掉了,之前建立好的连接就释放了)
3.4 NAT和代理服务器
3.4.1 正向代理服务器
以校园网为例,当我们不使用校园网去访问抖音等软件时,直接访问外部软件,外部软件也直接访问你,是直接进行通信的。
为了学生的身心健康,学校会设置校园网,校园网本身就是一个局域网,所以会在学校内部有一台服务器。
这样主机的发送或者接受数据都需要通过Linux服务器,这台服务器就称为正向代理服务器。
3.4.2 反向代理服务器
以公司提供服务的大型机房为例。
有没有可能,大量的客户端通过公网访问时,会集中访问同一台主机,而导致其他主机没有任何负载呢?
会的。会导致被访问的主机压力很大,而其他主机的资源是闲置的。导致资源没有被充分利用。
所以在公司内部也会设置一台Linux主机,用通过一定的算法,将请求分配到不同的主机上。从而提高资源的利用率。
这台Linux服务器,会接受所有的请求,并将请求送达给不同的主机。主机在接受到数据后,会直接通过公网跟客户端进行通信。
这样只接收客户端数据的,而不接受服务端数据的Linux服务器,称为反向代理服务器。
3.4.3 NAT和代理服务器
路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网的设备和其他子网的通信过程。
代理服务器的功能和NAT设备有一些相像。客户端向代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器。
NAT设备和代理服务器的区别有哪些呢?
从底层实现来讲,NAT是路由器的功能,严格来说工作在网络层。代理服务器往往工作在应用层。
从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题。代理服务器则是更贴近具体应用,比如翻墙、游戏加速器等。