>

网关和 DNS 的区别

什么是网关

通俗的来说,网关(Gateway)就是一个网络连接到另一个网络的“关口”。
按照不同的分类标准,网关也有很多种。TCP/IP 协议里的网关是最常用的,在这里我要讲的“网关”均指 TCP/IP 协议下的网关。

那么网关到底是什么呢?网关实质上是一个网络通向其他网络的 IP 地址。比如有网络 A 和网络 B,网络 A的 IP 地址范围为 “192.168.1.1192. 168.1.254”,子网掩码为 255.255.255.0;网络B的IP地址范围为 “192.168.2.1192.168.2.254”,子网掩码为 255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP 通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP 协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。

如果网络 A 中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络 B 的网关,网络 B 的网关再转发给网络 B 的某个主机。网络 B 向网络 A 转发数据包的过程也是如此。

所以,只有设置好网关的 IP 地址,TCP/IP 协议才能实现不同网络之间的相互通信。那么这个 IP 地址是哪台机器的 IP 地址呢?网关的 IP 地址是具有路由功能的设备的 IP 地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。


#### 什么是 DNS ? --- DNS 全名叫 Domain Name Server,中文俗称“域名服务器”,在说明 DNS Server 之前,可能要先说明什么叫 Domain Name(域名)。正如上面所讲,在网上辨别一台电脑的方法是利用 IP 地址,但是 IP用数字表示,没有特殊的意义,非常不便于记忆。因此,我们一般会为一个 IP 地址取一个有某种含义又容易记忆的名字,这个名字我们就叫它 “Domain Name"。

发出一个网络请求时,比如 ping www.google.com,它会经过 DNS 解析域名得到目标 IP 进行发送请求。

主机发送一个网络请求的请求过程

具体来说就是,主机先把 DNS 请求发送到网关,网关充当路由功能,把该 DNS 请求发送到 DNS 服务器,DNS 服务器接收到请求后,解析 DNS (域名解析)并获得 ip 地址,返回给主机,
主机获得域名所对应的 ip 地址后,再继续把该目的 ip 地址发向网关进行请求。

下面是详细的请求过程:
1.首先,主机 A 会广播发送 ARP 请求,请求报文的目的 MAC地址 为 FFFFFF-FFFFFF(这个地址用于广播,也即每个主机都会收到该 ARP 请求),目的IP为网关的IP,要求获得网关的MAC地址;
2.路由器(即主机A的默认网关)响应该 ARP 请求,发送目的 MAC 地址为 A,目的IP为A的IP的 ARP 应答报文,以告知A网关的 MAC 地址;
3.A 获得网关的 MAC 地址后,就向网关发送一个 DNS 查询报文,其目的 MAC 地址为网关的 MAC 地址,目的 IP 为 DNS 服务器的IP地址;
4.网关收到 DNS 查询报文后,拆包检查发现是 DNS 查询于是将相应(查询)信息封装,向 DNS 服务器发送该报文,其目的 IP 地址为 DNS 服务器的 IP,目的mac为下一跳的mac,解析域名IP地址此时就交给了 DNS 服务器;
5.经过 DNS 解析,主机 A 知道了所要 ping 的域名的 ip 地址;
6.剩下的 ping 过程就和ping一个特定的 ip 地址相同了,首先判断 ping 命令的目的 B 的 IP 地址是否和 A 在同一网段,若在同一网段则相当于同网段内 ping,若不在同一网段,就是不同网段的 ping 只不过此时主机不需要再解析网关的 MAC 地址了。

IP 地址 192.168.1.1 指向的就是你的路由器。
其实我们的路由器,不光只有路由功能,还有两个重要的功能,一个叫网关,一个叫 DNS 中继。DNS 和默认网关本来是不一样的,只是我们在挂上路由器后,为了避免用户麻烦的设置自己的电脑,便将这些路由能转发的协议都指向到路由去,结果,我们这边看到的就是,默认网关,DNS 服务器,甚至是 DHCP 服务器、WHOIS 服务器都是路由器了。
如果要改,到路由器配置页面去看路由 WAN 口的设置,然后把电脑上除网关外的参数设置成和路由器 WAN 口一样,也还是可以正常上网的。

单向 ping 通的原因
从 Ping 的工作过程,我们可以知道,主机 A 收到了主机 B 的一个应答包,说明两台主机之间的去、回通路均正常。也就是说,无论从主机 A 到主机 B,还是从主机 B 到主机 A,都是正常的。那么,是什么原因引起只能单方向 Ping 通的呢?

一、安装了个人防火墙
在共享上网的机器中,出于安全考虑,大部分作为服务器的主机都安装了个人防火墙软件,而其他作为客户机的机器则一般不安装。几乎所有的个人防火墙软件,默认情况下是不允许其他机器Ping本机的。一般的做法是将来自外部的 ICMP 请求报文滤掉,但它却对本机出去的 ICMP 请求报文,以及来自外部的 ICMP 应答报文不加任何限制。这样,从本机 Ping 其他机器时,如果网络正常,就没有问题。但如果从其他机器 Ping 这台机器,即使网络一切正常,也会出现“超时无应答”的错误。
大部分的单方向 Ping 通现象源于此。解决的办法也很简单,根据你自己所用的不同类型的防火墙,调整相应的设置即可。

二、双网卡 IP 地址冲突
正常情况下,一台主机应该有一个网卡,一个 IP 地址,或多个网卡,多个 IP 地址(这些地址一定要处于不同的 IP 子网)。但对于在公共场所使用的电脑,特别是网吧,人多手杂,其中不泛有“探索者”。曾有一次两台电脑也出现了这种单方向 Ping 通的情况,经过仔细检查,发现其中一台电脑的“拨号网络适配器”(相当于一块软网卡)的 TCP/IP 设置中,设置了一个与网卡 IP 地址处于同一子网的 IP 地址,这样,在 IP 层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机 Ping 其他的机器时,会存在这样的问题:
(1)主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段;
(2)主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去 Ping 其他机器,IP 层协议会无法处理,超时后,Ping 就会给出一个“超时无应答”的错误信息提示。但从其他主机 Ping 这台主机时,请求包从特定的网卡来,ICMP 只须简单地将目的、源地址互换,并更改一些标志即可,ICMP 应答包能顺利发出,其他主机也就能成功 Ping 通这台机器了

查看主机的 网关 和 DNS

<1> 查看网关

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window irtt Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 enp0s17
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 enp0s17
192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 enp0s8

注:(以 0.0.0.0 开始的行的 gateway 是默认网关)

<2> 查看 DNS

$ less /etc/resolv.conf
nameserver 10.16.0.222
nameserver 192.168.0.222
nameserver 10.18.126.10
nameserver 8.8.8.8
search www.abc.net

注:nameserver 就是 DNS 服务器地址,一般不超过 5 个,查询时按顺序进行,第一个查不到才会去查第二个。8.8.8.8 是 google 的 DNS 服务器。

其他参数解释:
domain 声明主机的域名。很多程序用到它,比如邮件系统,当为没有域名的主机进行 dns 查询时,也要用到。
如果没有域名,主机名将被使用。

search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由 search 声明的域中分别查找。
需要注意的是,domain 和 search 不能共存; 如果同时存在,后面出现的将会被使用。

参考
http://blog.csdn.net/kunlong0909/article/details/6765564
http://blog.csdn.net/bat603/article/details/652126
一个http请求的详细过程
http://blog.163.com/yangji008@126/blog/static/7003693520117206102/