ping某域名的整个流程
实验环境:
主机A,B(可不再同一网段),主机B有域名假设为www.baidu.com
首先:1. 本地主机A在命令行下执行"ipconfig/flushdns"命令来清空本地DNS高速缓存;
2. 本地主机A在命令行下执行"arp -d"命令来清空arp缓存
然后,主机A执行ping www.baidu.com(即主机B的域名)
在此过程中都发生了那些报文交互?
我个人理解:
思路:1.要执行ping命令主机A必须将域名转化为IP地址,故而一定会有DNS解析过程;
2.在DNS解析之前,主机A一定要知道自己默认网关的MAC地址,这就要涉及到ARP解析的问题;
3.ping命令本身是ICMP回显请求,故而肯定要有ICMP协议的回显请求交互。
以下是全过程:
(此处可参照“跨网段的ping过程”来看,此处假设DNS服务器和主机A不在同一网段,若二者在同一网段那么我想只需进行简单arp就可得到DNS服务器的mac不需经过网关)
1.主机A发送ARP请求报文目的mac为FFFFFF-FFFFFF,目的IP为网关的IP,要求获得网关的MAC地址;
2.路由器(主机A的默认网关)发送目的mac为A的mac,目的IP为A的IP的ARP回答报文,以告知A网关的mac地址;
3.A获得网关的mac地址后,就向网关发送一个DNS查询报文,其目的mac地址为网关的mac地址,目的IP为DNS服务器的IP地址;
4.网关收到DNS查询报文后,拆包检查发现是DNS查询于是将相应(查询)信息封装,向DNS服务器发送该报文,其目的IP地址为DNS服务器的IP,目的mac为下一跳的mac,解析域名IP地址此时就交给了DNS服务器;
5.经过DNS解析,主机A知道了所要ping的域名的ip地址;
6.剩下的ping过程就和ping一个特定的ip地址相同了,首先判断ping命令的目的B的IP地址是否和A在同一网段,若在同一网段则相当于同网段内ping,若不在同一网段,就是不同网段的ping只不过此时主机不需要再解析网关的mac地址了。
- 首先本机发送域名请求数据到PC设置的DNS ip
- PC通过子网掩码判断DNS ip是本网段还是跨网段(这里只考虑跨网段)
- 由于是跨网段,PC发送DNS域名解析数据包到PC设置的网关ip上。(此时先要进行二层的mac转发,PC查看本机arp缓存表,如果表中有网关的mac地址,直接转发,如果没有,使用arp解析协议解析到网关的mac地址。之后封装成数据帧发送到三层网络层)此时PC发送三层数据到网关,源地址为PC内网地址,目的地址为DNS ip地址。而在二层源mac地址为PC mac地址,目的mac地址为网关mac地址。
- 路由内网网关收到数据包,根据数据包的目的地址,查看路由表。根据路由表发送数据到下一跳上。(发送前,数据到达路由外网端口,会根据nat地址转换配置。形成一条内网ip+port与外网ip+port的一一对应关系。)
- 发送到下一跳和内网通信都是一样的,查看路由arp缓存表,如果有下一跳mac地址,就直接发送,没有的话需要arp协议解析一下。
- 对端路由收到数据包,再接着根据路由表判断下一跳。这样一跳一跳地,最后到达DNS服务器。服务器将查询结果返回。
- 返回的数据包在ISP的网络里最后寻址到你的路由器上,你的路由器收到数据包后,会查询路由nat连接表,寻找ip+port关系对应的内网ip。拆分数据包,封装成帧,最后PC收到域名对应的ip地址。
【到这里,域名解析过程完成,接下来ping对方ip,过程与上面几乎一样】
- 再发起一次PC到目的域名ip地址的一次ping请求信息
- PC通过子网掩码判断对方ip是本网段还是跨网段(这里只考虑跨网段)
- 由于是跨网段,PC发送数据包到网关ip上。
- 路由内网网关收到数据包,根据数据包的目的地址,查看路由表。根据路由表发送数据到下一跳上。(发送前,数据到达路由外网端口,会根据nat地址转换配置。形成一条内网IP+port与外网ip+port的一一对应关系。)
- 发送到下一跳和内网通信都是一样的,查看路由arp缓存表,如果有下一跳mac地址,就直接发送,没有的话就是要arp协议解析一下。
- 服务器收到数据包后,会重新构建一个ICMP应答包,然后返回。
- 返回的数据包在ISP的网络里最后寻址到你的路由器上,你的路由器收到数据包后,会查询路由nat连接表,寻找ip+port关系对应的内网ip。拆分数据包,封装成帧,最后PC收到ICMP应答数据包。
整个过程到此结束。在整个这个过程中,源ip地址和目的ip地址是不变的(内网到路由器段不算在内)而mac地址是变的。
ping某域名的整个流程的更多相关文章
- 解决redhat linux下IP地址可以ping通,域名无法ping通问题
解决redhat linux下IP地址可以ping通,域名无法ping通 在/etc/resolv.conf中添点东西 格式如下: nameserver xxx.xxx.xxx.xxx nameser ...
- 能ping通域名,却不能上网
今天遇到了一个奇怪的现象,电脑意外死机,然后重启,再软后就是能够访问ip,也能ping通域名, 就是浏览器无法访问网页. 1. 首先修改了dns ,刷新dns缓存ipconfig /flushdns ...
- Linux Ubuntu 能PING IP但不能PING主机域名的解决方法
------------------------------------------------------------------------------- vi /etc/nsswitch.con ...
- red hat7 系统可以ping通ip地址但是不能ping通域名
在red hat7中ifconfig后出现这样的情况,ens33是物理网卡,与eth0一样只是不同的名字.但是只能ping通ip地址不能ping通域名. 解决方法: 在文件 /etc/resolv.c ...
- Linux服务器ping不通域名出现的unknown host 错误解决办法
"ping: unknown host www.baidu.com" 解决方法 如果某台Linux服务器ping不通域名, 如下提示: # ping www.baidu.compi ...
- 解决CentOS下可以ping通ip ping不通域名
现象:1. ping不通域名,比如 www.qq.com 2. 可以ping通ip,比如 61.135.157.156 分析:1. 查看DNS配置文件 /etc/resolve.conf, 里面的服务 ...
- Linux 能PING IP 但不能PING 主机域名的解决方法 vim /etc/nsswitch.conf hosts: files dns wins
Linux 能PING IP 但不能PING 主机域名的解决方法 转载 2013年12月25日 10:24:27 13749 . vi /etc/nsswitch.conf hosts: files ...
- Linux能ping通IP,ping不通域名
今天碰到个问题, 能ping通IP地址, ping不通域名, 一直以为是 DNS解析服务器的问题, 找了半天. 问题不在这里. [root@www postfix]# cat /etc/resolv. ...
- 通过ping命令了解三层转发流程
ping命令:因特网包探索器.本文主要通过路由器两端不同网段PC互ping来讲解三层转发流程. 例子:PC-A是如何 ping 通 PC-C 的,有几种情况? 说明:1.在条件1阶段PC-C不会刷新a ...
随机推荐
- 微信小程序必知相关知识
微信小程序必知相关知识 1 请谈谈微信小程序主要目录和文件的作用? project.config.json 项目配置文件,用得最多的就是配置是否开启https校验: App.js 设置一些全局的基础数 ...
- 解决使用Microsoft Graph OAuth获取令牌时,没有refresh_token的问题
今天在使用Microsoft Graph 的时候,发现按照官方文档,无论如何都不能获取refresh_token,其他都没问题,经过查询,发现是因为在第一步,获取code授权时,没有给离线权限(off ...
- Java httpclent请求httpclentUtils工具类
第一种写法: import java.io.IOException; import java.io.InterruptedIOException; import java.io.Unsupported ...
- 目标检测论文解读4——Faster R-CNN
背景 Fast R-CNN中的region proposal阶段所采用的SS算法成为了检测网络的速度瓶颈,本文是在Fast R-CNN基础上采用RPN(Region Proposal Networks ...
- k8s Storage Classes
Storage Classes 介绍 StorageClass 为管理员提供了描述存储 "类" 的方法. 不同的类型可能会映射到不同的服务质量等级或备份策略,或是由群集管理员制定的 ...
- php责任链模式(The chain of responsibility pattern)
送家人从火车站归来,继续码. <?php /* The chain of responsibility pattern decouples the sender of a request fro ...
- vue全家桶面试
vue:主要Vue vue-router:关于路由方面的配置 vuex:数据共享和缓存用 vue-resource:于后台交互用(现在改为axios 但是axios不是Vue里面的东西) ...
- 201671030117 孙欢灵 实验十四 团队项目评审&课程学习总结
项目 内容 作业所属课程 所属课程 作业要求 作业要求 课程学习目标 (1)掌握软件项目评审会流程:(2)反思总结课程学习内容 任务一:团队项目审核已完成.项目验收过程意见表已上交. 任务二:课程学习 ...
- JQuery系列(5) - Deferred对象
从jQuery 1.5.0版本开始引入的一个新功能----deferred对象. 简单说,deferred对象就是jQuery的回调函数解决方案.在英语中,defer的意思是"延迟" ...
- 【Redis】远程访问不了
Windows安装后,启动的服务配置文件是redis.windows-service.conf "D:\Program Files\Redis\redis-server.exe" ...