• 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 包发给网关,完成通信。

     


     参考:

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

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

  • 相关阅读:
    Leecode no.22 括号生成
    修改mysql数据库的时区
    Django 路由层之反向解析
    学习 Django 的几个教程网址
    leetcode周赛 242
    AcWing第二次热身赛
    AcWing夏季每日一题--最长公共子序列
    AcWIng夏季每日一题--序列最大收益
    leetcode周赛 241
    第十二届蓝桥杯C++ B组
  • 原文地址:https://www.cnblogs.com/zkfopen/p/11228789.html
Copyright © 2020-2023  润新知