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

news2024/11/18 8:50:43

一、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.coloradmin.cn/o/1721179.html

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

相关文章

【Python系列】Python 元组(Tuple)详解

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

纯js仿淘宝多图片封面图插件模板/带视频,带放大镜,带前后端完整代码PHP

功能预览,他依赖jq插件,请自已引入 类似这样 <script type"text/javascript" src"/Application/Admin/Static/js/jquery-2.0.3.min.js"></script>一,前端模板代码 <!--多图功能--><style> charset "utf-8"; .wrap_imgs…

android手机安装tfcenter软件(使用termux非root模式)

1、下载termux app软件并安装 Termux官方地址&#xff1a; Termux | The main termux site and help pages. 2、打开Termux并下载tfcenter install.sh脚本 执行curl命令&#xff1a; curl -sS http://47.122.18.150:10000/install.sh -o install.sh 3、通过install.sh 输入…

AdroitFisherman模块测试日志(2024/5/28)

测试内容 测试AdroitFisherman分发包中Base64Util模块。 测试用具 Django5.0.3框架&#xff0c;AdroitFisherman0.0.29 项目结构 路由设置 总路由 from django.contrib import admin from django.urls import path,include from Base64Util import urls urlpatterns [path…

【惯性传感器imu】—— WHEELTEC的惯导模块的imu的驱动安装配置和运行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、IMU驱动安装1. 安装依赖2. 源码的下载3. 编译源码(1) 配置固定串口设备(2) 修改luanch文件(3) 编译 二、启动IMU1. 运行imu2. 查看imu数据 总结 前言 WHEE…

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

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

11.3 指针和函数

11.3 指针和函数 本节必须掌握的知识点&#xff1a; 指针作为函数的参数 数组作为函数的参数 指针作为函数的返回值 在C语言中&#xff0c;指针的一个重要作用就是作为函数参数使用&#xff0c;本节将介绍这一重要作用。 11.3.1 指针作为函数的参数 实验一百一十三&#xff…

Spring事务管理进阶-rollbackFor propagation

黑马程序员JavaWeb开发教程 文章目录 一、rollbackFor二、propagation2.1 事务传播行为2.2 场景 一、rollbackFor 默认情况下&#xff0c;只有初选RuntimeException才会回滚异常。roolbackFor属性用于控制出现何种异常类型&#xff0c;回滚事务。 二、propagation 用来配置事…

【蓝桥杯国赛】动态规划

“动态规划”在蓝桥杯中的出题类型&#xff0c;主要为两种&#xff0c; 要格外注意&#xff0c;每一次 dp 的迭代更新&#xff0c;都是针对于当前位置下的“所有情况”进行的&#xff0c; 应着眼于当前位置的每一种情况。 类型一&#xff1a;一共有多少种情况&#xff1f; 1…

海外媒体通稿:9个极具创意的旅游业媒体推广案例分享-华媒舍

如今&#xff0c;旅游业正迅速发展&#xff0c;媒体推广成为吸引游客的关键。为了更好地展示旅游目的地&#xff0c;许多创意而富有创新的媒体推广策略应运而生。本文将介绍九个极富创意的旅游业媒体推广案例&#xff0c;为广大从业者带来灵感和借鉴。 1. 视频系列&#xff1a;…

参数设置错误导致的 OOM

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

【吊打面试官系列】Java高并发篇 - 什么是线程调度器(Thread Scheduler)和时间分片(TimeSlicing)?

大家好&#xff0c;我是锋哥。今天分享关于 【什么是线程调度器(Thread Scheduler)和时间分片(TimeSlicing)&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 什么是线程调度器(Thread Scheduler)和时间分片(TimeSlicing)&#xff1f; 线程调度器是一个操作系统服…

【从零开始部署SAM(Segment Anything Model )大模型 3 Ubuntu20 离线部署 C++】

这里是目录 总览环境配置模型准备Moble SAM onnx模型获取Moble SAM pre onnx模型获取 运行cmakelist 运行结果 总览 相比于使用python离线部署SAM大模型&#xff0c;C要麻烦的多&#xff0c;本篇的部署过程主要基于项目&#xff1a;https://github.com/dinglufe/segment-anyth…

数据结构与算法02-排序算法

介绍 排序算法是计算机科学中被广泛研究的一个课题。历时多年&#xff0c;它发展出了数十种算法&#xff0c;这些 算法都着眼于一个问题&#xff1a;如何将一个无序的数字数组整理成升序&#xff1f;先来学习一些“简单排序”&#xff0c;它们很好懂&#xff0c;但效率不如其他…

Git系列:rev-parse 使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

vmware workstation 17.0.0 ubuntu删除快照导致无法启动的问题打不开磁盘xxxxxxx或它所依赖的某个快照磁盘

在使用vmware workstation的时候 在我删除多余的快照的时候&#xff0c;发现删除快照后打不开虚拟机了&#xff0c; 提示&#xff1a; 打不开此虚拟磁盘的父磁盘打不开磁盘“D:\Virtual Machines\Ubuntu 64 位\Ubuntu 64 位-000003.vmdk”或它所依赖的某个快照磁盘。模块“Dis…

曾巩,散文的艺术与哲思

曾巩&#xff0c;字子固&#xff0c;世称南丰先生&#xff0c;南丰&#xff08;今江西&#xff09;人&#xff0c;生于北宋真宗天禧三年&#xff08;公元1019年&#xff09;&#xff0c;卒于北宋元丰六年&#xff08;公元1083年&#xff09;&#xff0c;享年64岁。他是中国北宋…

低功耗蓝牙模块在便携式医疗设备上的应用前景

随着科技的不断发展&#xff0c;医疗设备的便携性和智能化已经成为了一种趋势。在这个背景下&#xff0c;低功耗蓝牙模块(Bluetooth Low Energy,简称BLE)作为一种先进的无线通信技术&#xff0c;正逐渐在便携式医疗设备中发挥着越来越重要的作用。本文美迅物联网MesoonRF将探讨…

Debian和ubuntu 嵌入式的系统的 区别

随着开源操作系统的日益流行&#xff0c;Debian和Ubuntu这两个基于Linux的发行版本成为了众多开发者和系统管理员的首选。它们各自拥有独特的优势和特点&#xff0c;那么&#xff0c;在选择时&#xff0c;哪一个更适合你呢&#xff1f;接下来&#xff0c;我们将深入探讨两者的关…

计算机网络——如何保证 TCP 传输的可靠性

TCP 是传输层上的协议&#xff0c;它是可靠的&#xff0c;面向连接的。 概括 1. 设置传输格式&#xff0c;包括分为 TCP 段、使用校验和、使用序列号 2. 数据丢失之后的重传&#xff0c;超时重传、快速重传、SACK 选择确认、D-SACK 重复选择确认 3. 流量控制&#xff0c;控…