【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 一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。

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

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

相关文章

【Python】解决Python报错:AttributeError: ‘NoneType‘ object has no attribute ‘xxx‘

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

开利网络参加广州数据交易所学习活动

开利网络做为南沙广州数据交易所的会员参加了由“广东三会”组织的“数据资产”相关学习活动。(下图为开利董事长付立军先生在签到) 学习内容提现了数字时代企业数字化转型的核之心“发掘数据价值,驱动高速发展”,交易中心组织大家…

jpom ruoyi 发布后端

添加ssh 添加标签 添加仓库 添加构建 构建 命令 APP_NAMEenterprise IMAGE_NAMEenterprise:latest APP_PORT8080 RUN_ENVjenkins cd ruoyi-admin docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $IMAGE_NAME || true docker build -f Dockerfil…

国际物流管理系统的选择:花钱不怕,就怕花冤枉钱

现在市场上的国际物流管理系统还是非常多的,想在这么多类型的系统中选择一套适合自己的系统确实不是个简单的事情。 尤其是现在很多物流商其实都是比较小的国际物流商,很多大型的,过于复杂的系统并不适合这个群体。那这个群体应该怎么选择国…

智慧车站管理:提升地铁站新质生产力的策略

应用图扑自研产品 HT for Web 结合 BIM 技术,搭建轻量化的 WebGIS 智慧车站系统。 该系统通过整合轨道交通信息,实现了车站数据的多维互联与融合。提升了车站信息管理效率和运营效能,并优化了乘客出行体验。对构建智能、高效、环保的轨道交通…

利用博弈论改进大模型性能:MIT最新研究解读

引言 在人工智能和大模型的发展过程中,我们常常遇到一个有趣的现象:同一个问题在不同形式下可能得到不同的答案。这种不一致性不仅降低了大模型的可信度,也限制了其在实际应用中的效果。为了应对这一问题,来自MIT的研究人员提出了…

微信公众号开发(三):自动回复“你好”

上一篇做了服务器校验,但没有处理用户发来的消息,为了完成自动回复的功能,需要增加一些功能: 1、调整服务器校验函数: def verify_wechat(request):tokentokendatarequest.argssignaturedata.get(signature)timestamp…

安全测试用例及解析(Word原件,直接套用检测)

5 信息安全性测试用例 5.1 安全功能测试 5.1.1 标识和鉴别 5.1.2 访问控制 5.1.3 安全审计 5.1.4 数据完整性 5.1.5 数据保密性 5.1.6 软件容错 5.1.7 会话管理 5.1.8 安全漏洞 5.1.9 外部接口 5.1.10 抗抵赖 5.1.11 资源控制 5.2 应用安全漏洞扫描 5.2.1 应用安全漏洞扫描 5.3…

vim使用技巧

1,使用内置帮助(built-in help) 使用 vim 的内置帮助是一个好习惯(虽然很多朋友更喜欢在网上搜索相关的使用方法)。查看帮助的语法如下表格所示: 前缀例子说明::help :w有关 :w 命令的帮助none:help j有关…

Python—面向对象小解(5)

一、多任务介绍 1.1 进程与线程 进程是操作系统分配资源的最小单元 线程执行程序的的最小单元 线程依赖进程,可以获取进程的资源 一个程序执行 先要创建进程分配资源,然后使用线程执行任务 默认情况下一个进程中有一个线程 1.2 多任务介绍 运行多个进程…

利用二维数组的输出下列图形

利用二维数组的输出下列图形 #include <stdio.h> int main () {int i,j;char a[5][9]{{*,*,*,*,*},{ ,*,*,*,*,*},{ , ,*,*,*,*,*},{ , , ,*,*,*,*,*},{ , , , ,*,*,*,*,*}};for(j0;j<9;j) {for(i0;i<5;i) {printf("%c ",a[i][j]);} printf("\n&qu…

【C++】:模板初阶和STL简介

目录 一&#xff0c;泛型编程二&#xff0c;函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三&#xff0c;类模板3.1 类模板的定义格式3.2 类模板的实例化 四&#xff0c;STL简介&#xff08;了解&#xff09;4.1 什…

python移位操作符(左移位操作符<<、右移位操作符>>)(允许开发者对整数进行位操作,乘2或除2)(左移操作、右移操作)(位掩码操作|=)

文章目录 Python 中的移位操作符详解移位操作符简介左移位操作符 (<<)语法和使用示例代码输出 右移位操作符 (>>)语法和使用示例代码输出 移位操作符的应用场景快速乘除运算&#xff1a;使用移位操作符代替传统的乘法和除法运算&#xff0c;可以提高计算速度。位掩…

参数设置错误导致的 OOM

参数设置错误导致的 OOM 前言事故分析事故原因事故复盘 前言 2024 年 5 月 10 日 14 时 19 分&#xff0c;C 公司开发人员向 A 公司开发人员反映某开放接口从 2024 年 5 月 10 日 14 时许开始无法访问和使用。该系统为某基础数据接口服务&#xff0c;基于 HTTP 协议进行通信。…

【第十二节】C++控制台版本贪吃蛇小游戏

目录 一、游戏简介 1.1 游戏概述 1.2 实现功能 1.3 开发环境 二、实现设计 2.1 C类的设计 2.2 项目结构 2.3 代码设计 三、程序运行截图 3.1 游戏界面 3.2 自定义地图 3.3 常规游戏界面 一、游戏简介 1.1 游戏概述 本游戏是一款基于C语言开发的控制台版本贪吃蛇游…

爆火的ChatTTS试用体验(附完整安装步骤和体验地址)

近日&#xff0c;一个名为 ChatTTS 文本转语音项目爆火出圈。突破了开源语音天花板&#xff0c;才开源3天斩获9k的Star量。 该模型真是强大&#xff0c;又要火爆一波&#xff0c;是最接近真人的语音特征&#xff0c;包括笑声、停顿和插入词等&#xff0c;让人感觉不到竟是语音合…

【一步一步了解Java系列】:子类继承以及代码块的初始化

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff1a;小闭 …

spring boot 3.x版本 引入 swagger2启动时报错

一&#xff0c;问题 Spring Boot 3.x版本的项目里&#xff0c;准备引入Swagger2作为接口文档&#xff0c;但是项目启动报错&#xff1a; java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present at java.base/sun.reflect.generics.…

如何让Google收录网页?

确保网页被Google快速且持续地收录&#xff0c;页面的质量起着至关重要的作用。高质量的网页不仅更容易被搜索引擎收录&#xff0c;而且能够提高网页在搜索结果中的排名&#xff0c;想确保页面的质量&#xff0c;要保持原创&#xff0c;确保你的内容是独一无二的&#xff0c;别…

香港电讯荣获经济通「金融科技大奖」专业认可

香港电讯非常荣幸在《经济通》举办的「2023金融科技大奖」中脱颖而出&#xff0c;获「杰出跨境数码方案」、「杰出网络安全方案&#xff08;商用&#xff09;」和「杰出ESG解决方案」三个重要奖项。 香港电讯拥有丰富的经验及庞大的专业技术团队&#xff0c;一直致力为客户提供…