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

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.rhkb.cn/news/333371.html

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

相关文章

词条唤夜兽唤夜兽的养殖与护理 幻兽帕鲁 唤夜兽怎么获取 唤夜兽去哪里抓 crossover玩Steam游戏

唤夜兽在地图上没有出现,是唤冬兽和雷冥鸟共同培育出来的帕鲁。 ------------------------- 介绍: 帕洛斯群岛之守护神,拥呼唤黑夜之力。 其会于灾厄席捲大地之际腾空而起,唤来无尽暗夜,试图封印灾厄。 ---------…

【开源】加油站管理系统 JAVA+Vue.js+SpringBoot+MySQL

目录 一、项目介绍 论坛模块 加油站模块 汽油模块 二、项目截图 三、核心代码 一、项目介绍 Vue.jsSpringBoot前后端分离新手入门项目《加油站管理系统》,包括论坛模块、加油站模块、汽油模块、加油模块和部门角色菜单模块,项目编号T003。 【开源…

猫狗分类识别模型建立①数据标记

一、labelImg库说明 LabelImg是一款非常流行的图像标注工具,广泛用于机器学习和计算机视觉领域。以下是关于LabelImg的详细介绍: 主要功能和特点 1.图像标注 允许用户在图像中标注物体,选择特定区域,并为这些区域添加标签或类…

Python考试复习--day2

1.出租车计费 mile,waitmap(int,input().split(,)) if mile<3:money13wait*1 elif mile>3 and mile<15:money13(mile-3)*2.3wait*1 else:money1312*2.3(mile-15)*2.3*(10.5)wait*1 print({:.0f}.format(money)) 【知识点1】&#xff1a; map() 函数 【知识点1】&…

大模型效能工具之智能CommitMessage

01 背景 随着大型语言模型的迅猛增长&#xff0c;各种模型在各个领域的应用如雨后春笋般迅速涌现。在研发全流程的效能方面&#xff0c;也出现了一系列贯穿全流程的提效和质量工具&#xff0c;比如针对成本较高的Oncall&#xff0c;首先出现了高质量的RAG助手&#xff1b;在开…

【Java继承】(超级详细!!!)

【Java继承】&#xff08;超级详细&#xff01;&#xff01;&#xff01;&#xff09; 1、 继承的概念2 、继承的语法3、 父类成员访问3.1 子类中访问父类的成员变量3.2 子类中访问父类的成员方法 4、 super关键字5 、子类的构造方法6、 继承关系上的执行顺序7、protected 关键…

华为机考入门python3--(31)牛客31-单词倒排

分类&#xff1a;字符串、正则 知识点&#xff1a; 正则提取所有符合的字符串 words re.findall(r[a-zA-Z], sentence) 列表倒序 words[::-1] 题目来自【牛客】 import re # 导入正则表达式模块def reverse_words(sentence):# 使用正则表达式将句子拆分成单词# 如可以将…

Xinstall地推效果大揭秘:洞察用户需求,创新营销策略不再是难题

在互联网流量红利逐渐衰退的今天&#xff0c;企业如何快速搭建起满足用户需求的运营体系&#xff0c;成为了亟待解决的问题。特别是在地推领域&#xff0c;如何在多变的互联网环境下&#xff0c;迅速、有效地触达用户&#xff0c;扩大目标用户基数和流量池&#xff0c;成为了企…

堆结构知识点复习——玩转堆结构

前言:堆算是一种相对简单的数据结构&#xff0c; 本篇文章将详细的讲解堆中的知识点&#xff0c; 包括那些我们第一次学习堆的时候容易忽略的内容&#xff0c; 本篇文章会作为重点详细提到。 本篇内容适合已经学完C语言数组和函数部分的友友们观看。 目录 什么是堆 建堆算法…

【吊打面试官系列】Java高并发篇 - ConcurrentHashMap 的并发度是什么?

大家好&#xff0c;我是锋哥。今天分享关于 【ConcurrentHashMap 的并发度是什么?】面试题&#xff0c;希望对大家有帮助&#xff1b; ConcurrentHashMap 的并发度是什么? ConcurrentHashMap 的并发度就是 segment 的大小&#xff0c;默认为 16&#xff0c; 这意味着最多同时…

算法刷题day54:搜索(一)

目录 引言一、池塘计数二、城堡问题三、山峰和山谷四、迷宫问题五、武士风度的牛六、抓住那头牛七、矩阵距离八、魔板 引言 针对于蓝桥杯&#xff0c;搜索问题还是非常之重要的&#xff0c;在省赛前深知暴搜的重要性&#xff0c;所以提前先把提高课的搜索一章给看了&#xff0…

单链表OJ题(课堂总结)

1.链表的带环问题 上图就是一个典型的带环链表 1.1如何判读链表是否带环&#xff1f; 最常见的方法就是利用快慢指针&#xff0c;快指针追加慢指针&#xff0c;当二者相等的时候即可判断链表带环 其实现的代码如下&#xff1a; bool hasCycle(struct ListNode*head) { s…

【爬虫软件】2024最新短视频评论区抓取工具

一、背景说明 1.0 采集目标 采集DOU音评论数据对引流截流和获客有很多好处。首先&#xff0c;通过分析DOU音评论数据&#xff0c;我们可以更好地了解用户对于产品或内容的喜好和需求&#xff0c;从而调整营销策略&#xff0c;吸引更多用户关注和点击。其次&#xff0c;评论数据…

小而美的前端库推荐

小而美&#xff0c;指的是“小即是美”的事物&#xff0c;这是马云在 2009年 APEC 中小企业峰会上首次提出的观点 &#x1f44d; 前端有很多小而美的库&#xff0c;接入成本很低又能满足日常开发需求 &#x1f389;

StringMVC

目录 一&#xff0c;MVC定义 二&#xff0c;SpringMVC的基本使用 2.1建立连接 - RequestMapping("/...") ​编辑 2.2请求 1.传递单个参数 2.传递多个参数 3.传递对象 4.参数重命名 5.传递数组 6. 传递集合 7.传递JSON数据 8. 获取url中数据 9. 传递文…

深度学习中的多GPU训练(Pytorch 20)

一 多GPU训练 下面详细介绍如何从零开始并行地训练网络&#xff0c;这里需要运用小批量随机梯度下降算法。后面我还讲介绍如何使用高级API并行训练网络。 我们从一个简单的计算机视觉问题和一个稍稍过时的网络开始。这个网络有多个卷积层和汇聚层&#xff0c;最后可能 有几个…

Android:将时间戳转换为本地时间格式

一、效果图 图1&#xff0c;中国的时间格式 图2&#xff0c;美国的时间格式 二、StringUtil.kt代码 import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* object StringUtil {fun formatTimestamp(currentTime: Long): String {var sdf Si…

dolphinscheduler standalone安装

官方文档&#xff1a;https://dolphinscheduler.apache.org/en-us/docs/3.1.3/guide/installation/standalone 1.安装&#xff08;以放在/home为例&#xff09; 下载见&#xff1a;https://download.csdn.net/download/taotao_guiwang/89311365 tar -xvzf apache-dolphinsche…

美团Java社招面试题真题,最新面试题

如何处理Java中的内存泄露&#xff1f; 1、识别泄露&#xff1a; 使用内存分析工具&#xff08;如Eclipse Memory Analyzer Tool、VisualVM&#xff09;来识别内存泄露的源头。 2、代码审查&#xff1a; 定期进行代码审查&#xff0c;关注静态集合类属性和监听器注册等常见内…

C++ 数据结构算法 学习笔记(33) -查找算法及企业级应用

C 数据结构算法 学习笔记(33) -查找算法及企业级应用 数组和索引 日常生活中&#xff0c;我们经常会在电话号码簿中查阅“某人”的电话号码&#xff0c;按姓查询或者按字母排 序查询&#xff1b;在字典中查阅“某个词”的读音和含义等等。在这里&#xff0c;“电话号码簿”和…