计算机网络面试题: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 包发给网关,完成通信。


 参考:

https://blog.csdn.net/zhuying_linux/article/details/6770730

https://www.zhihu.com/question/29723388

A主机ping B主机发生了什么?的更多相关文章

  1. 主机ping不同虚拟机

    前提:今天加班时,一不小时把网线踢掉了,然而虚拟机怎么都ping不通了,试过很多办法; 最后.... 简单粗暴的重启了我的主机,对,是主机,不是虚拟机,ok,问题解决; over...

  2. 局域网ping Linux主机名

    1.Windows ping Linux主机名 #ubuntu 下 sudo apt-get install winbind #centos 下 yum install samba service n ...

  3. 开发板ping不通主机和虚拟机的看过来(转载)!

    前几天在做uboot下用tftp下载文件到开发板的实验时,为了能解决开发板ping不通主机和虚拟机的问题,可谓绞尽脑汁,正所谓久病成医,虽然为了这一小问题废了我那么长时间,但我在解决问题的同时也学到了 ...

  4. 【整理】虚拟机和主机ping不通解决办法

     检查几个方面: 1.检查虚拟网卡有没有被禁用2.检查虚拟机与物理机是否在一个VMNet中3.检查虚拟机的IP地址与物理机对应的VMNet是否在一个网段4.检查虚拟机与物理机的防火墙是否允许PING, ...

  5. 虚拟机ping不通主机,但是主机可以ping通虚拟机(转载)

    我在Windows7系统安装了虚拟机,通过虚拟机安装了Ubuntu13.04,我设置的主机与虚拟机的连接方式是桥接,安装好后,发现虚拟机ping不通主机,但是主机可以ping通虚拟机. 我的操作是:关 ...

  6. 防火墙设置:虚拟机ping不通主机,但是主机可以ping通虚拟机(转载)

    我在Windows7系统安装了虚拟机,通过虚拟机安装了Ubuntu13.04,我设置的主机与虚拟机的连接方式是桥接,安装好后,发现虚拟机ping不通主机,但是主机可以ping通虚拟机. 我的操作是:关 ...

  7. 虚拟机ping不通主机

    centos ping不通主机 首先检查网络设备 ifconfig -a 如果有eth0 , 又存在 eth1 . 那么service eth1 stop  然后在ping主机.(以上前提是网络地址设 ...

  8. tiny210 u-boot 网络ping不通主机解决方案

    站在巨人的肩膀上: http://blog.csdn.net/liukun321/article/details/7438880 http://www.arm9home.net/read.php?ti ...

  9. 主机ping通虚拟机,虚拟机ping通主机解决方法(NAT模式)

    有时候需要用虚拟机和宿主机模拟做数据交互,ping不通是件很烦人的事,本文以net模式解决这一问题. 宿主机系统:window7 虚拟机系统:CentOs7 连接方式:NAT模式 主机ping通虚拟机 ...

随机推荐

  1. node 笔记整理

    node 合并多个请求的数据 function getList1(num) { var url= "netease/search?keyword=独孤天下&type=song& ...

  2. EasyTouch5插件使用 EasyTouch手势检测功能

    (1)导入EasyTouch5插件,注意该插件对Unity有版本要求 (2)首先在场景中创建一个EasyTouch,这个是必需的,它是进行检测的核心组件,场景中有任何物体使用了EasyTouch的东西 ...

  3. mapreduce案例:获取PI的值

    mapreduce案例:获取PI的值 * content:核心思想是向以(0,0),(0,1),(1,0),(1,1)为顶点的正方形中投掷随机点. * 统计(0.5,0.5)为圆心的单位圆中落点占总落 ...

  4. Java 基础篇之lambda

    Lambda 示例 public interface Eatable { void taste(); } public interface Flyable { void fly(String weat ...

  5. Go语言实例化结构体——为结构体分配内存并初始化

    转自: http://c.biancheng.net/view/66.html 结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正地分配内存.因此必须在定义结构体并实例化后才能使用结构 ...

  6. Stream系列(十五)File方法使用

    文件读写 视频讲解:https://www.bilibili.com/video/av78612785/ EmployeeTestCase.java package com.example.demo; ...

  7. 2019牛客暑期多校训练营(第八场)-C CDMA(递归构造)

    题目链接:https://ac.nowcoder.com/acm/contest/888/C 题意:输入m(为2的n次幂,n<=10),构造一个m*m的矩阵满足任意不同的两行的元素乘积和为0. ...

  8. 【转帖】我以为我对Kafka很了解,直到我看了这篇文章

    我以为我对Kafka很了解,直到我看了这篇文章 2019-08-12 18:05 https://www.sohu.com/a/333235171_463994?spm=smpc.author.fd- ...

  9. [转帖]socks5 协议简介

    socks5 协议简介 http://zhihan.me/network/2017/09/24/socks5-protocol/ 什么是socks5 或许你没听说过socks5,但你一定听说过Shad ...

  10. BigData进阶--Spark中的函数与符号

    转自:https://blog.csdn.net/YSC1123/article/details/78905090 1.Character.isDigit() 判断是否为数字 2.Character. ...