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

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

相关文章

法线方程实现最小二乘拟合(Matlab)

一、问题描述 利用法线方程实现最小二乘拟合。 二、实验目的 掌握法线方程方法的原理,能够利用法线方程完成去一组离散数据点的拟合。 三、实验内容及要求 对于下面的不一致系统,构造法线方程,计算最小二乘以及2-范数误差。 [ 3 − 1 2 …

【SQL学习进阶】从入门到高级应用(九)

文章目录 子查询什么是子查询where后面使用子查询from后面使用子查询select后面使用子查询exists、not existsin和exists区别 union&union alllimit 🌈你好呀!我是 山顶风景独好 💕欢迎来到我的博客,很高兴能够在这里和您见面…

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

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

研发效能DevOps: Ubuntu 部署 JFrog 制品库

目录 一、实验 1.环境 2.Ubuntu 部署 JFrog 制品库 3.Ubuntu 部署 postgresql数据库 4.Ubuntu 部署 Xray 5. 使用JFrog 增删项目 二、问题 1.Ubuntu 如何通过apt方式部署 JFrog 制品库 2.Ubuntu 如何通过docker方式部署 JFrog 制品库 3.安装jdk报错 4.安装JFrog Ar…

Jenkins常用插件与应用详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Jenkins是一个平台我们通过安装插件来解决我们想要完成的任务 1、Jenkins常用插件 Allure&#…

如何用ChatGPT上热门:完整使用教程与写作技巧

1. ChatGPT概述修订 ChatGPT是一款基于深度神经网络的语言生成技术,能够协助用户创造出各类高品质的文字材料,适宜广泛的应用场景,如编撰文章、文学创作及社交媒体内容生成。 2. 利用ChatGPT生成热门内容的基本步骤 为了有效利用ChatGPT创作…

python实现——综合类型数据挖掘任务(无监督的分类任务)

综合类型数据挖掘任务 航空公司客户价值分析。航空公司客户价值分析。航空公司客户价值分析。航空公司已积累了大量的会员档案信息和其乘坐航班记录(air_data.csv),以2014年3月31日为结束时间抽取两年内有乘机记录的所有客户的详细数据。利用…

苍穹外卖数据可视化

文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计 所谓用户统计,实际上统计的是用户的数量。通过折线图来展示,上面这根蓝色线代表的是用户总量,下边这根绿色线代表的是新增用户数量,是具体到每一天。所以说用户统计…

关系数据库:关系运算

文章目录 关系运算并(Union)差(Difference)交(Intersection)笛卡尔积(Extended Cartesian Product)投影(projection)选择(Selection)除…

鹤城杯 2021 流量分析

看分组也知道考http流量 是布尔盲注 过滤器筛选http流量 将流量包过滤分离 http tshark -r timu.pcapng -Y "http" -T json > 1.json这个时候取 http.request.uri 进一步分离 http.request.uri字段是我们需要的数据 tshark -r timu.pcapng -Y "http&quo…

C++ 混合运算的类型转换

一 混合运算和隐式转换 257 整型2 浮点5 行吗?成吗?中不中? C 中允许相关的数据类型进行混合运算。 相关类型。 尽管在程序中的数据类型不同,但逻辑上进行这种运算是合理的相关类型在混合运算时会自动进行类型转换,再…

【会议征稿】2024年无人驾驶与智能传感技术国际学术会议(ADIST 2024)

2024年无人驾驶与智能传感技术国际学术会议(ADIST 2024)将于2024年6月28-30日在珠海召开。ADIST 2024旨在搭建学术资源共享平台,加强中外学术合作,促进自动驾驶和智能传感技术的发展,促进全球研究人员、开发人员、工程…

免费实现网站HTTPS访问

HTTPS(Hypertext Transfer Protocol Secure)是一种基于SSL协议的HTTP安全协议,旨在为客户端(浏览器)与服务器之间的通信提供加密通道,确保数据在传输过程中的保密性、完整性和身份验证。与传统的HTTP相比&a…

《云原生监控》-prometheus监测技术方案

部署环境 A主机: 系统: CentOS 7 应用: Docker( Prometheus Grafana Alertmanager CAdvisor ) 主机( Node Exporter Consul Confd ) B主机: 系统: CentOS 7 应用: Docker( CAdvisor ) 主机( Node Exporter ) 总体图 下载: Confd链接(0.16.0)…

【C++】数据结构:哈希桶

哈希桶(Hash Bucket)是哈希表(Hash Table)实现中的一种数据结构,用于解决哈希冲突问题。哈希表是一种非常高效的数据结构,它通过一个特定的函数(哈希函数)将输入数据(通常…

jenkins插件之plot

plot是一个生成图表的插件,这里我用于可视化phploc统计的数据 插件安装 进入 Dashboard --> 系统管理 --> 插件管理 --> Available plugins 搜索plot安装生成phploc分析数据 Dashboard --> 您的项目 --> Configuration点击 Build Steps点击 增加构…

一文读懂存内计算与近存计算的分类与应用

存内计算与近存计算-基础理论及分类 技术基础知识和分类 "近存计算"与"存内计算"易混淆,本章明晰其分类,并比较各内存驱动方法的独特优势。可计算存储器设备可作分立加速器或替代现有存储模块。我们深入剖析每种方法的利弊&#xf…

ctfshow web 月饼杯II

web签到 <?php //Author:H3h3QAQ include "flag.php"; highlight_file(__FILE__); error_reporting(0); if (isset($_GET["YBB"])) {if (hash("md5", $_GET["YBB"]) $_GET["YBB"]) {echo "小伙子不错嘛&#xff…

App自动化测试_Python+Appium使用手册

一、Appium的介绍 Appium是一款开源的自动化测试工具&#xff0c;支持模拟器和真机上的原生应用、混合应用、Web应用&#xff1b;基于Selenium二次开发&#xff0c;Appium支持Selenium WebDriver支持的所有语言&#xff08;java、 Object-C 、 JavaScript 、p hp、 Python等&am…