ping原理和Traceroute原理

ping原理和Traceroute原理ping原理ping主要是用来探测主机和主机之间是否可以进行通信,如果不能ping到某台主机,表示不能与这台主机建立连接。ping使用的是ICMP协议,他发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机,如果源主机在一定时间内收到应答,表明主机可达。ICMP协议是通过IP协议发送的,IP协议是无连接的,不可靠的数据报协议。ping是用来检测…

大家好,又见面了,我是你们的朋友全栈君。

ping原理

ping主要是用来探测主机和主机之间是否可以进行通信,如果不能ping到某台主机,表示不能与这台主机建立连接。ping使用的是ICMP协议,他发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机,如果源主机在一定时间内收到应答,表明主机可达。ICMP协议是通过IP协议发送的,IP协议是无连接的,不可靠的数据报协议。
ping是用来检测网络是否畅通或者网络连接速度的命令
在同一网段内:
在主机 A 上运行“Ping 192.168.0.5”后,都发生了些什么呢?
首先,Ping 命令会构建一个固定格式的 ICMP 请求数据包, 然后由 ICMP 协议将这个数据包连同地址“192.168.0.5”一起 交给IP 层协议,IP 层协议将以地址 “192.168.0.5”作为目的地址。本机 IP 地址作为源地址,加上一些其他的控制信息,构建一 个 IP 数据包,并想办法得到 192.168.0.5 的MAC 地址,以便交给数据链路层构建一个数据帧。关键就在这里IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的 MAC,如果以前两机有过通信,在 A 机的 ARP 缓存表应该 有 B 机 IP 与其 MAC 的映射关系,如果没有,就发一个 ARP 请求广播,得到 B 机的 MAC, 一并交给数据链路层。后者构建一个数据帧,目的地址是 IP 层传过来的物理地址,源地址则是本机的MAC地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送 出去。 主机 B 收到这个数据帧后,先检查它的目的地址,并和本机的MAC地址对比,如符合, 则接收;否则丢弃。接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层 协议。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议,后者处理后,马上构建 一个 ICMP 应答包,发送给主机 A,其过程和主机 A 发送 ICMP 请求包到主机 B 一模一样。
在不同网段内:
在主机 A 上运行“Ping 192.168.1.4”后,开始跟上面一样,到了怎样得到 MAC 地址时,IP 协议通过计算发现 D 机与自己不在同一网段内,就直接将交由路由处理,也就是将路由的 MAC 取过来,至于怎样得到路由的 MAC,跟上面一样,先在 ARP 缓存表找,找不到就广播吧。路由得到这个数据帧后,再跟主机 D 进行联系,如果找不到,就向主机 A 返回一个 超时的信息。

Traceroute原理

Traceroute是用来侦测由源主机到目的主机所经过的路由的情况的重要工具,也是最简洁的工具,尽管ping可以进行侦测,但是ping受到IP头的限制(IP首部字段最多只能放9个IP地址),ping不能完全记录所经过的路由器,所以才会引入Traceroute。
Traceroute原理:其实Traceroute的原理很简单,他收到目的主机IP后,首先给目的主机发送一个TTL=1(TTL指生存时间)的udp数据包,而经过的第一个路由器收到这个数据包之后,自动把TTL减去1,而TTL变为0之后,路由器就将这个数据包抛弃了,并同时产生一个主机不可达的ICMP超时数据报给主机。主机收到这个ICMP数据报以后,会发送一个TTL=2的数据报给目的主机,然后刺激第二个路由器给主机发送ICMP数据报,如此反复,直到到达目的主机。这样Traceroute就可以拿到所有路由器的IP,从而避开IP头只能记录有限路由的IP地址。
那么我们怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较小的端口,比如说80,比如说23,等等。而traceroute发送的是端口>30000(真变态)的UDP报,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道目的主机到了。

参考:
(1)https://blog.csdn.net/zhuying_linux/article/details/6770730
(2)https://blog.csdn.net/inject2006/article/details/2139149
(3)《TCP/IP详解卷1》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162518.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux中文件重命名_如何在Linux中重命名文件?

    linux中文件重命名_如何在Linux中重命名文件?linux中文件重命名ThistutorialwillwalkyouthroughthesimplestepstorenameafileinLinux.本教程将引导您完成在Linux中重命名文件的简单步骤。It’sgoingtobeaverysimpleandstraightforwardtutorialevenifyouareabe…

    2022年9月11日
    0
  • Computer Science 学习第四章–CPU 指令集和指令处理

    Computer Science 学习第四章–CPU 指令集和指令处理

    2022年1月9日
    48
  • 最新版本kali安装教程(VMware版本)

    最新版本kali安装教程(VMware版本)一、Kali是什么?KaliLinux是基于Debian的Linux发行版,设计用于数字取证操作系统。每一季度更新一次。由OffensiveSecurityLtd维护和资助。最先由OffensiveSecurity的MatiAharoni和DevonKearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行版。二、下载kali系统文件温馨提示:在阅读本教程前,请确保你本机已经安装好VMwareWorkstat…

    2022年6月6日
    23
  • C++\QT常见面试题[通俗易懂]

    C++\QT常见面试题[通俗易懂]1.C与C++的区别2.深拷贝和浅拷贝的区别3.指针和引用的区别4.什么是面向对象,面向对象的三大特征是什么?5.static关键字的用法6.const关键字的用法7.什么是函数重载8.创建的对象有几种方式,有什么区别9.什么是构造函数10.什么是this指针11.抽象类是什么12.什么是封装、继承、多态13.私有继承,保护继承和公有继承的区别14.友元函数15.new和delete16.C++STL容器有哪些17.什么是面向对象编程的开放封闭原则?18.内联函数与宏的区

    2022年6月25日
    89
  • 滑动touchmove touchend遇到的问题[通俗易懂]

    今天遇到一个问题,在优化touchmove时候使用了防抖,touchmove和touchend中都改变了元素的样式,问题就产生了。函数节流和防抖都是使用setTimeout做延时,当拖动动作完成之后会触发touchend,touchmove有延时,可能会造成touchend执行之后才执行了touchmove解决办法可以给touchend加一个setTimeout,delay大于节流或者防抖的时…

    2022年4月13日
    167
  • 安利一款Python开发的仿Linux树形显示目录tree命令「建议收藏」

    安利一款Python开发的仿Linux树形显示目录tree命令「建议收藏」大家好,我是小小明,今天要带大家通过python来实现仿Linux的tree命令。文章目录Linux与Windows的tree命令Linux的tree命令演示Windows的tree命令Python自制tree命令os模块基础代码Rich库关于tree模块的官方示例调用Tree模块实现仿Linux树形显示目录效果安装自定义tree模块首先看看Linux下的tree命令效果如何:Linux与Windows的tree命令Linux的tree命令演示在CentOS的Linux系统下,我们可以再使用yum

    2022年7月25日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号