网络其他重要协议(DNS、ICMP、NAT)

news/2024/7/22 11:59:24/文章来源:https://blog.csdn.net/weixin_74310945/article/details/139220122

1.DNS

DNS是一整套从域名映射到IP的系统

1.1 DNS背景

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆,例如我们想访问百度就会在浏览器中输入baidu.com而不是百度的IP地址。于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系。

最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的.

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

这样就太麻烦了, 于是产生了DNS系统.

  • 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系
  • 如果新计算机接入网络, 将这个信息注册到数据库中;
  • 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.

至今, 我们的计算机上仍然保留了hosts文件. 在域名解析的过程中仍然会优先查找hosts文件的内容

我们可以使用cat /etc/hosts命令来查看我们的hosts文件

1.2 域名简介

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称例如www.baidu.com

  • com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
  • baidu: 二级域名, 公司名.
  • www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.

1.3 域名解析过程

当我们使用浏览器输入一个url时,如何完成域名解析的过程。

  • 1.本地电脑会检查浏览器的DNS缓存中是否有这个url对应的IP地址,如果有整个解析过程结束。
  • 2.当浏览器中DNS缓存中没有找到,计算机就会到操作系统的DNS缓存(如内存中的DNS缓存或本地的hosts文件)中去找,如果能找到,整个解析过程结束。
  • 3.浏览器向本地配置的域名解析服务器发送查询请求。域名解析服务器一般由运营商提供,如果本地域名解析服务器中能找到,整个解析过程结束。本地域名解析服务器的地址通常通过DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)或手动设置获得。
  • 4.如果本地的域名解析服务器没有找到,那么就向根域名服务器发起查询请求。根域名服务器虽然不存储每个域名的具体信息,但它知道每个顶级域名(如.com, .net, .org等)的权威DNS服务器的地址。
  • 5.根DNS服务器会告诉本地DNS顶级域名服务器的IP地址。
  • 6.本地域名解析服务器根据根域名服务器返回的顶级域名服务器的地址,继续查询该顶级域名服务器。
  • 7.顶级域名服务器会返回该域名对应的权威DNS服务器的地址。
  • 8.本地域名解析服务器再向权威DNS服务器发起查询。
  • 9.得到该域名的IP地址。
  • 10.本地域名解析服务器将查询到的IP地址返回给操作系统,并同时缓存该结果,以便下次快速查询。操作系统将IP地址返回给浏览器,浏览器使用该IP地址进行网站访问。

1.4 dig分析DNS解析

  • 1. 开头位置是 dig 指令的版本号
  • 2. 第二部分是服务器返回的详情, 重要的是 status 参数, NOERROR 表示查询成功
  • 3. QUESTION SECTION 表示要查询的域名是什么
  • 4. ANSWER SECTION 表示查询结果是什么. 这个结果先将 www.baidu.com 查询成了 www.a.shifen.com, 再将www.a.shifen.com 查询成了两个 ip 地址.
  • 5. 最下面是一些结果统计, 包含查询时间和 DNS 服务器的地址等

2. ICMP协议

ICMP协议是一个 网络层协议

一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因

例如上图的主机A想要给主机B发送消息,如果主机B关机了,当数据到达主机B所在的局域网的路由器中时,路由器首先会在数据链路层构建ARP请求,问局域网中哪一台主机叫做主机B。但是主机B已经下线了,所以路由器注定是收不到ARP响应的,多次之后,路由器就会将zhujiA发送的消息丢弃了。

但是站在主机A的角度上来看,他并不会收到响应,如果传输层使用的是TCP协议,他会认为报文丢失了,或者网络发生拥塞了。于是继续重传报文。但是无论怎么传送都无济于事,因为对方已经下线了。

所以有了ICMP协议,当路由器多次ARP请求无果时,就会给主机A返回一个ICMP包,其中包含了数据包丢失的原因,主机A知道主机B已经下线了,就不会重发浪费资源了。

2.1 ICMP功能

  • 确认IP包是否成功到达目标地址.
  • 通知在发送过程中IP包被丢弃的原因.
  • ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
  • ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6

上图就是之前说的例子,主机A发送的数据到达主机B所在局域网的路由器2上,路由器2发起多次ARP请求,多次之后收不到响应就会给A返回一个ICMP包告诉主机A,主机B已经下线了。

2.2 ping命令

ping命令是基于ICMP协议实现的,通常用于测试本地主机与另一台主机之间的通信信道是否正常。

我们可以使用ping命令来测试一下与百度直接的通信信道。

  • 注意, 此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址.
  • ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期).
  • ping命令会先发送一个 ICMP Echo Request给对端;
  • 对端接收到之后, 会返回一个ICMP Echo Reply;

telnet是23端口, ssh是22端口, 那么ping是什么端口?

我们要明白,ping虽然是一个应用层服务,但是他其实是基于ICMP,也就是网络层的,也就是说他不会经过传输层,而是从应用层直接到达网络层(Linux网络编程中使用原始套接字)。

而端口号其实是传输层的概念(传输层为了区分该报文来自哪个进程已经将报文交给哪个进程),所以ping不会有端口号。

3. NAT技术

3.1 技术背景

IPv4协议中, IP地址数量严重不充足,NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能。

  • NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:
  • 很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
  • 全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;

3.2 NAT转换

现在客户端A想要给服务器发送消息,在局域网中A的IP地址为10.0.0.10,经过NAT路由器时,路由器会将10.0.0.10转化成一个公网IP202.244.174.37。

当服务器接受到该报文后,可以知道发送端的公网IP,也就可以知道响应时应该交给互联网上的哪一台主机了,服务器将响应发送给202.244.174.37.当数据包到达NAT路由器后,又会被转化回10.0.0.10了。

为什么不将10.0.0.10直接发送到公网,而是经过转换的过程

10.0.0.10属于私网,而私网是不能发送到公网当中的,因为在公网之下有很多个局域网,每个局域网中都可能存在一个10.0.0.10,如果直接发送到公网当中,那么无法分辨出这个数据属于谁的了。

为什么要使用私网,直接使用公网不行吗?

理论上来说,所有主机使用不同的IP地址就不要进行转换了,但是问题是IP地址严重不足了,IPV4的ip地址是32位的,也就是说最多能表示2的32次方个IP地址,也就是42亿9千万,但是仅仅中国目前14亿人口,每个人可能上网设备都不止一个。

为了解决IP不足的问题,才有了NAT技术,将IP地址分为公网IP和私网IP,私网IP可以相同。我们只需要给进入公网的路由器分配一个公网IP即可,这个路由器下的局域网使用私网IP,要访问外网直接通过路由器转换即可。

服务端响应IP为202.244.174.37,如何确定是哪一台主机发送的数据?

NAT路由器后会形成一张表,例如当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系,当数据回来时,只需要判断发送端的IP是163.221.120.9,就知道这个报文是发送给10.0.0.10这台主机的。

并且此表中不一定只存放IP,必要时会将端口号也保存起来。

我们会在下面的NAPT详谈

3.3 NAPT

如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?

这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系

这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项。

路由器接收到一个报文后,如何判断该报文交给哪个主机

因为NAT路由器生成了一张转化表,所以当收到一个报文后,我们只需要判断响应报文的发送端的IP地址和之前我请求报文的接受端地址是否相同即可。

比如10.0.0.10给163.221.120.9发送了一个请求报文,路由器就会记录下来,当收到一个报文,且他的发送端的IP是163.221.120.9,那我们就可以知道这个报文应该是发送给10.0.0.10这台主机的。

如果局域网中多台主机访问同一个服务器,响应报文中的发送端IP都相同,那么此时如何分辨出这个报文是谁请求的。

NAT转化表中不仅仅会保存IP还会保存端口号,端口号的作用就体现在这里了,我们仔细观察一下转化表。

  • 若主机A发送的报文先到达路由器,那么路由器会将报文的源IP地址替换成自己的WAN口IP地址,由于路由器用于访问该服务器的1025号端口没有被使用,因此该数据包的源端口号可以不变。
  • 当主机B发来的数据包到达路由器时,路由器同样将数据包的源IP地址替换成自己的WAN口IP地址,但此时路由器用于访问该服务器的1025号端口已经被主机A使用了,因此路由器会重新选定一个端口号对数据包的源端口号进行替换。

3.4 NAT的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:

  • 无法从NAT外部向内部服务器建立连接;
  • 装换表的生成和销毁都需要额外开销;
  • 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开

虽然说这是NAT的缺陷,但是也在一定程度上保护了内网的主机,因为内网主机不访问外网,外网是无法访问到内网的。

3.5 NAT和代理服务器

正向代理

正向代理,是一个位于客户端和目标服务器之间的服务器,客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端。

正向代理服务器的好处就是加快了访问速度,正向代理服务器可以把服务器资源提前缓存一部分,下次客户端再来请求这个资源时,直接从正向代理服务器中拿,而不需要再到服务器了。

反向代理

反向代理,也是一个位于客户端和目标服务器之间的服务器,客户端直接向反向代理服务器发起数据请求,然后再由反向代理服务器将客户端的数据请求转发给真正的目标服务器进行处理,数据处理完毕后反向代理服务器再将数据结果返回给客户端。

例如我们熟知的baidu.com其实就是访问反向代理服务器。当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据处理,然后再将数据处理的结果返回给客户端。

反向代理服务器的好处:

  • 负载均衡:反向代理服务器可以将客户端请求分发到多个实际服务器上,从而平衡服务器的负载,提高系统的可伸缩性和可靠性。
  • 安全性::通过在反向代理服务器上配置防火墙和安全策略,可以保护实际服务器免受未经授权的访问和攻击。

代理服务器的主要工作只是对数据进行转发,因此代理服务器处理数据的压力不会特别大,并且代理服务器也可以有多个,因此不必担心代理服务器过载的情况。

正向代理和反向代理

相同点:

  1. 正向代理和反向代理都位于客户端和真实服务器之间
  2. 它们的主要作用都是将客户端的请求转发给服务器,并将服务器的响应转发回客户端。

不同点:

  1. 正向代理:代表客户端执行请求,接收来自客户端的请求,并转发这些请求到目标服务器,然后再将服务器返回的结果返回给客户端。客户端知道实际请求的目标服务器地址,而目标服务器并不知道请求的来源。
  2. 反向代理:代表服务器接收请求,接收来自客户端的请求,并转发这些请求到内部网络中的某个服务器(如Web服务器),然后将服务器的响应返回给客户端。客户端并不知道实际响应的服务器地址,只知道它正在与反向代理服务器交互。
  3. 正向代理使用场景::通常用于客户端需要访问无法直接访问的网络资源时,如VPN(虚拟私人网络)服务,或者出于安全和隐私考虑,隐藏客户端的真实IP地址。
  4. 反向代理使用场景::常用于负载均衡、内容缓存、安全过滤等场景。例如,多个Web服务器可以使用反向代理进行负载均衡,确保请求被均匀地分发到各个服务器上。

NAT和代理服务器

路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程.

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

那么NAT和代理服务器的区别有哪些呢?

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

4. 网络协议总结

4.1 应用层

  • 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层能
  • 够根据自己的需求, 设计应用层协议.
  • 了解HTTP协议.
  • 理解DNS的原理和工作流程

4.2 传输层

  • 传输层的作用:负责为两个网络通信进程之间的通信提供服务,更多的是为数据的传输提供一些策略。
  • 理解端口号的概念。
  • 认识TCP协议,理解TCP协议的可靠性,理解TCP协议的状态转化。
  • 掌握TCP的连接管理、确认应答、超时重传、滑动窗口、流量控制、拥塞控制、延迟应答、捎带应答特性。
  • 理解TCP面向字节流,理解粘包问题和解决方案。
  • 能够基于UDP实现可靠传输。
  • 理解MTU对UDP/TCP的影响。

4.3 网络层

  • 网络层的作用:在复杂的网络环境中确定一条合适的路径。
  • 理解IP地址,理解IP地址和MAC地址的区别。
  • 理解IP协议格式。
  • 理解如何解决IP数目不足的问题,掌握网段划分的两种方案,理解私有IP和公网IP。
  • 理解网络层的IP地址路由过程,理解一个数据包如何跨网段到达最终目的地。
  • 理解IP数据包分片的原因。
  • 了解ICMP协议。
  • 了解NAT设备的工作原理。

4.4 数据链路层

  • 数据链路层的作用:负责局域网内两个设备之间的数据传递。
  • 理解以太网通信原理
  • 以太网帧格式。
  • 理解MAC地址。
  • 理解ARP协议。
  • 理解MTU。

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

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

相关文章

BFS解决最短路问题(详解)

目录 BFS简介 && 框架: 一.二叉树的最小深度 二:迷宫中里入口最近的出口: 三.最小基因变化: 四:单词接龙: ​五:为高尔夫比赛砍树: BFS简介 && 框架: 说到BFS…

在C++中自定义命名空间,在命名空间中定义string变量,同时定义一个函数实现单词逆置

代码 #include <iostream> #include <cstring> using namespace std; namespace my_space {string s;void reverse(string s);//定义逆置函数 } using namespace my_space; void my_space::reverse(string s){int lens.size();int i0;int jlen-1;while(i<j){//…

CIM模型

CIM 是 Esri 制图信息模型。 它是一个地图内容规范,用于记录在保存、读取、引用或打开时如何永久保留描述不同项目组件的信息。 该规范以 JSON 表示,适用于 ArcGIS 应用程序和 API 中的地图、场景、布局、图层、符号和样式。 CIM 不仅限于制图设置。 要了解属性的组织方式以及…

如何停止 iPad 和 iPhone 之间共享短信,独立接收和发送消息

概括 在当今高度互联的数字世界中&#xff0c;Apple 设备之间的无缝连接性提供了极大的便利&#xff0c;尤其是在消息同步方面。iPhone 和 iPad 用户通常可以享受到设备间短信的自动同步功能&#xff0c;这意味着无论是在哪个设备上&#xff0c;用户都可以接收和回复消息。然而…

六.逼格拉满-Prometheus+Grafana微服务监控告警

前言 微服务架构是一个分布式系统&#xff0c;由多个独立的服务组成&#xff0c;每个服务可能运行在不同的容器、虚拟机或物理机上&#xff0c;那么在生产环境中我们需要随时监控服务的状态&#xff0c;以应对各种突发情况&#xff0c;比如&#xff1a;内存爆满&#xff0c;CP…

【Oracle篇】rman工具实用指南:常用命令详解与实践(第二篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

[NISACTF 2022]easyssrf、[NISACTF 2022]level-up

[NISACTF 2022]easyssrf 使用dirsearch扫描后没发现什么路径 尝试访问127.0.0.1&#xff0c;成功了 访问127.0.0.1/flag.php提示有文件/fl4g 使用file://协议读取文件/fl4g&#xff0c;提示除此页面外还有一个ha1x1ux1u.php页面。 file:///fl4g 直接访问&#xff0c;发现GET…

google浏览器下载和相应驱动下载

1、chromedriver 115及115之后版本下载地址&#xff1a; https://googlechromelabs.github.io/chrome-for-testing/ 2、chromedriver 115之前版本下载地址&#xff08;已停止更新115及之后版本&#xff09;&#xff1a; http://chromedriver.storage.googleapis.com/index.html…

PVE 虚拟机环境下删除 local-lvm分区

1、删除逻辑卷 lvremote pve/data 2、扩展逻辑卷 lvextend -l 100%FREE -r pve/root 3、 修改存储目录内容 点击 Datacenter - Storage &#xff08;1&#xff09;删除local-lvm分区 &#xff08;2&#xff09;编辑local分区&#xff0c;在内容一项中勾选所有可选项。

python数据处理与分析入门-Pandas数据可视化例子

相关内容 Matplotlib可视化练习 Pandas 数据可视化总结 柱状图 reviews[points].value_counts().sort_index().plot.bar()散点图 reviews[reviews[price] < 100].sample(100).plot.scatter(xprice, ypoints)蜂窝图 reviews[reviews[price] < 100].plot.hexbin(xprice…

C++:vector基础讲解

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;vector基础讲解》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#…

分类和品牌关联

文章目录 1.数据库表设计1.多表关联设计2.创建表 2.使用renren-generator生成CRUD1.基本配置检查1.generator.properties2.application.yml 2.生成代码1.进入localhost:81生成代码2.将main目录覆盖sunliving-commodity模块的main目录 3.代码检查1.注释掉CategoryBrandRelationC…

沃飞携AE200真机亮相澳门,全方位赋能城市低空出行

5月22日-25日&#xff0c;第四届BEYOND国际科技创新博览会&#xff08;BEYOND Expo 2024&#xff09;在澳门盛大举行。吉利沃飞长空携旗下全自研产品AE200真机亮相&#xff0c;吸引了现场众多领导嘉宾以及媒体、观众的关注。 作为亚洲顶尖的年度科技盛会&#xff0c;本届BEYOND…

面试-软件工程与设计模式相关,Spring简介

面试-软件工程与设计模式相关&#xff0c;Spring简介 1.编程思想1.1 面向过程编程1.2 面向对象编程1.2.1 面向对象编程三大特征 1.3 面向切面编程1.3.1 原理1.3.2 大白话&#xff1f;1.3.3 名词解释1.3.4 实现 2. 耦合与内聚2.1 耦合性2.2 内聚性 3. 设计模式3.1 设计模型七大原…

nodejs安装配置

nodejs安装 打开nodejs官网(https://nodejs.org/en/download/package-manager)&#xff0c;参考安装步骤操作。 更新镜像源 输入以下命令&#xff0c;将npm的镜像源设置为淘宝镜像。网上资料中&#xff0c;淘宝镜像地址多为https://registry.npm.taobao.org&#xff0c;这个…

js之图片上传

话不多说&#xff0c;直接上干货&#xff0c;注释在代码里面 下面是效果图和代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

景源畅信:新手做抖音运营难不难?

在这个信息爆炸的时代&#xff0c;社交媒体平台如抖音已经成为了人们日常生活中不可或缺的一部分。随着抖音的兴起&#xff0c;越来越多的人开始尝试进入这个领域&#xff0c;希望通过抖音运营实现自己的价值。然而&#xff0c;对于新手来说&#xff0c;抖音运营是否真的容易呢…

现代前端工程化实践:Git、Husky、Commitlint与PNPM的协同作战

引言 Git Husky 与 Commitlint 是两个在 Git 工作流程中非常实用的工具&#xff0c;它们可以帮助团队维护代码质量和提交规范。Husky 是一个 Git 钩子管理器&#xff0c;允许你在仓库级别方便地配置钩子脚本&#xff1b;而 Commitlint 则是用来规范 Git 提交信息的工具&#x…

Bootstrap5

Bootstrap5-容器 容器是Bootstrap—个基本的构建块&#xff0c;它包含、填充和对齐给定设备或视口中的內容。 Bootstrap 需要一个容器元素来包裏网站的内容 我们可以使用以下两个容器类&#xff1a; .container 类用于固定宽度并支持响应式布局的容器。.container-fluid 类用…

左外连接和右外连接的区别?举例说明——以力扣sql 1378. 使用唯一标识码替换员工ID为例

左外连接&#xff08;LEFT JOIN&#xff09;和右外连接&#xff08;RIGHT JOIN&#xff09;的主要区别在于哪个表的所有行会保留在结果集中 1. 左外连接 (LEFT JOIN) 左外连接会返回左表中的所有行以及右表中符合连接条件的行。如果右表中没有匹配的行&#xff0c;结果集中右…