A主机ping B主机发生了什么?
计算机网络面试题:A主机ping B主机发生了什么?
众所周知,ping命令使用的是ICMP协议包,那么A主机ping B主机到底发生了什么呢?
1 ping介绍
ping(Packet Internet Groper,因特网包探索器)是Windows、UNIX、和Linux系统下的一个命令。ping也属于一种通信协议,是TCP/IP的一部分。利用ping命令可以检查网络是否连通,可以很好地帮助分析和判定网络故障。应用格式:ping 空格 IP地址,该命令还可以加许多参数使用。
2 ping的使用
连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备 等造成的故障。使用 Ping 检查连通性有六个步骤:
1. 使用 ipconfig /all 观察本地网络设置是否正确;
2. Ping 127.0.0.1,127.0.0.1 回送地址 Ping 回送地址是为了检查本地的 TCP/IP 协议有 没有设置好;
3. Ping 本机 IP 地址,这样是为了检查本机的 IP 地址是否设置有误;
4. Ping 本网网关或本网 IP 地址,这样的是为了检查硬件设备是否有问题,也可以检查本 机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)
5.Ping 本地 DNS 地址,这样做是为了检查 DNS 是否能够将 IP。
6.Ping 远程 IP 地址,这主要是检查本网或本机与外部的连接是否正常。
3 ping工作原理
A主机ping B主机
A主机发送端:
1. A主机构建一个ICMP数据包,ICMP协议把这个数据包和A主机的IP地址交给IP层协议;
2. IP层协议把A主机IP地址、一些控制信息和B主机的IP地址构建一个IP数据包,IP层协议获得B主机的MAC地址(如何获得B主机的MAC地址,下面会写),IP层协议把IP数据包和B主机的MAC地址一并交给数据链路层协议;
3. 数据链路层构建一个数据帧,目的地址是IP层传来的B主机的MAC地址,源地址是本主机的MAC地址,加上一些控制信息,通过网络发送出去。
B主机接收端:
1. B主机接收到数据帧后,先检查目的地址,是否和本主机的MAC地址一致,如果一致,就接收,否则丢弃;
2. 接收后检查数据帧,从帧中提取IP数据包,交给本主机的IP层协议,IP层协议检查后,将有用的信息提取出来交给ICMP协议;
3. ICMP协议处理后,立刻构建一个应答包,发送给A主机,过程和A主机发送ICMP请求包给B主机一样。
IP层如何获得B主机的MAC地址呢?
举个例子:
A主机:10.10.10.1 子网掩码:255.255.255.0
这里有三种场景:
1 自己与自己通信
答:当ping 10.10.10.1时,计算机和自己的IP相比较,如果相等,会发给自己,我们称之为精确匹配。
2 A主机和B主机在同一网段
答:当ping 10.10.10.2时,计算机和自己的IP相比较,发现并不相等,退而求其次,使用模糊匹配,用自己的子网掩码255.255.255.0与10.10.10.2做按位与,得到网段10.10.10,这个和自己在一个网段(一个广播域),就直接在本网络内查找这台机器的MAC。如果以前两个机器有过通信,在A主机的ARP缓存表中应该有B主机IP地址与其MAC的映射关系,如果没有,就发一个ARP请求广播,得到B主机的MAC,完成通信。
3 A主机和B主机不在同一网段
答:当ping 8.8.8.8 时,计算机和自己的IP相比较,发现并不相等,退而求其次,使用模糊匹配,用自己的掩码255.255.255.0 与8.8.8.8做按位与,得到网段8.8.8,和自己10.10.10不在一个网段,需要使用最模糊的匹配,一般会匹配0.0.0.0/0,这个是最后的选择,一般指向网关,由于网关和自己在一个网段(一个广播域),所以可以广播ARP得到网关的MAC,然后把ping 包发给网关,完成通信。
参考:
1 https://blog.csdn.net/zhuying_linux/article/details/6770730
2 https://www.zhihu.com/question/29723388
A主机ping B主机发生了什么?的更多相关文章
- 主机ping不同虚拟机
前提:今天加班时,一不小时把网线踢掉了,然而虚拟机怎么都ping不通了,试过很多办法; 最后.... 简单粗暴的重启了我的主机,对,是主机,不是虚拟机,ok,问题解决; over...
- 局域网ping Linux主机名
1.Windows ping Linux主机名 #ubuntu 下 sudo apt-get install winbind #centos 下 yum install samba service n ...
- 开发板ping不通主机和虚拟机的看过来(转载)!
前几天在做uboot下用tftp下载文件到开发板的实验时,为了能解决开发板ping不通主机和虚拟机的问题,可谓绞尽脑汁,正所谓久病成医,虽然为了这一小问题废了我那么长时间,但我在解决问题的同时也学到了 ...
- 【整理】虚拟机和主机ping不通解决办法
检查几个方面: 1.检查虚拟网卡有没有被禁用2.检查虚拟机与物理机是否在一个VMNet中3.检查虚拟机的IP地址与物理机对应的VMNet是否在一个网段4.检查虚拟机与物理机的防火墙是否允许PING, ...
- 虚拟机ping不通主机,但是主机可以ping通虚拟机(转载)
我在Windows7系统安装了虚拟机,通过虚拟机安装了Ubuntu13.04,我设置的主机与虚拟机的连接方式是桥接,安装好后,发现虚拟机ping不通主机,但是主机可以ping通虚拟机. 我的操作是:关 ...
- 防火墙设置:虚拟机ping不通主机,但是主机可以ping通虚拟机(转载)
我在Windows7系统安装了虚拟机,通过虚拟机安装了Ubuntu13.04,我设置的主机与虚拟机的连接方式是桥接,安装好后,发现虚拟机ping不通主机,但是主机可以ping通虚拟机. 我的操作是:关 ...
- 虚拟机ping不通主机
centos ping不通主机 首先检查网络设备 ifconfig -a 如果有eth0 , 又存在 eth1 . 那么service eth1 stop 然后在ping主机.(以上前提是网络地址设 ...
- tiny210 u-boot 网络ping不通主机解决方案
站在巨人的肩膀上: http://blog.csdn.net/liukun321/article/details/7438880 http://www.arm9home.net/read.php?ti ...
- 主机ping通虚拟机,虚拟机ping通主机解决方法(NAT模式)
有时候需要用虚拟机和宿主机模拟做数据交互,ping不通是件很烦人的事,本文以net模式解决这一问题. 宿主机系统:window7 虚拟机系统:CentOs7 连接方式:NAT模式 主机ping通虚拟机 ...
随机推荐
- 【JVM学习笔记】扩展类加载器
扩展类加载器独有的特点,代码如下 public class Sample { } public class Test { static { System.out.println("Test ...
- Gitlab-Runner基础教程
一.Intro jenkins和runner,作为主流自动化运维工具来说,两者的大思路其实是一样的,就是将我们提交到代码仓库的代码拉到jenkins或者runner运行的机器里,然后执行一系列的命令( ...
- python装饰器使用详解
装饰器 '''装饰器:就是闭包(闭包的一个应用场景) -- 把要被装饰的函数作为外层函数的参数通过闭包操作后返回一个替代版函数 优点: -- 丰富了原有函数的功能 -- 提高了程序的可拓展性''' 开 ...
- 【Python】【demo实验10】【练习实例】【打印斐波那契数列】
斐波那契数列介绍: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子 ...
- 第一章 Scala基础篇
目录 一.Scala基础语法 (一) 变量.类型.操作符 1.变量申明 2.字符串 3.数据类型 4.操作符 (二)循环判断 1.块表达式 2.条件表达式 3.循环表达式 (三)方法和函数 1.方法 ...
- Golang 无法下载依赖 golang.org (GoLand解决方法)
如下图所示将Proxy设置为:https://goproxy.io/
- Jenkins+Github持续环境搭建
⒈前提要求 Jenkins与Github配合实现持续集成需要注意以下几点: 1.Jenkins需要部署在外网上,因为内网地址是无法访问Github的.这一点可以通过租用阿里云.腾讯云等云平台提供的云服 ...
- 小白必看的Python爬虫流程
定义: 网络爬虫(Web Spider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本. 简介: 网络蜘蛛是一个很形象的名字.如果把互联网比喻成一个蜘蛛网,那么Spider ...
- 不同主机的docker内容器通过直接路由的方式进行通信
引用文章链接:https://www.cnblogs.com/xiao987334176/p/10049844.html 六.操作总结 修改不同主机上docker默认的网络参数 主机1:192.168 ...
- ssh无密登录_集群分发脚本xsync
1.ssh免密登录 ssh ip地址 [root@192 ~]# ssh 192.168.1.102 root@192.168.1.102's password: Last login: Mon Fe ...