【网络】DNS、ICMP、NAT

目录

一、DNS(Domain Name System)

1、DNS背景

2、域名简介

二、ICMP协议

1、ICMP功能

2、ICMP的报文格式

3、ping命令

4、traceroute命令

三、NAT技术

1、NAT技术背景

2、NAT IP转换过程

3、NAPT

4、NAT技术的缺陷

5、NAT和代理服务器


一、DNS(Domain Name System)

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

1、DNS背景

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

 最初,通过互连网信息中心(SRI-NIC)来管理这个hosts文件的。

  •  如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。
  •  其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。

这样就太麻烦了,于是产生了DNS系统。

  • 一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系。
  • 如果新计算机接入网络,将这个信息注册到数据库中。
  • 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址。

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

cat /etc/hosts

2、域名简介

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。

www.baidu.com

域名使用 . 连接

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

二、ICMP协议

ICMP协议是一个 网络层协议。

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

1、ICMP功能

ICMP正是提供这种功能的协议; ICMP主要功能包括:

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

2、ICMP的报文格式

 ICMP是作为IP报文的有效载荷使用的。 

 ICMP大概分为两类报文:

  • 一类是通知出错原因
  • 一类是用于诊断查询

3、ping命令

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

 ping命令基于ICMP,是在网络层。而端口号,是传输层的内容。在ICMP中根本就不关注端口号这样的信息。

4、traceroute命令

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

三、NAT技术

1、NAT技术背景

IPv4协议中,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 发送数据时就会生成表中的映射关系

3、NAPT

 那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的。那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?

 又如果同一个局域网内有多个主机的多个客户端访问同一个外网服务器,且不同主机的客户端的端口号恰好相同,又怎么区分这些相应分别属于哪些客户端。

 这时候NAPT来解决这个问题了。使用IP+port来建立这个关联关系。

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

 在网络中,要弱化主机的概念,把所有的请求或响应都看作是一个个独立客户端或服务器发起的,NAPT给每一个进程使用 IP + port 起了一个名字,这个名字在本局域网与公网中,全网唯一。

 在NAT路由器把数据进行转发时,会在内部建立一个源地址与目的地址的映射表,这些地址都是唯一的。因此在收到数据时,也可以根据映射表找到对应的进程,并转发回去。

 这样看来,似乎只需要维护内网客户端的 IP + port 与NAPT根据 IP + port 所取的名字的映射关系就可以了,这样足以完成数据发送与接收的过程,为什么还要维护公网服务器的IP + port 的映射关系呢?这是处于安全的考虑,如果不维护,那么公网中所有的请求响应,只要 IP + port 是正确的,就可以成功发送到内网之中,这样很容易搞崩一个内网。

4、NAT技术的缺陷

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

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

5、NAT和代理服务器

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

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

那么NAT和代理服务器的区别有哪些呢?

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

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

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

代理服务器又分为正向代理和反向代理。

正向代器服务器一般比较靠近客户端,可以:

  • 缓存资源,提高用户体验与访问效率。
  • 过滤非法请求。

 反向代理服务器一般比较靠近服务端,可以把所有用户的请求收集到一起,并合理分配到机器集群的不同的服务器上,保证负载均衡。

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

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

相关文章

QtWebApp开发https服务器,完成客户端与服务器基于ssl的双向认证,纯代码操作

引言:所谓http协议,本质上也是基于TCP/IP上服务器与客户端请求和应答的标准,web开发中常用的http server有apache和nginx。Qt程序作为http client可以使用QNetworkAccessManager很方便的进行http相关的操作。Qt本身并没有http server相关的库…

【零基础学Rust | 基础系列 | 数据结构】元组,数组,向量,字符串,结构体

文章标题 简介:一,元组:1,定义元组:2,访问元组元素:3,元组解构:4,元组在函数中的应用: 二,数组:1,数组的声明和…

GG修改器安装与Root环境的安装

关于GG修改器大家应该都有一定的了解吧,就是类似于电脑端CE的一个软件。 GG修改器在百度云盘里请自行下载! 百度网盘链接:https://pan.baidu.com/s/1p3KJRg9oq4s0XzRuEIBH4Q 提取码:vuwj 那我要开始了! 本来不想讲GG…

【状态估计】一维粒子滤波研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

一条自由游动的鲸鱼

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>鲸鱼</title><style>#canvas-container {width: 100%;height: 100vh;overflow: hidden;}&l…

策略模式:优雅地实现可扩展的设计

策略模式&#xff1a;优雅地实现可扩展的设计 摘要&#xff1a; 策略模式是一种常用的设计模式&#xff0c;它可以帮助我们实现可扩展的、灵活的代码结构。本文将通过一个计算器案例来介绍策略模式的概念、使用场景以及如何在实际项目中应用策略模式来提高代码的可维护性和可扩…

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...

项目背景 Boost库是C中一个非常重要的开源库. 它实现了许多C标准库中没有涉及的特性和功能, 一度成为了C标准库的拓展库. C新标准的内容, 很大一部分脱胎于Boost库中. Boost库的高质量代码 以及 提供了更多实用方便的C组件, 使得Boost库在C开发中会被高频使用 为方便开发者学…

设计模式行为型——备忘录模式

目录 什么是备忘录模式 备忘录模式的实现 备忘录模式角色 备忘录模式类图 备忘录模式举例 备忘录模式代码实现 备忘录模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;又叫做快照模式&#x…

qt源码---事件系统之QCoreApplication

上一节分析了qt和windows系统之间的消息的传递&#xff0c;本节着重看一下&#xff0c;qt内部的事件是如何传递的&#xff1f; 1.sendEvent函数 在使用的自定义事件时&#xff0c;有时需要手动抛出一个事件&#xff0c;常用的方式有2种&#xff0c;其一时阻塞式的sendEvent函…

在IDEA同一个窗口中同时打开多个独立项目

文章说明 本文主要说明如何在Intellij Idea中同时打开多个独立的Maven项目。 我在使用idea的时候&#xff0c;由于自己负责了很多项目&#xff0c;经常要在不通的代码之间切换来切换去。然后搜索代码的时候也只能搜到当前打开的这个项目。因为这个原因&#xff0c;一些小项目…

wxwidgets Ribbon使用wxRibbonToolBar实例

wxRibbonToolBar就是工具栏&#xff0c;一下是实现的效果&#xff0c;界面只是功能展示&#xff0c;没有美化 实现代码如下所示&#xff1a; MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 600)) …

vue中点击添加类名,并且实现升降序

1.介绍 要求&#xff1a;掌握indexOf()用法&#xff1b;动态绑定类名的对象写法&#xff1b;iconfont使用&#xff1b;split()用法&#xff1b;三元运算符用法&#xff1b;es6模板字符串&#xff1b; 说明&#xff1a;首先综合元素默认有元素并且是降序。服务器传来的数据格式…

C++物理引擎Box2D的下载,编译,VS2013配置环境

文章目录 网站和下载地址编译工具:编译box2dhelloworld测试网站和下载地址 https://box2d.org/ 下载地址 https://hub.nuaa.cf/erincatto/box2d/tags 编译工具: 1.VS2013 2.cmake 下载地址 https://cmake.org/ 编译box2d 下载box2d源码2.4.0,解压。在box2d-2.4.0目录下…

什么是场景营销,小红书场景营销方式和方法有哪些

现在小红书上最流行的就是场景营销&#xff0c;那什么是场景营销&#xff0c;应该怎么做呢&#xff1f;今天来和大家分享下大家都在说得场景营销是什么&#xff0c;在小红书投放怎么做好场景营销&#xff1f; 一、什么是场景化营销 说白来&#xff0c;场景营销(Scene Marketing…

机器学习深度学习——从全连接层到卷积

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——非NVIDIA显卡怎么做深度学习&#xff08;坑点排查&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…

Python测试框架pytest:测试用例、查找子集、参数化、跳过

Pytest是一个基于python的测试框架&#xff0c;用于编写和执行测试代码。pytest主要用于API测试&#xff0c;可以编写代码来测试API、数据库、UI等。 pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要有以下几个优点&#xff1a; 简单灵活&#xff0c;容易上手。…

react搭建在线编辑html的站点——引入grapes实现在线拖拉拽编辑html

文章目录 ⭐前言⭐搭建react ts项目⭐引入grapes 插件⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于react搭建在线编辑html的站点。 react 发展历史 React是由Facebook开发的一种JavaScript库&#xff0c;用于构建用户界面。React最初发布于2013年&…

没有配置redis但是报错连接redis失败

问题 没有配置redis但是报错连接redis失败 检查maven配置是否引入了redis依赖&#xff08;可能是传递依赖&#xff0c;最好检查引进来的公共工程 解决办法 只需要在该工程application.yml文件中配置一下 redis就好&#xff0c;或者移除redis依赖 spring:redis:password: hos…

一文了解 Android Auto 车载开发~

作者&#xff1a;牛蛙点点申请出战 背景 我的的产品作为一个海外音乐播放器&#xff0c;在车载场景听歌是一个很普遍的需求。在用户反馈中&#xff0c;也有很多用户提到希望能在车上播放音乐。同时车载音乐也可以作为提升用户消费时长一个抓手。 出海产品&#xff0c;主要服务…

【Vue】Parsing error: No Babel config file detected for ... vue

报错 Parsing error: No Babel config file detected for E:\Study\Vue网站\实现防篡改的水印\demo02\src\App.vue. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.             …