DNS(Domain Name System,域名系统),是一整套从域名映射到 IP 地址的系统,是一个应用层协议。
TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个应用程序,但是IP地址不方便记忆。于是,人们发明了一种叫主机名的东西,是一个字符串,并且使用 hosts 文件来描述主机名和 IP 地址的关系。
最初,这个 hosts 文件是由互连网信息中心(SRI-NIC)来管理的。
如果一个新计算机要接入网络,或者某个计算机 IP 变更,都需要到信息中心申请变更 hosts 文件。其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网。
这样就太麻烦了,于是产生了 DNS 。
由一个组织的系统管理机构,维护系统内的每个主机的 IP 和主机名的对应关系。如果新计算机接入网络,将这个信息注册到数据库中,用户输入域名的时候,会自动查询 DNS 服务器,由 DNS 服务器检索数据库,得到对应的 IP 地址。
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。
域名使用 . 连接。
比如,www.baidu.com :
ICMP(Internet Control Message Protocol,Internet 控制报文协议),是一个网络层协议。
ICMP 、IGMP 和 IP 协议,虽然都属于网络层的协议,但 ICMP 和 IGMP 都是 IP 的上层协议。
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通,但是 IP 协议并不提供可靠传输。如果丢包了,IP 协议并不能通知传输层是否丢包以及丢包的原因。
ICMP 正是提供这种功能的协议,其主要功能包括:
ICMP大概分为两类报文:一类是通知出错原因,一类是用于诊断查询。
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 报文。这类套接字一般是原始套接字。
traceroute
命令也是基于 ICMP 协议实现的,能够打印出从当前主机一直到目标主机之前所经历的路由器。
NAT 技术(Network Address Translation ,网络地址转换),是当前解决 IPv4 地址不够用的主要手段,也是路由器的一个重要功能。
外网服务器给局域网内的主机发送响应数据包:
地址转换表:
- 在 NAT 路由器的内部,有一张自动生成的用于地址转换的表。
- 当局域网内的主机第一次向外网服务器发送请求数据包时,数据包经过的路由器,都会在表中建立映射关系。
- 当外网服务器向局域网内的主机发送响应数据包时,路由器就能根据表中曾经建立的映射关系,定向地把数据包转发回去。
NAPT(Network Address Port Translation,网络地址端口转换)
如果局域网内有多台主机都访问同一个外网服务器,那么对于外网服务器返回的多个响应数据包,它们当中的目的 IP 都是相同的,都是路由器的 WAN 口 IP ,这时 NAT 路由器就无法判定应该将数据包转发给局域网内的哪台主机了。换言之,无法保证从右到左的唯一性。
此时,就用 NAPT 来解决这个问题,在地址转换表中使用 IP + port 来建立映射关系。
外网服务器给局域网内的主机发送响应数据包:
这种映射关系是由 NAT 路由器自动维护的。
例如在 TCP 的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项。
映射关系左边的地址,在该子网中,一定是具有唯一性的。
映射关系右边的地址,在全局 IP 世界中,也一定具有唯一性。
既能保证从左边地址到右边地址的唯一性,也能保证从右边地址到左边地址的唯一性。
转换表中映射关系两边的地址是互为键值的。
数据包在发送的时候,它路上经过的每个路由器都会建立并维护映射关系。
数据包在回来的时候,就是反向地根据路由器中曾经建立好的映射关系回来。
由于 NAT 依赖这个转换表,所以有诸多限制:
代理服务器(Proxy Server),其功能是代理网络用户去取得网络信息,相当于一个网络信息的中转站。
代理服务器分为两种:正向代理和反向代理。
正向代理:是一个位于客户端和目标服务器之间的服务器。客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问目标服务器,并将目标服务器的响应结果返回给客户端。
正向代理的好处:
反向代理:也是一个位于客户端和目标服务器之间的服务器。客户端直接向反向代理服务器发起请求,反向代理服务器将客户端的请求转发给真正的目标服务器进行处理,并将目标服务器的响应结果返回给客户端。
反向代理的好处:
路由器往往都具备 NAT 设备的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信过程。
代理服务器看起来和 NAT 设备有一点像。客户端向代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器,服务器返回结果后,代理服务器又把结果回传给客户端。
NAT 和代理服务器的区别: