文章目录
DNS协议、ICMP协议、NAT技术
1. DNS协议
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS协议是用来将域名转化为IP地址的应用层协议。
(1) DNS背景
TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序。 但是IP地址不方便记忆,于是人们发明了一种叫主机名的东西,是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系。
最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的。
- 如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件。
- 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。
这样就太麻烦了, 于是产生了DNS系统。
- 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系。
- 如果新计算机接入网络, 将这个信息注册到数据库中;
- 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址。
至今, 我们的计算机上仍然保留了hosts文件。在域名解析的过程中仍然会优先查找hosts文件的内容
可以通过cat /etc/hosts
查看hosts文件。
(2) 域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。
www.baidu.com
域名使用 . 连接
- com: 一级域名。表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(非盈利组织) 等。
- baidu: 二级域名, 公司名。
- www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于
ftp.xxx.xxx/www. xxx. xxx
这样的格式, 来表示主机支持的协议。
(3) 域名解析过程
-
当用户输入域名时,浏览器先检查自己的缓存中是否包含这个域名映射的ip地址,有解析结束。
-
若没命中,则检查操作系统缓存(如Windows的hosts)中有没有解析过的结果,有解析结束。
-
若无命中,则请求本地域名服务器解析(LDNS)。
-
若LDNS没有命中就直接跳到根域名服务器请求解析。根域名服务器返回给LDNS一个 主域名服务器地址。
-
此时LDNS再发送请求给上一步返回的gTLD( 通用顶级域), 接受请求的gTLD查找并返回这个域名对应的Name Server的地址
-
Name Server根据映射关系表找到目标ip,返回给LDNS
-
LDNS缓存这个域名和对应的ip, 把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束
(4) DNS扩展
DNS同占用UDP和TCP端口53是公认的,这种单个应用协议同时使用UDP和TCP两种传输协议。
DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送。
为什么既使用TCP又使用UDP?
首先了解一下TCP与UDP传送字节的长度限制:
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
UDP报文的最大长度问题
以太网帧在局域网中的MTU是1500byte,但是在非局域网环境,如:internet下的时候,MTU是各个路由器进行一个配置的。所以,通常路由器默认的MTU为576字节。所以,为了适应网络环境,DNS协议在返回的数据报大于512的时候,就转化为了TCP协议。
为什么域名解析用UDP协议?
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快 。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
DNS负载均衡是什么策略?
当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会崩掉。处理办法就是用DNS负载均衡技术。
它的原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等
2. ICMP协议
(1) 介绍
ICMP(Internet Control Message Protoco)Internet控制报文协议,用于在IP主机、路由器之间传递控制信息,是一个TCP/IP协议。
- ICMP协议隶属于网络层,属于IP协议的上层协议,它是使用IP的;就如同ARP协议属于MAC帧协议的上层
- ICMP协议可以让应用层绕过TCP协议来使用ICMP协议
- ICMP底层使用IP协议,但是IP协议并不提供可靠传输。如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因。但是如果通信双方都使用ICMP协议,一旦出现丢包问题,ICMP可以检查丢包原因并返回
(2) ICMP功能
ICMP正是提供这种功能的协议; ICMP主要功能包括:
- 确认IP包是否成功到达目标地址。
- 通知在发送过程中IP包被丢弃的原因。
- ICMP也是基于IP协议工作的。但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
- ICMP只能搭配IPv4使用。如果是IPv6的情况下, 需要是用ICMPv6;
(3) ping命令
ping是基于网络层的ICMP协议实现的。通过向对方发送一个ICMP回送请求报文,如果对方主机可达的话会收到该报文,并响应一个ICMP回送回答报文。
- 注意, 此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址。
- ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期)。
- ping命令会先发送一个 ICMP Echo Request给对端;
- 对端接收到之后, 会返回一个ICMP Echo Reply;
(4) traceroute命令
也是基于ICMP协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器。
(5) 一个值得注意的坑
telnet是23端口, ssh是22端口, 那么ping是什么端口?
ping命令基于ICMP, 是在网络层。 而端口号, 是传输层的内容。在ICMP中根本就不关注端口号这样的信息;ping命令绕过TCP直接使用ICMP协议,没有端口号。
3. NAT技术
(1) NAT技术背景
之前我们讨论了, IPv4协议中, IP地址数量不充足的问题。NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;
- NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:
- 很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
- 全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;
(2) NAT IP转换过程
- NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
- NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10;
- 在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;
- 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;
(3) NAPT
那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同
的。那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了。使用IP+port来建立这个关联关系
这种关联关系也是由NAT路由器自动维护的。例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项。
(4) NAT技术的缺陷
NAT技术进行私有IP和公网之间的替换,主要就是依赖NAT路由器当中维护的网络地址转换表,但这张转换表也体现出了NAT的一些缺陷:
- 无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立连接。
- 转换表的生成和销毁都需要额外开销。
- 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。
(5) NAT和代理服务器
代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息。代理服务器又分为正向代理和反向代理。
正向代理
正向代理:在客户端部署代理服务器,代替客户端对外部网络发送和接收消息。客户端发送一个指定目标的请求给代理服务器,代理服务器再发送给目标服务器,目标服务器收到请求后,将响应的内容发送给代理服务器,代理服务器发给客户端。
比如公司内部一般都会有自己的服务器,当我们使用公司内网上网时。
- 我们对外网发起的数据请求,首先会转发到公司的这台服务器上,然后由公司的这台服务器代替你对外网进行访问。
- 当公司的服务器收到对应外网的响应数据后,再由公司的这台服务器将数据转发给你
正向代理的好处:
- 正向代理最大的一个好处就是可以加速资源访问。
- 比如公司中大量员工都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他人要访问该资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。
反向代理
反向代理:在服务器端部署代理服务器(为了区分,将真正响应的服务器成为业务服务器),让代理服务器替业务服务器接收请求或发送响应。客户端发送一个请求给代理服务器,代理服务器接收请求并将请求发送给业务服务器 ,业务服务器将响应发送给代理服务器,代理服务器再将响应发送给客户端。
比如域名www.bai.com
对应的服务器实际就是一个反向代理服务器。
- 百度内部实际并不是只有一台服务器,但不同地区的人们都可以通过访问
www.baidu.com
享受到百度提供的服务,实际我们访问的就是百度的反向代理服务器。 - 当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据处理,然后再将数据处理的结果返回给客户端。
反向代理的好处:
-
反向代理可以起到负载均衡的作用。比如不设置反向代理服务器,那么用户在访问百度时,就会随机访问到百度内部的某台服务器,此时就可能导致某些服务器压力太大,而某些服务器却处于闲置状态。而设置了反向代理服务器后,我们就能够通过某些方法让用户的数据请求较为平均的落到每台服务器上。
-
反向代理还能起到安全防护的作用。有了反向代理服务器后,我们不需要直接将提供服务的服务器对应的信息暴露出去,此外,当由非法请求发送到反向代理服务器时,反向代理服务器就相当于一层软件屏障,可以在反向代理服务器当中部署一些防护措施,让这些非法请求在反向代理服务器这里就被过滤掉,而不会影响内部实际提供服务的服务器。
需要注意的是,代理服务器的主要工作只是对数据进行转发,因此代理服务器处理数据的压力不会特别大,并且代理服务器也可以有多个,因此不必担心代理服务器过载的情况。
正向代理和反向代理的异同点
同:
1、正向代理和反向代理中的服务器都是对请求和响应进行转发。
2、都能提高访问速度。
3、帮助客户端或业务服务器隐藏真实的IP。
异:
1、部署的位置不同
正向代理部署在客户端,反向代理部署在服务器端
2、作用不同
那么NAT和代理服务器的区别有哪些呢?
- 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题。代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器。
- 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换。代理服务器往往工作在应用层。
- 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。
- 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。
4. 总结
(1) 数据链路层
-
数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
-
以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容。例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
-
以太网帧格式
-
理解mac地址
-
理解arp协议
-
理解MTU
(2) 网络层
-
网络层的作用: 在复杂的网络环境中确定一个合适的路径
-
理解IP地址, 理解IP地址和MAC地址的区别
-
理解IP协议格式
-
了解网段划分方法
-
理解如何解决IP数目不足的问题, 掌握网段划分的两种方案。理解私有IP和公网IP
-
理解网络层的IP地址路由过程。理解一个数据包如何跨越网段到达最终目的地
-
理解IP数据包分包的原因
-
了解ICMP协议
-
了解NAT设备的工作原理
(3) 传输层
-
传输层的作用: 负责数据能够从发送端传输接收端
-
理解端口号的概念
-
认识UDP协议, 了解UDP协议的特点
-
认识TCP协议, 理解TCP协议的可靠性。理解TCP协议的状态转化
-
掌握TCP的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性
-
理解TCP面向字节流, 理解粘包问题和解决方案
-
能够基于UDP实现可靠传输
-
理解MTU对UDP/TCP的影响
(4) 应用层
-
应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
-
能够根据自己的需求, 设计应用层协议
-
了解HTTP协议
-
理解DNS的原理和工作流程