DNS和ICMP协议

news2024/11/19 13:29:18

目录

一、DNS协议

二、ICMP协议

1.ICMP协议

2.ping命令


在讲完了OSI模型每层协议的讲解后,还有一些协议我们需要再讲解一下。

一、DNS协议

DNS是一整套从域名映射到IP地址的系统,也叫做域名解析服务,端口号为53。

我们生活中访问网站都会使用url,或者说是网址。

比如,我打开百度,该网站的url为https://www.baidu.com,其中www.baidu.com就叫做域名,表示我访问的是百度的服务器。

在编写网络通信代码的时候,我们都在使用IP地址,甚至在整个网络通信的协议栈中我们也看不到和域名有关的任何东西。

所以,网络通信就是通过IP地址实现的,而不是域名。域名需要转换成IP地址,然后才能进行通信,这也就是DNS协议的工作。

对于网络的使用者而言,IP地址是一长串数字,它的记忆是十分反人类的。而使用域名就会好很多,不管是拼音还是英语单词,都会更好记忆。

所以DNS协议负责建立域名和IP地址的映射关系,在用户需要访问某网站时,域名字符串会根据映射转换为IP地址,从而实现网络通信。

最初,在每个人的主机上都有一个hosts文件,该文件专门用于存放域名和IP地址的映射关系,现在这个文件也依旧存在在我们的主机上。

最初,互联网中的主机还很少,互联网信息中心(SRI-NIC)会管理这个hosts文件的内容。如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。其他计算机也需要定期下载最新版本的hosts文件才能正确上网。

随着网络的快速发展,hosts文件的更新越来越快,内容也越来越多,不断下载新版本文件的弊端越来越明显。

所以DNS系统就诞生了。

DNS是一个组织的系统管理机构,维护系统内的每个主机的IP和域名的对应关系,该机构就像CA机构一样,具有权威性。

如果新计算机接入网络,需要将这个信息注册到数据库中。

用户输入域名的时候,会自动将URL的信息通过UDP发送到DNS的服务器,由DNS服务器检索数据库,得到对应的IP地址,返回给用户。

其实在我国曾经也有过中文的域名解析协议,曾经以插件的形式伴随着早期网民,它的名字叫3721.大家有兴趣可以看看有关的故事,了解我们现在使用的搜索引擎和一些互联网企业的发展历史。

有了一个权威机构提供域名解析服务,域名命名规则也出现了,以www.baidu.com为例。

  • com: 一级域名,表示这是一个企业域名,同级的还有net(网络提供商),org(非盈利组织) 等。
  • baidu:二级域名,一般是公司名或者组织的名称。
  • www:只是一种习惯用法,写不写都可以。直接输入baidu.com也可以访问百度的服务器。

二、ICMP协议

1.ICMP协议

ICMP协议是一个网络层协议,它能确认IP数据包是否成功到达目标地址。如果数据没有发送成功,会通知发送端IP数据包被丢弃的原因。

ICMP协议基于IP协议工作,所以它属于网络层协议。

ICMP只能搭配IPv4使用,如果使用IPv6,需要使用对应的ICMPv6协议。

如图所示,主机A向主机B发送数据,数据经过多次局域网转发后到了路由器2,路由器2为了获取主机B的MAC地址,发送ARP请求,但是主机B电源关闭,路由器2发送多次请求都收不到主机B的ARP应答。

此时路由器2就会返回一个Destination Unreachable数据包给主机A,主机A收到以后就知道了数据传送错误的原因了。

这种功能在我们之前的协议中是没有的,虽然TCP能触发超时重传,但传输错误的原因是找不到的。虽然对于网络使用者来说,不知道传输失败的原因也不影响使用,但是对于网络管理员来说,他们需要知道错误的原因,才能修复网络,此时ICMP协议就派上用场了。

ICMP也有自己的协议格式(了解即可)

ICMP报文大致分为两类,一类是通知出错原因,一类是用于诊断查询。

下图便是ICMP常见代码和代码所代表的内容。

2.ping命令

我们在验证一个机器的网络是否连接成功时,通常都会使用ping。

下图就是我在Windows的cmd上对www.baidu.com使用ping命令的结果,当然这个命令也可以在Linux上执行。

要注意,ping命令的对象是域名,而不是url,只有域名可以通过DNS解析成IP地址。

ping命令有以下特点:

  • ping命令不仅能验证网络的连通性,而且也会统计响应的时间和TTL(IP协议中的生存时间,也就是跳数)。
  • ping命令会先发送一个IMCP的Echo Request给对端,对端接收到之后会返回一个IMCP的Echo Reply。
  • ping命令是通过ICMP协议实现的,是网络层的协议,而端口号属于传输层的概念,平命令根本没有向上达到传输层,所以它没有端口号。

如图所示,traceroute+域名的指令,可以查询当前主机到目标主机之前经历了多少路由器,这也是基于ICMP协议实现的。

这个命令只能在Linux中使用,可以看到我的数据发到百度服务器的每一跳节点的信息。

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

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

相关文章

微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题

本心、输入输出、结果 文章目录 微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题前言微软 Win11 Dev 预览版 Build 23570 发布,修复文件资源管理器卡顿问题完整的更新日志[Windows 中的 Copilot][开始菜单][任务栏搜索][设置] 已知问…

P1950 长方形

题目&#xff1a; P1950 长方形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 算法&#xff1a; dp动态规划 代码&#xff1a; #include<iostream> #include<string> typedef unsigned long long ull; const int N 1010; using namespace std;int r, c, i, …

kali安装nodejs、npm失败

更新apt-get再安装&#xff0c;更新时间比较久&#xff0c;看网速&#xff0c;中间有一些确认步骤 22 apt-get update23 apt-get upgrade24 apt-get install nodejs25 node26 npm27 apt-get install npm

vulnhub靶机Funbox11

下载地址&#xff1a;Funbox: Scriptkiddie ~ VulnHub 主机发现 arp-scan -l 目标192.168.21.164 端口扫描 nmap --min-rate 1000 -p- 192.168.21.164 端口好多处理一下吧 nmap --min-rate 1000 -p- 192.168.21.164 |grep open |awk -F / {print $1} |tr \n , 端口服务版本…

Openssl数据安全传输平台004:套接字C语言API封装为C++类 / 客户端及服务端代码框架

1. 客户端C API // 客户端 // C API int sckClient_init(); /* 客户端 连接服务器 */ int sckClient_connect(char *ip, int port, int connecttime, int *connfd); /* 客户端 关闭和服务端的连接 */ int sckClient_closeconn(int connfd); /* 客户端 发送报文 */ int sckClie…

1024MSF工具的基本使用(第十五课)

1024MSF工具的基本使用(第十五课) 1 MSF 介绍 MSF&#xff08;Metasploit Framework&#xff09;是一款开源的渗透测试工具&#xff0c;旨在帮助安全专家进行安全测试&#xff0c;评估和漏洞利用。MSF提供了一系列的漏洞利用、Payload以及Post Exploit模块&#xff0c;使得渗…

【经验分享】WSL中使用USB设备

具体步骤&#xff1a; 首先在windows中安装 USBIP 工具&#xff0c;在GitHub上下载安装包并根据README文档的说明进行操作&#xff1a; 下载链接&#xff1a;https://github.com/dorssel/usbipd-win/releases 同时在 WSL Linux 端也需要安装编译内核所需的库和工具&#xff0c…

在 Python 中执行 Shell 命令并获取输出

在本文中&#xff0c;我们将学习如何借助 os.system() 从 Python 脚本执行 cmd 命令。 我们还将学习如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令。 从 Python 脚本执行 CMD 命令并使用 os.system() 获取输出 我们出于不同目的在命令提示符或任何其…

Rclone连接Onedrive

一、Rclone介绍 Rclone是一款的命令行工具&#xff0c;支持在不同对象存储、网盘间同步、上传、下载数据。 我们这里连接的onedrive&#xff0c;其他网盘请查看官方文档。 注意&#xff1a; 需要先在Windows下配置好了&#xff0c;然后再将rclone配置文件复制到Linux的rclone配…

文件读取结束的判定

大家好啊&#xff0c;我们今天来补充文件操作的读取结束的判定。 被错误使用的feof 牢记&#xff1a;在文件读取过程中&#xff0c;不能用feof函数的返回值直接用来判断文件的是否结束而是应用于当文件读取结束的时候&#xff0c;判断是读取失败结束&#xff0c;还是遇到文件尾…

【鸿蒙软件开发】进度条Progress

文章目录 前言一、进度条Progress1.1 创建进度条1.2 进度条样式进度条样式ProgressType.Linear&#xff08;线性样式&#xff09;ProgressType.Ring&#xff08;环形无刻度样式&#xff09;ProgressType.ScaleRing&#xff08;环形有刻度样式&#xff09;ProgressType.Eclipse&…

028-第三代软件开发-CheckBox

第三代软件开发-CheckBox 文章目录 第三代软件开发-CheckBox项目介绍CheckBox实际使用 关键字&#xff1a; Qt、 Qml、 CheckBox、 indicator、 contentItem 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language…

YOLO目标检测——人脸识别数据集【对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;安全监控、智能驾驶、人机交互、人脸门禁、人脸支付、人脸搜索数据集说明&#xff1a;人脸识别数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有人脸图片标签说明&#xff1a;使用lableimg标注软件标注&#xff0…

视频号视频怎么下载:完全教程和实用技巧

随着视频号平台的兴起&#xff0c;抖音快手视频号等平台让越来越多的用户对此喜欢&#xff0c;但对于视频号视频的下载很多人表示关注。无论是想收藏自己喜欢的视频&#xff0c;还是需要将视频用于其他用途&#xff0c;掌握视频号视频的下载方法变得至关重要。在本文中&#xf…

# Spring 事务失效场景

Spring 事务失效场景 文章目录 Spring 事务失效场景前言事务不生效未开启事务事务方法未被Spring管理访问权限问题基于接口的代理源码解读 CGLIB代理 方法用final修饰同一类中的方法调用多线程调用不支持事务 事务不回滚设置错误的事务传播机制捕获了异常手动抛了别的异常自定义…

c++ pcl点云变换骨架枝干添加树叶源码实例

程序示例精选 c pcl点云变换骨架枝干添加树叶源码实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《c pcl点云变换骨架枝干添加树叶源码实例》编写代码&#xff0c;代码整洁&#xff0c;…

搞个微信小程序002:个人信息

新建一个用于&#xff0c;和001中一样&#xff0c;然后&#xff0c;就改掉两个文件&#xff1a; index.wxml: <view><!-- 头像区域 --><view class"top"><view class"user-img"><image src"/images/tx.png"><…

JIT耗时优化

优质博文&#xff1a;IT-BLOG-CN 一、背景 业务流量突增&#xff0c;机器直接接入大量流量QPS2000&#xff0c;JIT和GC会消耗太多CPU资源&#xff0c;导致1-2分钟时间内的请求超时导致异常&#xff0c;因此采用流量预热的方式&#xff0c;让机器逐步接入流量&#xff0c;需要预…

学习MAVEN

MAVEN的详细介绍和作用、意义 好的&#xff0c;小朋友们&#xff0c;我们今天来聊聊一个非常神奇的工具箱&#xff0c;它的名字叫做Maven! &#x1f31f; 1. **神奇的工具箱Maven**: Maven就像是一个神奇的工具箱&#x1f9f0;&#xff0c;它可以帮助大人们把他们的电脑工…

手撕 视觉slam14讲 ch13 代码(7)后端优化 Backend::Optimize()

在上一篇 手撕&#xff08;6&#xff09;中的InsertKeyframe()插入关键帧的函数里&#xff0c;有一个 Backend::UpdateMap() 函数 &#xff0c;从这里通过条件变量 map_update_ 来激活后端优化。 backend.h&#xff1a; // * 有单独优化线程&#xff0c;在Map更新时启动优化…