文章目录
- 一、DNS 协议
- 1.背景
- 2.域名
- 二、ICMP 协议
- 1.功能
- 2.格式
- 3. ping 命令
- 4. traceroute 命令
- 三、NAT 技术
- 1.基本理解
- 2. NAT 转换过程
- 3. NAPT
- 4. NAT 技术的缺陷
- 5. NAT 和代理服务器
一、DNS 协议
DNS(Domain Name System,域名系统),是一整套从域名映射到 IP 地址的系统,是一个应用层协议。
1.背景
TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个应用程序,但是IP地址不方便记忆。于是,人们发明了一种叫主机名的东西,是一个字符串,并且使用 hosts 文件来描述主机名和 IP 地址的关系。
最初,这个 hosts 文件是由互连网信息中心(SRI-NIC)来管理的。
如果一个新计算机要接入网络,或者某个计算机 IP 变更,都需要到信息中心申请变更 hosts 文件。其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网。
这样就太麻烦了,于是产生了 DNS 。
由一个组织的系统管理机构,维护系统内的每个主机的 IP 和主机名的对应关系。如果新计算机接入网络,将这个信息注册到数据库中,用户输入域名的时候,会自动查询 DNS 服务器,由 DNS 服务器检索数据库,得到对应的 IP 地址。
2.域名
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。
域名使用 . 连接。
比如,www.baidu.com :
- com:一级域名,表示这是一个企业域名。同级的还有 “net”(网络提供商)、“org”(非盈利组织)等。
- baidu:二级域名,表示公司名。
- www:只是一种习惯用法。之前人们在使用域名时,往往命名成类似于 ftp.xxx.xxx / www.xxx.xxx 这样的格式,来表示主机支持的协议。
二、ICMP 协议
ICMP(Internet Control Message Protocol,Internet 控制报文协议),是一个网络层协议。
ICMP 、IGMP 和 IP 协议,虽然都属于网络层的协议,但 ICMP 和 IGMP 都是 IP 的上层协议。
1.功能
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通,但是 IP 协议并不提供可靠传输。如果丢包了,IP 协议并不能通知传输层是否丢包以及丢包的原因。
ICMP 正是提供这种功能的协议,其主要功能包括:
- 确认 IP 包是否成功到达目标地址。
- 通知在发送过程中 IP 包被丢弃的原因。
- ICMP 只能搭配 IPv4 使用。如果是 IPv6 的情况下,需要用 ICMPv6 。
一个例子:
2.格式
ICMP大概分为两类报文:一类是通知出错原因,一类是用于诊断查询。
ICMP 报文的常见类型:
3. ping 命令
ping
命令,用于检测网络的连通情况。其底层使用的是 ICMP 协议。
语法:ping 域名
ping
命令会先发送一个 ICMP Echo Request 给对端,对端接收到之后,会返回一个 ICMP Echo Reply 。
在 Linux 下:
注:
① 此处 ping 的是域名,而不是 url !一个域名可以通过 DNS 解析成 IP 地址。
② ping 命令不光能验证网络的连通性,同时也会统计响应时间和 TTL(IP 包中的 Time To Live,生存时间)。
ping
命令是基于网络层的 ICMP 协议实现的,绕过了传输层。而端口号是传输层的内容,在 ICMP 中根本就没有端口号这样的概念。
ping
命令只是双方主机在内核层面上进行数据通信的,绕过了传输层,直接发送 IP 报文。这类套接字一般是原始套接字。
4. traceroute 命令
traceroute
命令也是基于 ICMP 协议实现的,能够打印出从当前主机一直到目标主机之前所经历的路由器。
在 Linux 下:
三、NAT 技术
1.基本理解
NAT 技术(Network Address Translation ,网络地址转换),是当前解决 IPv4 地址不够用的主要手段,也是路由器的一个重要功能。
- 在对外通信时,NAT 能够将私有 IP 最后转为全局 IP 。也就是说,NAT 就是一种将私有 IP 和全局 IP 相互转换的技术方法。
- 很多学校、家庭、公司内部在每个终端设置私有 IP ,而在路由器或必要的服务器上设置全局 IP 。
- 全局 IP 要求唯一,但是私有IP不需要。在不同的局域网中出现相同的私有 IP 是完全不影响的。
2. NAT 转换过程
局域网内的主机给外网服务器发送请求数据包:
- 当数据包经过路由器时,路由器会将数据包中的源 IP 替换成自己的 WAN 口 IP ,这就好像数据包是从路由器发出的一样。
- 路由器会在自己的转换表中,建立并维护替换前源 IP 和目的 IP 与替换后源 IP 和目的 IP 之间的映射关系。
- 数据包在网络中经过各种路由转发,最终到达外网服务器主机。
外网服务器给局域网内的主机发送响应数据包:
- 当数据包经过路由器时,路由器会根据转换表中曾经建立的映射关系,将数据包中的目的 IP 替换回对应的 IP 。
- 数据包在网络中经过各种路由转发,最终到达局域网内的主机 。
地址转换表:
- 在 NAT 路由器的内部,有一张自动生成的用于地址转换的表。
- 当局域网内的主机第一次向外网服务器发送请求数据包时,数据包经过的路由器,都会在表中建立映射关系。
- 当外网服务器向局域网内的主机发送响应数据包时,路由器就能根据表中曾经建立的映射关系,定向地把数据包转发回去。
3. NAPT
NAPT(Network Address Port Translation,网络地址端口转换)
如果局域网内有多台主机都访问同一个外网服务器,那么对于外网服务器返回的多个响应数据包,它们当中的目的 IP 都是相同的,都是路由器的 WAN 口 IP ,这时 NAT 路由器就无法判定应该将数据包转发给局域网内的哪台主机了。换言之,无法保证从右到左的唯一性。
此时,就用 NAPT 来解决这个问题,在地址转换表中使用 IP + port 来建立映射关系。
局域网内的主机给外网服务器发送请求数据包:
- 当数据包经过路由器时,路由器会将数据包中的源 IP 和源端口替换成自己的 WAN 口 IP 和端口,这就好像数据包是从路由器发出的一样。
- 路由器会在自己的转换表中,建立并维护替换前源 IP 和源端口、目的 IP 和目的端口与替换后源 IP 和源端口、目的 IP 和目的端口之间的映射关系。
- 数据包在网络中经过各种路由转发,最终到达外网服务器主机。
外网服务器给局域网内的主机发送响应数据包:
- 当数据包经过路由器时,路由器会根据转换表中曾经建立的映射关系,将数据包中的目的 IP 和目的端口替换回对应的 IP 和端口。
- 数据包在网络中经过各种路由转发,最终到达局域网内的主机。
这种映射关系是由 NAT 路由器自动维护的。
例如在 TCP 的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项。
映射关系左边的地址,在该子网中,一定是具有唯一性的。
映射关系右边的地址,在全局 IP 世界中,也一定具有唯一性。
既能保证从左边地址到右边地址的唯一性,也能保证从右边地址到左边地址的唯一性。
转换表中映射关系两边的地址是互为键值的。
数据包在发送的时候,它路上经过的每个路由器都会建立并维护映射关系。
数据包在回来的时候,就是反向地根据路由器中曾经建立好的映射关系回来。
4. NAT 技术的缺陷
由于 NAT 依赖这个转换表,所以有诸多限制:
- 无法从 NAT 外部向内部服务器建立连接。
- 转换表的生成和销毁都需要额外开销。
- 通信过程中一旦 NAT 设备异常,即使存在热备,所有的 TCP 连接也都会断开。
5. NAT 和代理服务器
代理服务器(Proxy Server),其功能是代理网络用户去取得网络信息,相当于一个网络信息的中转站。
代理服务器分为两种:正向代理和反向代理。
正向代理:是一个位于客户端和目标服务器之间的服务器。客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问目标服务器,并将目标服务器的响应结果返回给客户端。
正向代理的好处:
- 便于身份认证。
- 加速内网服务。若内网的大量用户都请求过外网的同一个资源,正向代理服务器就会将它缓存到本地,以后再有用户请求时,直接返回给用户,不需要再访问外网,加速访问资源的速度。
- 可以对访问内网的请求进行筛查,保护内网。
反向代理:也是一个位于客户端和目标服务器之间的服务器。客户端直接向反向代理服务器发起请求,反向代理服务器将客户端的请求转发给真正的目标服务器进行处理,并将目标服务器的响应结果返回给客户端。
反向代理的好处:
- 负载均衡。根据后端每台服务器的负载情况,较为均衡地将客户端请求转发到每台服务器上。
- 保护后端的服务器。
路由器往往都具备 NAT 设备的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信过程。
代理服务器看起来和 NAT 设备有一点像。客户端向代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器,服务器返回结果后,代理服务器又把结果回传给客户端。
NAT 和代理服务器的区别:
- 从部署位置上看,NAT 一般集成在防火墙、路由器等硬件设备上。代理服务器则是一个软件程序,需要部署在服务器上。
- 从应用上讲,NAT 设备是网络基础设备之一,解决的是 IP 不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器。
- 从底层实现上讲,NAT 工作在网络层,直接对 IP 地址进行替换。代理服务器往往工作在应用层。
- 从使用范围上讲,NAT 一般在局域网的出口部署。代理服务器可以在局域网部署,也可以在广域网部署,也可以跨网部署。