【Linux 网络】网络基础(三)(其他重要协议或技术:DNS、ICMP、NAT)

一、DNS(Domain Name System

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

1、DNS 背景

TCP/IP 使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但是 IP 地址不方便记忆。于是人们发明了一种叫主机名的东西,是一个字符串,并且使用 hosts 文件来描述主机名和 IP 地址的关系

  • DNS 是应用层协议
  • DNS 底层使用 UDP 进行解析
  • 浏览器会缓存 DNS 结果
最初,通过互连网信息中心(SRI-NIC)来管理这个 hosts 文件的。如果一个新计算机要接入网络,或者某个计算机 IP 变更,都需要到信息中心申请变更 hosts 文件。其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网。这样就太麻烦了,于是产生了 DNS 系统。
  • 一个组织的系统管理机构,维护系统内的每个主机的 IP 和主机名的对应关系。
  • 如果新计算机接入网络,将这个信息注册到数据库中。
  • 用户输入域名的时候,会自动查询 DNS 服务器,由 DNS 服务器检索数据库,得到对应的 IP 地址。

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

查看 hosts 文件内容命令:cat /etc/hosts


2、域名简介

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

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

3、域名解析服务

为什么要有域名呢?

域名可以让用户用起来更方便,辨识度更高。

例如:百度的域名是 36.152.44.96,但是这对普通人来说不友好,还是 www.baidu.com 对普通人友好。

但是这个影响的范围太小了,所以后来就有了组织把全世界的主机名和 IP 地址的映射关系全部写成了一套网络服务,这个网络服务允许任何人请求,然后把域名转换成 IP 地址返回去。也叫做域名解析服务

通过域名得到 IP 地址后才向网络发起请求,这个工作是我们自己安装的软件完成的。


4、从输入网址到获得页面的过程

浏览器中输入 url 后,会发生什么事情?
  1. DNS 解析获得 IP 地址。
  2. 浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起三次握手。
  3. TCP/IP 链接建立起来后,浏览器向服务器发送 HTTP 请求。
  4. 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器。
  • 回答整体结构,重点放在应用层 HTTP、HTTPS,部分涉及到 TCP。

拿 HTTP 来说,首先浏览器要想办法进行三次握手,先把连接建立好,紧接着浏览器要结合用户请求构建 HTTP 请求。HTTP 请求里面涉及到 HTTP 格式,构建一个 HTTP request,该 request 经过已经建立好的 TCP 连接,将连接推送至服务器,之后服务器经过我们的对应的读将请求全部读至应用层,读上来之后对 HTTP 请求做分析,提取我们要访问的资源和该次请求对应的请求方法。进而定位到对应资源,在服务端将资源打开。通过服务器的方式构建 HTTP 响应,将 HTTP 响应再通过网络推送给浏览器端,浏览器端拿到响应后,也正常进行读取,读取到完整的响应,然后对响应的报头和有效载荷进行解析。尤其是对报头解析出来,请求内容、返回内容,假设是一张网页,把网页交给浏览器,浏览器再对网页内容进行解释,最后就可以呈现出网页的效果。

应用层:介绍 HTTP 协议的请求(构建和发送过程)和响应格式,建立好连接后就可以交换请求和响应,有些浏览器在请求之前可能要先做 DNS 域名解析,得到 IP 后才能向目的 IP 和目的端口发送请求,关于请求有 GET 和 POST 方法。关于请求和响应里面常见的字段有:状态码,Cookie 和 Session。以及序列和反序列化、读取到完整报文(数据包粘包问题)。

然后关于连接的过程和信息传输的过程可能出现问题(数据丢包、拥塞控制、数据路由),然后就可以讲下面几层。

可以参考:当你在浏览器地址栏输入一个URL后回车,将会发生的事情?_url在浏览器 按下回车 七层协议-CSDN博客


5、使用 dig 工具分析 DNS 过程

(1)安装 dig 工具

命令:sudo yum install bind-utils


(2)使用 dig 指令查看域名解析过程

结果解释:
  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 服务器的地址等。
更多 dig 的使用方法,可以参考: Linux dig 命令使用方法-CSDN博客

二、ICMP 协议

ICMP 协议是一个网络层协议

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


1、ICMP 功能

IP 协议不仅仅要有通信能力,还需要有故障排查能力。

ICMP 是一个处于网络层和传输层之间的协议,它主要是用来确认报文是否丢失

ICMP 的主要功能包括:

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

比方说主机 A 和主机 B 之间有多个路由器,但是数据在最后一个路由器到达不了 B,此时这路由器就会多次发送 ARP 请求如果还得不到应答,最后就会返回信息给主机 A。此时主机 A就知道自己发送的数据无法到达主机 B。


2、ICMP 的报文格式(了解)

ICMP  大概分为两类报文:
  1. 一类是通知出错原因。
  2. 一类是用于诊断查询。


3、ping 命令

(1)Windows 下


(2)Linux 下


注意

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

所以,ping 命令底层是通过 ICMP 协议设置 TTL(跳数)来检测网络连通性。


3、ping 的端口号(注意)

telnet 对应的端口号是 23,ssh 对应的端口号是 22,那么 ping 对应的端口号是多少呢?

ping 命令基于 ICMP,是在网络层,而端口号是传输层的内容。在 ICMP 中根本就不关注端口号这样的信息,所以 ping 根本没有端口号,ping 命令实际是绕过了传输层的直接访问底层 ICMP 协议的一种做法。


4、traceroute 命令

也是基于 ICMP 协议实现,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器。


三、NAT 技术

1、NAT 技术背景

在讲 IP 协议的时候说过 IPv4 协议的 IP 地址数量不足的问题,而 NAT 技术就是当前解决 IP 地址不够用的主要手段,是路由器的一个重要功能。

NAT(网络地址转换)技术,是解决 IP 地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

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

2、NAT IP 转换过程

  • NAT 路由器将源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37。
  • NAT 路由器收到外部的数据时,又会把目标 IP 从 202.244.174.37 替换回 10.0.0.10。
  • 在 NAT 路由器内部,有一张自动生成的,用于地址转换的表。
  • 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系。

(1)数据包从局域网到公网的过程

这个在之前的 IP 协议的网段划分讲过,其实就是当数据包到达家用路由器的时候,路由器会把源 IP 替换成 WAN 口 IP

此时目标服务器收到了数据包,然后构成响应,现在要返回给我们自己的主机,但是这个响应信息只能返回到运营商路由器,那么如何从运营商服务器转发到我们自己的主机呢?

因为一个局域网内多台主机都同时访问一台外网服务器,此时服务器返回的数据中所有的目的IP都是相同的(发送的过程替换了源 IP),所以就不知道返回给局域网中哪台主机(路由器)了。


3、NAPT(地址转换表)

如果局域网内有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的 IP 都是相同的。那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机?
NAPT 就能很好的解决数据返回的问题, 使用 IP + port  来建立这个关联关系。

  1. 其实路由器在进行源地址转换过程中,可能不仅仅只改变了源 IP,必要的时候,源端口也要被替换,还维护了一张地址转化表
  2. 路由器在 NAT 转换的过程中,除了单纯的替换,还会为我们根据报文请求的四元组,为我们构建一个映射关系。
  3. 源 IP 表示唯一的一台主机,源端口表示该主机上唯一的一个进程,所以 源 IP + 源端口表示唯一的一个进程 —— 自己在自己的内网中的唯一性。
  4. 无论从内向外,还是从外向内,都能在各自的网络中表示唯一性。所以,这个映射关系是互为 key 值得。
如果从来没有访问过外网,那外网可以直接访问内网吗?

理论上来说是不能得。但是有很多基于 NAT 原理的软件可以帮助我们进行从外网访问内网 —— 内网穿透。

这两个家用路由器在转发到运营商路由器的时候,此时运营商路由器就会建立地址转化表:

左侧表里面的就是 IP:端口的四元组形式,标识了局域网内的唯一一台主机
右侧就是替换完成后的源地址和目标地址。

这样就构成了一组互为键值的映射表

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

这里讲一以下端口号相同的问题,有可能同一个局域网的两台主机用的同一个客户端(有相同的端口号)相同, 此时进过外网路由器,要替换源 IP,这样就导致了区分不了这两台主机了。解决办法就是向外转发的时候发现两个主机有相同的端口号,那么就在转发出去的时候改变端口号。

所以,NAT 路由器除了做 WAN 口 IP 的替换,还会进行端口号的替换。

在数据进行转发的时候每个路由器都会维护一张 NAPT 地址转换表。

如果一台主机从来都没有访问过外网的服务器,那么这个服务器能够找到这台主机吗?

不能,因为路由器没有建立映射关系,所以找不到。
无法从 NAT 外部向内部服务器建立连接,因为外部无法知道内部的私网 IP,也就无法主动与内部服务器建立连接。


4、NAT 技术的缺陷

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

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

5、NAT 和代理服务器

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

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


(1)代理服务器

代理服务器的功能就是代理网络用户去取得网络信息,代理服务器又分为正向代理和反向代理。

代理服务器是一种应用比较广的技术。

  • 翻墙:广域网中的代理。
  • 负载均衡:局域网中的代理。

举例帮助理解:花王尿不湿是产自日本的一个很经典的尿不湿品牌。张三去日本买尿不湿不方便,但是可以让他在日本工作的表姐去超市买了快递给他。此时超市看到的买家是张三的表姐,张三的表姐就是是 “正向代理”。后来找张三表姐买尿不湿的人太多了,他表姐觉得天天去超市太麻烦,干脆去超市买了一大批尿不湿屯在家里,如果有人来找她代购,就直接把屯在家里的货发出去,而不必再去超市,此时张三表姐就是 “反向代理”。

正向代理用于请求的转发( 例如借助代理绕过反爬虫) 反向代理往往作为一个缓存。

A. 正向代理

客户端并不直接访问目标服务器,而是访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端

当多台主机都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他主机要访问该资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。


B. 反向代理

对于客户端而言,反向代理服务器就相当于目标服务器,它不做任何业务的处理,只负责将请求推送到后端的指定主机。用户不需要知道目标服务器的地址,用户只需要访问反向代理服务器就可以获得目标服务器提供的服务

比如域名 www.baidu.com 对应的服务器实际就是一个反向代理服务器。

百度内部实际并不是只有一台服务器,但不同地区的人们都可以通过访问 www.baidu.com 享受到百度提供的服务,实际我们访问的就是百度的反向代理服务器。

当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据处理,然后再将数据处理的结果返回给客户端。


C. 正向代理和反向代理的关系

对于客户端而言,离客户端近的就是正向代理,离服务端近的就是反向代理

正向代理代理的是客户端,反向代理代理的是服务端,一个为客户端服务,一个为服务端服务,在区别上非常明显,如下图:

不同点

正向代理是客户端的代理,帮助客户端访问其无法访问的服务器资源的,而反向代理则是服务器的代理,帮助服务器做负载均衡、安全防护等工作的。
正向代理中,服务器不知道真正的客户端到底是谁,服务器认为正向代理服务器就是真实的客户端,而反向代理中,客户端不知道真正的服务器是谁,客户端认为反向代理服务器就是真实的服务器。


(2)NAT 和代理服务器的区别

NAT 和代理服务器都是代替我们向服务器发起数据请求的,但它们有如下区别:

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

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

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

相关文章

学习笔记——网络参考模型——TCP/IP模型

二、TCP/IP模型 TCP/IP模型(TCP/IP协议栈):很多个互联网协议的集合,其中以TCP和IP为主,将这些协议的集合称为TCP/IP协议栈。目前使用最多的协议模型。 因为OSI协议栈比较复杂,且TCP和IP两大协议在业界被广泛使用,所以…

JavaScript 动态网页实例 —— 窗口控制

除了打开和关闭窗口之外,还有很多其他控制窗口的方法。例如,可以使用 window.focus()方法使窗口获得焦点,也可以利用与其相对的window.blur 方法使窗口失去焦点。本节介绍移动窗口、改变窗口大小、窗口滚动、窗口超时操作、常用窗口事件、常用窗口扩展等窗口控制的方法和手段。…

[每周一更]-(第99期):MySQL的索引为什么用B+树?

文章目录 B树与B树的基本概念B树(Balanced Tree)B树(B-Plus Tree)对比 为什么MySQL选择B树1. **磁盘I/O效率**2. **更稳定的查询性能**3. **更高的空间利用率**4. **并发控制** 其他树结构的比较参考 索引是一种 数据结构&#x…

LeeCode热题100(两数之和)

本文纯干货,看不懂来打我! 自己先去看一下第一题的题目两数之和:. - 力扣(LeetCode) 简单来说就是让你在一个数组里面找两个数,这两个数的和必须满足等于目标值target才行。 我认为你要是没有思路的话&a…

营造科技展厅主题氛围,多媒体应用有哪些新策略?

长久以来,展厅作为线下向公众传递信息的窗口,其设计风格与内容主题紧密相连,展现出千姿百态的面貌。然而,随着数字多媒体技术的日新月异,展厅不再仅仅是传统的信息展示平台,而是成为了引领内容展示潮流的风…

【Git】git合并分支指定内容到主分支

git合并分支指定内容到主分支 在现实开发中,往往需要合并分支内容,如下图: 我们平时在其他分支修改了部分代码,如何将分支部分代码合并到主分支上面呢? 合并步骤: 1、切换当前到主分支 git checkout m…

大型制造业集团IT信息化总体规划方案(65页PPT)

方案介绍: 本大型制造业集团IT信息化总体规划方案旨在通过构建先进、高效、稳定的IT信息化系统,支撑集团各业务领域的运营和管理需求,促进集团整体运营效率和竞争力的提升。通过实施本项目,集团将能够更好地应对市场变化和客户需…

python绘制piper三线图

piper三线图 Piper三线图是一种常用于水化学分析的图表,它能够帮助我们理解和比较水样的化学成分。该图表由三个部分组成:两个三角形和一个菱形。两个三角形分别用于显示阳离子和阴离子的相对比例,而菱形部分则综合显示了这些离子比例在水样…

十四天学会Vue——Vue 组件化编程(理论+实战)(第四天)

二、 Vue组件化编程 2.1 组件化模式与传统方式编写应用做对比: 传统方式编写应用 依赖关系混乱,不好维护:例如:比如需要引入js1,js2,js3,但是js3需要用到js1、2的方法,所以js1、2…

掌控未来,爱普生SR3225SAA用于汽车钥匙、射频电路的智慧引擎

为了响应市场需求,Epson使用独家QMEMS*2技术所生产的石英振荡器,与其精巧的半导体技术所制造的射频传输器电路,开发了SR3225SAA。不仅内建的石英震荡器之频率误差仅有2 ppm,更使其封装尺寸达仅3.2 mm x 2.5 mm,为客户大…

C#中接口的显式实现与隐式实现及其相关应用案例

C#中接口的显式实现与隐式实现 最近在学习演化一款游戏项目框架时候,框架作者巧妙使用接口中方法的显式实现来变相对接口中方法进行“密封”,增加实现接口的类访问方法的“成本”。 接口的显式实现和隐式实现: 先定义一个接口,接口…

dolphinscheduler docker部署海豚mysql版本,docker重新封装正在运行服务为镜像

1.官方文档: https://dolphinscheduler.apache.org/zh-cn/docs/3.2.1/guide/installation/standalone#%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93 2.github: dolphinscheduler/docs/docs/zh/guide/howto/datasource-setting.md at 3.2.1-release apache/do…

对于vsc中的vue命令 vue.json

打开vsc 然后在左下角有一个设置 2.点击用户代码片段 3.输入 vue.json回车 将此代码粘贴 &#xff08;我的不一定都适合&#xff09; { "vue2 template": { "prefix": "v2", "body": [ "<template>", " <…

Ubuntu中PDF阅读器和编辑器

1. 福昕PDF编辑器 1.1. 下载地址 PDF阅读器下载_PDF编辑器下载_PDF软件官方下载_福昕软件官网 1.2. 安装 sudo dpkg -i signed_com.foxit.foxitpdfeditor_xxx_amd64_UOS.deb 2. WPS DPF 2.1. 下载地址 WPS Office 2019 for Linux-支持多版本下载_WPS官方网站 2.2. 使用 …

基于ES安装IK分词插件

前言 IK分词器插件是为Elasticsearch设计的中文分词插件&#xff0c;由Elasticsearch的官方团队之外的开发者medcl开发。它主要针对中文文本的分词需求&#xff0c;提供了较为准确的中文分词能力。以下是IK分词器插件的一些特点&#xff1a; 智能分词&#xff1a;IK分词器采用基…

每天学点小知识:WSL安装Ubuntu 22.04 LTS

前言 本章教会你在不使用虚拟机下使用linux&#xff0c;但是这里建议还是使用虚拟机&#xff0c;或者装一双系统&#xff0c;wsl使用linux还是有很多问题的。 1. 简介WSL WSL&#xff08;Windows Subsystem for Linux&#xff09;是微软为Windows 10及以上版本开发的一项功能…

[AIGC] Java常用的JSON库及简单示例

Java常用的JSON库及简单示例 在Java的世界里&#xff0c;JSON库广泛用于日常开发工作&#xff0c;本文将介绍几个常用的JSON库并配以简单的示例代码。 1. Gson Gson是Google提供的一个用来在Java对象和JSON数据之间进行转换的Java库。 它有一定的学习曲线&#xff0c;但一旦熟…

Redis用GEO实现附近的人功能

文章目录 ☃️概述☃️命令演示☃️API将数据库表中的数据导入到redis中去☃️实现附近功能 ☃️概述 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。…

淘宝镜像的https证书过期

错误原因&#xff1a; 淘宝镜像过期 早在 2021 年&#xff0c;淘宝就发文称&#xff0c;npm 淘宝镜像已经从 http://registry.npm.taobao.org 切换到了 http://registry.npmmirror.com。旧域名也将于 2022 年 5 月 31 日停止服务&#xff08;直到 HTTPS 证书到期才真正不能用了…

基于stm32的智能家居系统

目录 1.课题研究目的和内容 1.1 课题研究目的 1.2 课题研究内容 2.系统总体方案设计及功能模块介绍 2.1 总体方案设计 2.2 DHT11模块介绍 2.3 TFTLCD显示功能模块介绍 2.4 ESP8266WIFI模块介绍 2.5 MQ-135 空气质量模块介绍 2.6 步进电机模块介绍 2.…