【网络】DNS | ICMP | NAT | 代理服务器

🐱作者:一只大喵咪1201
🐱专栏:《网络》
🔥格言:你只管努力,剩下的交给时间!
图

前面几篇文章虽然讲介绍了整个网络通信的协议栈,我们也知道了完整的网络通信过程,但是还有几个坑没填,以及一些重要的协议和技术没有讲解。

DNS | ICMP | NAT | 代理服务器

  • 😽DNS
  • 😽ICMP协议
  • 😽NAT技术
  • 😽代理服务器
  • 😽总结

😽DNS

  • DNS是一整套从域名映射到IP地址的系统,也就是域名解析服务。
  • DNS服务的默认端口号是53。

本喵在讲解网络通信的时候,都是说的IP地址,但是我们生活中访问一些网站时都用的域名,如www.baidu.com访问的就是百度的服务器。

在整个网络通信的协议栈中我们也并没有看到和域名有关的任何东西,因为网络通信的实现就是通过IP地址,并不是域名,域名也需要转换成IP地址,然后再进行通信。

对于使用网络的人来说,IP地址并不方便记忆,因为它是数字性的东西,所以将域名和IP地址映射起来,形成一一对应的关系,在是使用的时候直接使用域名字符串就行。

图
最初,在每个人的主机上都存在一个hosts文件文件,该文件中存放的就是域名和IP地址的映射关系,如上图所示,主机名host-a对应着IP地址172.20.2.1

这个hosts文件是由互联网中心(SRI-NIC)来管理的:

  • 如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。
  • 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。

每当我们访问一个服务器输入域名的时候,浏览器都会自动去本地的hosts文件中查找对应的IP地址,然后再进行绑定创建套接字等发起网络请求。
图
如上图所示,查看/etc/hosts路径的文件,可以看到hosts文件中的内容,红色框中的是IP地址,绿色框中是与之映射的域名,也就是字符串。


但是这样的方式太麻烦了,需要定期去更新hosts文件,增加时还要修改再提交申请等等,所以就产生了DNS系统。

  • DNS:一个组织的系统管理机构,维护系统内的每个主机的IP和域名的对应关系,该机构就像CA机构一样,具有权威性。
  • 如果新计算机接入网络,需要将这个信息注册到数据库中。
  • 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址,返回给用户。

域名简介:

既然有了一个权威性的机构来提供域名解析服务,所以域名也有命名规则,以www.baidu.com为例:

  • com: 一级域名,表示这是一个企业域名,同级的还有 net(网络提供商), org(非盈利组织) 等。
  • baidu:二级域名,一般是公司名或者组织的名称。
  • www:只是一种习惯用法,不写都可以,直接使用baidu.com也可以访问百度的服务器。

域名解析过程:

在Linux机器上使用yum -y install bind-utils指令可以安装一个dig工具,可以看到域名解析的过程。
图
如上图,是解析域名www.baidu.com的过程。

  • 第一个绿色框中的内容是dig工具的版本号等信息。
  • 第二个绿色框是域名解析的结果,NOERROR表示解析成功。
  • 第三个绿色框是要解析的域名。
  • 第四个绿色框是解析后的结果,在解析时,先将www.baidu.com解析成了www.a.shifen.com,然后再将www.a.shifen.com解析成了两个IP地址。
  • 最后一个绿色框是解析后的结构统计,包括解析时长,DNS服务器的IP地址等信息。

图
如上图所示,在浏览器中输入解析出来的IP地址112.80.248.76,也可以直接访问到百度的首页,和输入域名www.baidu.com结果一样,区别在于:

  • 使用IP地址访问时,浏览器自动采用HTTP协议。
  • 使用域名访问时,浏览器自动采用HTTPS协议。

😽ICMP协议

图
如上图所示,主机A向主机B发送数据,数据经过多次局域网转发后到了路由器2,路由器2为了获取主机B的MAC地址,发送ARP请求,但是发送了多次都没有收到主机B的ARP应答。

此时路由器2会返回一个Destination Unreachable结果给主机A,主机A收到以后就知道了数据传送错误的原因。

这种返回错误的功能之前IP协议是没有的,如果发送不成功,传输层就会触发超时重传再次发送。这种方式对于使用者来说是没有问题的,但是对于网络管理员来说不够。

他们需要知道错误的原因从而进行修复,让网络通信正常,此时ICMP协议就派上了用场。

  • ICMP协议是一个网络层协议,它能确认IP数据包是否成功到达目标地址。
  • 如果没有发送成功,通知发送端IP数据包被丢弃的原因。
  • ICMP协议也是基于IP协议工作的,它并不是传输层的功能,所以我们把它归结为网络层协议。

ICMP只能搭配IPv4使用,如果是IPv6的情况,需要使用ICMPv6协议。

协议格式(了解):

图
关于协议格式,本喵不会详细讲解,有个了解就可以,ICMP报文大致分为两类,一类是通知出错原因,一类是用于诊断查询。

图

如上图表所示便是ICMP常见代码和代码所代表的内容。

ping命令:

我们在验证一个机器的网络是否连接成功时,通常都会使用ping

图
如上图就是本喵在对www.baidu.com使用ping命令,可以在Linux上进行,也可以在Windows上进行。

  • 此处ping的是一个域名,而不是url(服务器web文件路径),域名可以通过DNS解析成IP地址。
  • ping命令不仅能验证网络的连通性,而且也会统计响应的时间和TTL(IP协议中的生存时间,也就是跳数)。
  • ping命令会先发送一个IMCP的Echo Request给对端,对端接收到之后会返回一个IMCP的Echo Reply

ping命令是通过ICMP协议实现的,是网络层的协议,所以没有端口号,它绕过了应用层和传输层,直接从网络层开始。

图
如上图所示,traceroute 域名指令可以查询当前主机当目标主机之前经历了多少路由器,这也是基于ICMP协议实现的。

😽NAT技术

前面本喵在讲解IP协议数据发送的时候的时候,数据从局域网发送到公网服务器的过程中,每经过一个入口路由器,就会将IP报头中的目的IP地址替换成当前路由器的WAN口IP。

  • NAT能够将私有IP对外通信时转为公网IP,也就是一种将私有IP和公网IP相互转化的技术方法。

图
如上图所示,此时局域网的客户端A向公网中的服务器发送数据,客户端A将数据在网络层的时候封装IP报头,其中目的IP地址是服务器的公网IP地址163.221.120.9,源IP地址是自己的私有IP地址10.0.0.10,数据最后以MAC帧的形式发送到NAT路由器。

  • NAT路由器的内网LAN口IP地址是10.0.0.1,公网WAN口IP地址是202.244.174.37

数据帧被路由器进行解包分用交给自己的网络层后,将IP报头中的源IP地址换成了WAN口IP地址,然后再封装成数据帧发送给公网中的服务器。

当目标IP地址的服务器响应时,同样也需要封装IP报头,其中目的IP就填路由器的WAN口IP,路由器拿到这个响应后,再将IP报头中的目的IP改成客户端A的IP地址10.0.0.10,再发送给客户端A。


问题来了,如果局域网中有多台客户端主机都访问这同一个服务器,甚至每台主机上有多个进程在访问这个服务器,请求数据包都可以通过NAT路由器发送给服务器,服务器也可以将响应返回给路由器。

  • 但是,路由器收到数据包后,所有数据的IP报头中的目的IP地址都是WAN口IP,路由器如何判断这个数据是给局域网中的哪个主机呢?又是该给主机上的哪个进程呢?

NAPT:

这个时候NAT就来解决问题了,采用的是IP + port的方式建立一个转换表。

图
如上图所示,局域网中的每台客户端的IP地址都是唯一的,一台客户端上每个进程的端口号又是唯一的,所以将IP地址和端口号组合成IP:port也是唯一的。

所有客户端,所有进程访问的都是同一台服务器的同一个服务进程,所以它们的目的IP和端口都是相同的。

  • 源IP:源port目的IP:目的port组合在一起形成一个四元组,这个四元组在局域网中也是唯一的。

一个四元组其实就是IP报头中的一部分,当数据传送到NAT路由器以后,路由器会维护一份转换表,如上图所示。

转换表中,将局域网四元组的源IP地址替换成WAN口IP,四元组中的端口号也替换成一个唯一的数字,此时就形成了一个新的四元组,该四元组在公网中是唯一的,然后和旧的四元组形成一个映射关系。

  • 这个映射关系是互为键值的。

路由器也是一个主机,客户端A的数据包和客户端B的数据包,它们的四元组不同,路由器就好像是创建了两个“进程”来转发这两个数据包,并且将这两个数据包的源IP地址替换,端口号替换。

由于是路由器的不同“进程”在转发数据包,所以每一对映射关系中,路由器的四元组中的端口号都是不同的,和操作系统分配端口号是一个规则。

当服务器响应多个数据包给NAT路由器的时候,虽然目的IP地址都是WAN口IP,但是端口号不同。

路由器再根据不同端口号的公网四元组找到对应的局域网四元组,将数据发给相应客户端的相应进程。

  • NAT路由器中的映射关系转换表是由路由器自动维护的。
  • 假设使用TCP协议,当连接建立时,路由器中就会生成这对通信双方的映射表项,断开连接后就会删除这个表项。

路由器通常情况下都带有NAT功能,否则无法完成内网和公网的IP地址转换问题。

NAT技术的缺陷:

由于NAT技术非常依赖映射转换表,所以就有诸多限制:

  • 服务器无法从公网主动给内网中的客户端发数据,因为路由器中没有映射关系,映射关系是在客户端给服务端发送数据时建立的。
  • 转换表的生成和销毁都需要一定的开销,会增大路由器的负担。
  • 通信过程中,一旦NAT设备异常,所有的TCP连接就会出现异常。

😽代理服务器

假设你想买一些韩国的化妆品,但是你去韩国不方便,正好有个同学在韩国留学,此时你就可以让他帮你去实体店买,然后再给你。这个过程中,你同学扮演的就是正向代理的角色。

由于这个化妆品很好,所以你周围有很多人都让你同学帮代购,你同学觉得不停的去买比较麻烦,所以就在他国内的家里屯了一堆化妆品,有人让他代购的时候,他就将家里的化妆品给它,此时你同学扮演的就是反向代理的角色。


图
假设现在你的学校里办活动需要自己买一些东西,你和你的同学们一起从淘宝买,此时你们使用的都是校园网,淘宝为了满足大量客户的访问,所以它的服务器不止一台,而是一个服务器机群。

你和同学在访问淘宝服务器时,其实并不是你的客户端在直接访问,而是你将自己的请求交给学校的正向代理服务器,然后正向代理服务器代替你去请求淘宝。

当多个请求发送给淘宝服务器时,并不是直接发给了机群中的某台服务器,这样会导致服务器扛不住压力而奔溃。所以这些请求都是交给了淘宝的反向代理服务器。

反向代理服务器通过一些均衡策略,让这些大量的请求去访问不同的服务器,将请求压力分摊给每一台服务器,保证它的正常服务。

  • 比如Nginx就是专门用来做负载均衡,以及支持大量线程并发访问的服务器。
  • 这也就是为什么我们在访问淘宝时,并不需要区分具体哪个服务器,只需要访问淘宝即可。
  • 因为我们访问的实际上是淘宝的反向代理服务器。

上面过程中,学校的代理服务器离我们近,它是正向代理服务器,淘宝的代理服务器离我们远,它是反向代理服务器。


图
如上图所示,假设你用学校的校园网去看《战狼2》电影,你从客户端向腾讯视频发起请求,你的请求会被学校的代理服务器拦截下来,然后由代理服务器替你向腾讯视频发起请求。

腾讯视频收到代理服务器的请求后,将对应的电影资源响应给代理服务器,代理服务器收到响应后再将这个响应转发给你,并且将这个电影的响应缓存到代理服务器中。

你给你的同学推荐了这个电影,你的同学也用腾讯视频看这个电影,当他发起请求后,同样会被代理服务器拦截,然后发现本地有这个电影的缓存资源,就直接将这个资源给他返回了,代理服务器也不再向腾讯视频的服务器发起代理请求了。

这个过程中,你的同学拿到这个电影的资源比你会快很多,因为学校的代理服务器离你们更近。

  • 代替客户端发起请求的,就是正向代理服务器
  • 用来作缓存的一般就是反向代理服务器

实际上,正向代理服务器和反向代理服务器并没有非常明确的界限,就像上面例子中,学校的代理服务器既代替我们发起请求,也缓存了电影资源,它既是一个正向代理服务器也是一个反向代理服务器。

NAT和代理服务器:

代理服务器看起来和NAT设备有一点像,客户端向代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后,代理服务器又把结果回传给客户端。

局域网中的客户端将请求交给NAT设备,NAT设备再将请求通过路由发送给目标服务器,目标服务器再将响应发送给NAT设备,NAT设备再将响应转发给局域网中的客户端。

二者的区别:

  • 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题。代理服务器则是更贴近具体应用,像迅游这样的加速器,也是通过代理服务器缓存数据来达到加速的目的。
  • 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换。代理服务器工作在应用层。
  • 从使用范围上讲,NAT一般在局域网的出口部署。代理服务器可以在局域网,也可以在广域网,也可以跨网。
  • 从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。

😽总结

这篇文章填了一些前面的坑,还介绍了网络中常用的技术和协议,是用来完善网络体系才写的,这些内容仅作为了解,并不是重点内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【⑬MySQL | 数据类型(一)】简介 | 整数 | 浮点 | 定点类型

前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL数据类型简介 | 整数 | 浮点 | 定点类型的分享✨ 目录 前言0.数据类型简介1 整数类型2 浮点类型3 定点类型4 日期/时间类型总结 0.数据类型简介 数据类型(data_type)是指系统中所允许的…

LRU淘汰策略执行过程

1 介绍 Redis无论是惰性删除还是定期删除,都可能存在删除不尽的情况,无法删除完全,比如每次删除完过期的 key 还是超过 25%,且这些 key 再也不会被客户端访问。 这样的话,定期删除和堕性删除可能都彻底的清理掉。如果…

百度许少辉著Baidu《乡村振兴战略下传统村落文化旅游设计》图书馆新书通报

百度许少辉著Baidu《乡村振兴战略下传统村落文化旅游设计》图书馆新书通报

AWS SDK 3.x for .NET Framework 4.0 可行性测试

前言 为了应对日益增长的网络安全挑战, 越来越多的互联网厂商已经陆续开始或者已经彻底停止了对 SSL 3 / TLS 1.0 / TLS1.1 等上古加密算法的支持. 而对于一些同样拥有悠久历史的和 AWS 服务相关联的应用程序, 是否可以通过仅更新 SDK 版本的方式来适应新的环境. 本文将以 Win…

揭开pkill的秘密:在Linux中杀死进程的完整指南

揭开pkill的秘密:在Linux中杀死进程的完整指南 一、前言二、进程管理基础知识2.1、什么是进程?2.2、进程管理的原理和目的2.3、进程状态和标识符 三、理解Linux pkill命令3.1、pkill命令的概述和作用3.2、与kill命令的对比3.3、常见的pkill命令选项和参数…

PCAP01介绍和STM32模拟SPI驱动

一.芯片介绍 Pcap01是德国acam公司设计的一款革命性的电容测量芯片。该芯片 内部有DSP计算单元,可以直接将电容元件接到Pcap01芯片,然后芯片计算出容值大小,通过SPI总线将电容容值数据传送给CPU,电容测量完全数字化。 二,测量原…

无脑入门pytorch系列(五)—— nn.Dropout

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…

docker启用cgroup v2

要求 本人的操作系统是kali,基于debian docker info如果你这里是2那么说明启用了,如果是1,那么就未启用 对于Docker来说,Cgroups v2的使用需要满足以下条件: Linux内核版本在4.15以上。 uname -r 系统已经启用Cgro…

前端处理图片文件的方法

在项目开发过程中&#xff0c;有一个需求&#xff0c;需要前端对上传的图片进行处理&#xff0c;以字符串的形式传给后端&#xff0c;实现效果如下&#xff1a; 1.上传图片的组件 在该项目中&#xff0c;使用了element plus组件库 <el-uploadv-model:file-list"fileL…

c++(8.23)类,this指针,构造函数,析构函数,拷贝构造函数

设计一个Per类&#xff0c;类中包含私有成员&#xff1a;姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员&#xff1a;成绩、Per类对象 p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>u…

​8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑工业出版社,2022.

​&#xff18;th参考文献&#xff1a;&#xff3b;&#xff18;&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑工业出版社&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&a…

notebook写好代码后直接生成PPT报告(html格式)

注&#xff1a;记录使用notebook直接生成html格式的PPT报告&#xff08;html格式&#xff09;。 前置内容&#xff1a;如果直接导出没有Reveal.js.slides(.slides.html)选项&#xff0c;需要安装插件nbextensions。 安装参考&#xff1a;插件nbextensions安装 操作步骤&#x…

PostgreSQL-UDF用户自定义函数-扩展插件

目录 PostgreSQL-UDF用户自定义函数-扩展插件零、前置条件一、创建 .c 和 .sql 文件创建.c文件创建.sql文件 二、创建 .control 和 Makefile 文件创建 .control 文件创建 Makefile 文件 三、编译 & 链接四、psql&#xff08;或者其他PG backend&#xff09;中创建扩展 Post…

【C++杂货铺】探索string的底层实现

文章目录 一、成员变量二、成员函数2.1 默认构造函数2.2 拷贝构造函数2.3 operator2.4 c_str()2.5 size()2.6 operator[ ]2.7 iterator2.8 reserve2.9 resize2.10 push_back2.11 append2.12 operator2.13 insert2.14 erase2.15 find2.16 substr2.17 operator<<2.18 opera…

【微服务】spring 条件注解从使用到源码分析详解

目录 一、前言 二、spring 条件注解概述 2.1 条件注解Conditional介绍 2.2 Conditional扩展注解 2.2.1 Conditional扩展注解汇总 三、spring 条件注解案例演示 3.1 ConditionalOnBean 3.2 ConditionalOnMissingBean 3.2.1 使用在类上 3.2.2 使用场景补充 3.3 Condit…

jvm-类加载子系统

1.内存结构概述 类加载子系统负责从文件系统或网络中加载class文件&#xff0c;class文件在文件开头有特定的文件标识 ClassLoader只负责class文件的加载&#xff0c;至于它是否运行&#xff0c;则由Execution Engine决定 加载的类信息存放于一块称为方法区的内存空间&#xff…

什么是安全测试报告,怎么获得软件安全检测报告?

安全测试报告 软件安全测试报告&#xff1a;是指测试人员对软件产品的安全缺陷和非法入侵防范能力进行检查和验证的过程&#xff0c;并对软件安全质量进行整体评估&#xff0c;发现软件的缺陷与 bug&#xff0c;为开发人员修复漏洞、提高软件质量奠定坚实的基础。 怎么获得靠谱…

Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四)

Hadoop学习&#xff1a;深入解析MapReduce的大数据魔力之数据压缩&#xff08;四&#xff09; 4.1 概述1&#xff09;压缩的好处和坏处2&#xff09;压缩原则 4.2 MR 支持的压缩编码4.3 压缩方式选择4.3.1 Gzip 压缩4.3.2 Bzip2 压缩4.3.3 Lzo 压缩4.3.4 Snappy 压缩4.3.5 压缩…

学会Mybatis框架:让你的代码更具灵活性、可维护性、安全性和高效性【二.动态SQL】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Mybatis动态SQL如何应用 1.需求 2.…

分布式锁 总结

分布式锁 在应用开发中&#xff0c;特别是web工程开发&#xff0c;通常都是并发编程&#xff0c;不是多进程就是多线程。这种场景下极易出现线程并发性安全问题&#xff0c;此时不得不使用锁来解决问题。在多线程高并发场景下&#xff0c;为了保证资源的线程安全问题&#xff0…