2020-08-02:输入ping IP 后敲回车,发包前会发生什么?
福哥答案2020-08-02:
首先根据目的IP和路由表决定走哪个网卡,再根据网卡的子网掩码地址判断目的IP是否在子网内。如果不在则会通过arp缓存查询IP的网卡地址,不存在的话会通过广播询问目的IP的mac地址,得到后就开始发包了,同时mac地址也会被arp缓存起来。
知乎答案:
大体上思路差不多,先查路由表,再查ARP表,最后发送ICMP(ping)包,
(1) 查路由表
目的: 找到网关,
由于网关都会跟本地某一个网卡在一个网段,因此发包的网卡也就找到了,
如果你网关跟本地任何一个网卡都没在一个网段,那么配置此网关时,不会在路由表里生成路由,也就是配置不生效。
怎么实现:
源主机系统拿要访问的目的IP跟路由表的每一条路由项进行匹配,先跟路由项的掩码进行与运算,得出目的网络号,再与该路由项的目的网络进行比对。
如果相同,则记录该路由项的网关,如果不同,也就无需记录,找完这项,继续查询找下一项,直到查完整个路由表。
查完以后,存在三种情况,一个网关都找不到,找到一个网关,找到多个网关。
一个网关都找不到,也就意味着到目的IP路由不可达,发送失败。找到一个网关,那就可以下一步,找ARP表。
找到多个网关,根据最长匹配机制,选出一个,如果根据最长匹配机制还是找不出,那就随机选择一个,这里有太多细节,一般对于路由器而言,才存在这种可能,对于我们平时的主机而言,这种情况百年难遇,不做过多讨论。
看到这里,可能有同学问,每发一个包,都要把路由表找个遍,岂不是很慢?是的,不过我们平时路由表里面也没有几条路由,漫不了多少。
但对于运营商的路由器而言,可是百万级别的路由,而且数据发送频率不要太快,是的,因此在运营商的路由器里面有个快速转发表,由专业的芯片实现,快速转发表,其实就是经常查找的路由项组成的缓存,优先级比路由表高,缓存表找不到才查路由表。当然还有它技术的结合,不做那一块,没必要了解那么多,就此打住。
(2) 查找ARP表
目的: 找到目的IP的MAC地址或者网关的MAC地址
怎么实现:
上一步,查找要路由表后,找不到网关就到不了这一步,找到网关后(无论是一选一,还是多选一,到这一步就剩一个)。
网关可能有两种情况,一是为本地网卡ip或on-link (windows系统这么叫,linux或者其他路由器可能叫directly connected,反正都一个意思),一是为第三方ip地址(该ip地址,一定会很本地网卡的某一个在一个网段,原因前面说了)。
如果网关为本地网卡ip或on-link,说明目的IP地址跟自己的某个网卡在一个网段,也就是我们说的直连。
如果网关为第三方IP,说明目的IP地址跟自己任何一个网卡都不在一个网段,也就是跨网段。
(2.1) 当直连时
源主机就会拿目的IP地址查ARP表,找其对应的MAC地址。
如果ARP表里没有就发送ARP广播包,去问连在同一个网络内的所有设备,如果某一台设备拥有此目的IP,它就回复其MAC地址。
本机收到后会缓存下来,写到ARP表,方便下一次查找,当然不是永久存储,有超时时间,一般是五分钟。
如果没有人回复,也就意味着查找ARP表失败,因此发送数据失败。
(2.2) 当跨网段时
其实跟一步一样,不同的是,拿网关的IP去查,而不是目的IP,这样子要么查找失败,要么找到网关的MAC地址。
(3) 发送ping包
到了这一步,也就意味着要么找到目的IP的MAC地址,要么找到目的IP所经过的网关的MAC地址。
源主机利用目地主机的IP为目的IP,以目的IP的MAC地址或者网关的MAC地址为目的MAC。
利用本地多网卡中与目的网关在一个网段的网卡的IP地址为源IP,以其MAC地址为的源MAC。
开始构造ICMP报文,从上一步选出的网卡发送出去。
(4) 后续
网关收到后如何处理?目的主机收到后如何处理?
不说了,手机打了一个小时,我太难了, ,把这个搞清楚,也算半个CCNA了吧。
2020-08-02:输入ping IP 后敲回车,发包前会发生什么?的更多相关文章
- 2020-07-02:在浏览器输入一个url后按回车,会发生什么?
福哥答案2020-07-02: 简单回答: 域名解析. 建立TCP连接. 请求. 处理. 响应. 释放TCP连接. 页面渲染. 中级回答: 域名解析 浏览器DNS缓存. 操作系统DNS缓存. 路由器缓 ...
- 用WPF写一个登录界面,我想在输入完密码后按回车就能够验证登陆,而不需要用鼠标单击登陆按钮
在wpf中,将按钮的IsDefault设置为true
- CENTOS7配置静态IP后无法ping通外部网络的问题
我今天想谈论的并不是如何配置静态IP,这样的话题已经有好多高手再谈. 我想谈的是为什么,我按照他们的教程无论如何也要发生各种问题,没办法连接外网的问题. 先给大家看我的最终版配置方案:我只修改了一个文 ...
- 网易笔试题:浏览器中输入一个url后回车到返回页面信息的过程
You enter a URL into the browser输入一个url地址 The browser looks up the IP address for the domain name浏览器 ...
- 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程
第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...
- 您为这个网络适配器输入的IP地址xxx.xxx.xxx.xx已经分配给另一个适配器xxx...
您为这个网络适配器输入的IP地址xxx.xxx.xxx.xx已经分配给另一个适配器‘xxx NIC’.... 2008年11月03日 星期一 08:51 问题现象: 在网卡的TCP/IP属性中无法 ...
- vmware中nat模式中使用静态ip后无法上网的问题
在/etc/network/interfaces中添加静态ip auto eth0iface eth0 inet staticaddress 192.168.31.133netmask 255.255 ...
- Linux设置静态IP后出现的几种问题
一.设置静态IP后无法重启网卡 如下图所示 原因分析:control process exited with error code.控制进程存在错误代码. 解决方案:可以检查网卡配置文件是否修改错误. ...
- 经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...
随机推荐
- UML学习笔记—基本概念和初始阶段
chpater1 1.什么是分析和设计 分析:对问题和需求的调查研究 设计:满足需求的概念上的解决方案 做正确的事(分析)和正确地做事(设计) 2.什么是Object-Oriented-Analysi ...
- Burp Suite Scanner Module - 扫描模块
Burp Suite Professional 和Enterprise Version的Scaner功能较丰富. 以Professional版本为例,包含Issue activity, Scan qu ...
- Dresdon二次开发
在上一篇文章中,我们已经对Dresdon所提供的功能进行了简单的介绍.在这篇文章中,我们将介绍如何基于Dresdon进行二次开发. Dresdon的扩展点 就像上一篇文章所介绍的那样,Dresdon主 ...
- 搭建kubernetes集群
什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...
- elementUI form表单验证不通过的三个原因
<el-form :model="form" :rules="rules"> <el-form-item prop="input&q ...
- Jarvisoj-web Login
题目入口: http://web.jarvisoj.com:32772/ 有个登陆框,随便提交参数然后bp抓包 get到了一个Hint,给了sql查询的语句 select * from `admin` ...
- 第33课 C++中的字符串
1. 历史遗留问题及解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串------c语言是用字符数组实现字符串 ②C语言用字符数组和一组函数模拟字符串操作 ③C语言不支持自定义类型,因此无 ...
- 仓库储存,存在添加减少,不存在插入ON DUPLICATE KEY UPDATE
原文链接:https://blog.csdn.net/qq_42269354/article/details/100589640 首先声明:ON DUPLICATE KEY UPDATE 为MySQL ...
- JavaScript高级程序设计(第三版) 6/25
第六章面向对象的程序设计 1.定义只有在内部才用的特性(attribute)时,描述了属性(property)的各种特征.这些特性是为了实现JavaScript引擎用的,因此在JavaScript中不 ...
- Python os.lchflags() 方法
概述 os.lchflags() 方法用于设置路径的标记为数字标记,类似 chflags(),但是没有软链接.高佣联盟 www.cgewang.com 只支持在 Unix 下使用. 语法 lchfla ...