1、ping是用于测试对方主机是否可达的命令,其实本质上就是echo类型的ICMP报文。同时,ping还能用于计算RTT(round-trip time),即两台主机间的往返时延。

2、随着网络安全意识的增加,路由器的访问权限控制和防火墙等网络安全措施的使用,使得主机的可达性不仅仅取决于网络层的状况,而且也与协议的类型和端口号等等其他因素有关,所以现在ping指令的失败并不能代表目的主机就是不可达的。

3、IP record route:许多版本的ping命令在添加了-R的选项后,能够让数据报经过的每个路由器都在IP数据报的头部的可选部分(IP数据报头部最大60个字节,紧跟20个字节的固定首部后面的就是可选部分)填入自己的IP地址。当数据报到达目的主机后,再将这些IP地址填入ICMP echo的回复报文中,并且返回路径上的路由器也进行同样操作。最后,源主机就能从ping命令的返回报文中解析出与目的主机的整个交互过程需要经过那些路由器了。

当然,我们可以发现这样的机制背后是存在问题的,因为IP数据报头部的可选字段最多只有40个字节。在这40个字节里还要减去和record route相关的三个标识字节,最后能用的其实只有37个字节,也就是说只能存放9个IP v4的地址。这在现在的互联网环境下是远远不够的。

4、IP timestamp option:这和IP record route类似,不过是将原来的IP地址改为经过路由器的时间。并且它除了与record route一样的三个标识字节外,还有四个位的overflow字段用于标识记录的timestamp是否溢出,还有另外四个位的flags字段用于标识不同的timestamp类型,其中值得一提的一种类型是,在记录timestamp的同时也记录了该路由器的IP地址。其实我们仔细想想就能发现,单单记录经过路由器时的时间戳是没有多大意义的,但是如果把IP地址也记录下来,那么IP数据报头部的可选字段最多就只能记录四条记录了。

5、既然IP route record 最多只能记录9个IP地址,那么有没有办法克服这个缺陷呢?于是traceroute这个命令就出现了,它能够记录下IP数据报从源主机到目的主机经过的所有路由器的IP地址(与ping不同,它记录的是路由器的入口IP)。它的原理其实十分简单:我们都知道IP数据报头部有一个TTL字段,用来记录该数据报接下来能经过的最多的路由器的数目,也就是所谓的跳数。当路由器收到一个TTL=0的数据报时,则将其丢弃,并返回源主机一个“time exceeded”类型的ICMP报文,其中包含了该路由器的IP地址。由此我们可以想到,只要依次将发送出去的数据报的TTL字段设置为1,2,3...那么我们就能得到前往目的主机上第1,2,3...跳的路由器的地址。

  不过这时候还有一个问题,那就是我们并不能确定TTL为何值时目的主机已到达,原因在于目的主机是会接受TTL=0的数据报的。对于这个问题的解决方法是,将该数据报包含的UDP报文的目的端口字段设置为一个大于30000的值,即该端口很少可能被用到,然后期望目的主机返回一个“port unreachable”的ICMP报文,由此得到到达目的主机需要的跳数。这样traceroute就比较好的解决了IP route record的问题。

《TCP/IP 详解 卷一》读书笔记-----Ping&Traceroute的更多相关文章

  1. 《TCP/IP详解》读书笔记

    本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层   一.整体概念   1.各层协议的关系,只讨论四层 各层常见的协议:   网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...

  2. TCP/IP详解 卷一学习笔记(转载)

    https://blog.csdn.net/cpcpcp123/article/details/51259498

  3. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  4. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  5. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  6. TCP/IP详解 卷一(第七、八章 Ping、Traceroute程序)

    Ping程序 Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达. 该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答. ping程序还能测出到这台主机的往返时 ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——02

    2013-08-16 20:07:11 1.3 TCP/IP的分层 这是一个很好的图,要多看!!图上有些细节会在今后的笔记中提到,看不懂不必深究. IP是网络层上的主要协议,同时被TCP和UDP(这两 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——18

    2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——14

    2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...

随机推荐

  1. csharp: 用Enterprise Library对象实体绑定数据

    Enterprise Library: https://msdn.microsoft.com/en-us/library/ff648951.aspx /// <summary> /// 是 ...

  2. sql2008 查询字段所属表

    select a.name as 表名, g.*from sysobjects as a left join syscolumns as b on a.id=b.id left JOIN sys.ex ...

  3. 【背景建模】PBAS

    Pixel-Based Adaptive Segmenter(PBAS)检测算法,是基于像素的无参数模型,该算法结合了SACON和VIBE两个算法的优势,并在这两个算法的基础上改进而来,SACON和V ...

  4. ADO.NET 实体类和数据访问类

    SQL数据库字符串注入攻击:需要使用cmd.Parameters这个集合占位符: @key 代表这个位置用这个占位符占住了 Parameters这个集合中将此占位符所代表的数据补全 cmd.Param ...

  5. [leetcode] Bitwise AND of Numbers Range

    Bitwise AND of Numbers Range Given a range [m, n] where 0 <= m <= n <= 2147483647, return t ...

  6. java多线程系列4-线程池

    在之前的文章中,学习了通过实现java.lang.Runnable来定义类,以及像下面这样创建一个线程来运行任务: Runnable task = new TaskClass(task); new T ...

  7. UnityShader之顶点片段着色器Vertex and Fragment Shader【Shader资料】

    顶点片段着色器 V&F Shader:英文全称Vertex and Fragment Shader,最强大的Shader类型,也是我们在使用ShaderLab中的重点部分,属于可编程管线,使用 ...

  8. iOS支付宝集成详细流程

    实现支付宝支付的准备工作: 1.向支付宝签约,成为支付宝的商户 签约完成后,支付宝会提供一些必要的数据给我们 商户ID:partner 账号ID:seller 即支付宝账号 签约需要营业执照 2.获取 ...

  9. iOS的高德地图标注特定位置

    在开发时有时候遇到项目里面需要展示公司的位置,这时如果导入百度地图什么的就太浪费资源,而且还占内存 这时只要调用自动高德地图的就行了 自己写一个控制器,导入框架 现在导入系统框架只要多打次就能出来了, ...

  10. 一步步学敏捷开发:4、Scrum的3种角色

    在Scrum角色中包括:产品负责人(Product Owner,PO).ScrumMaster(SM).开发团队(Team). 角色:产品负责人(PO) Scrum团队只有一个产品负责人,他负责在限定 ...