Ping程序:

ping程序是通过发送一份ICMP回显请求报文(即ICMP报文的一种,其类型为8,代码为0)给主机,并等待返回ICMP回显应答 来测试另一台主机是否可达

ping程序不用经过传输层,ping服务器一般在内核中实现ICMP的功能。

书中介绍到可以利用ping程序的IP记录路由选项和IP时间戳选项

Traceroute程序(对应win下的tracert命令):

作用:可以跟踪IP数据报从一台主机传到另一台主机所经过的路由

原理

traceroute程序使用ICMP报文和IP首部中的TTL字段(生存周期)来进行工作。

首先它发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL值-1,丢弃该数据报(∵若TTL字段是0,路由器就会将此数据报丢弃),并发回一份超时ICMP报文,这样就得到了该路径中的第一个路由器的地址(∵traceroute程序的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址)。然后traceroute程序发送一份TTL值为2的数据报,这样同理可以得到第二个路由器的地址。继续这个过程直到该数据报到达目的主机。但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地(如何判断是否已经到达目的主机了呢:traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口,如大于30000的端口,使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。这样,traceroute程序所要做的就是区分接受到的ICMP报文是超时还是端口不可达,以判断什么时候结束)。

几个细节注意点:

1.局域网的路由是相对稳定的,因此用traceroute打印出来的响应时间相差不大。而如果用来跟踪广域网的路由,由于广域网的路由信息是动态变化的,而且并不能确定是发送路径耗时还是返回路径耗时较多,因此时间与路由信息只能做为参考。

2.TTL 的选择。如果把TTL设得足够大,是不是一定可以打印出所有路由,比如一个数据包经过300个路由器才到达目的端。当然在现有网络环境下不太可能出现要经 过这么多路由的情况。而TTL信息在IP数据报中只有一个字节,也就是最多能设定到255(256以后又重新从0开始)。设定这个信息的目的,就是防止一 些僵而不化的数据报在网络漫上无目的的游荡而不消失。数据报每经过一个路由器,路由器就把TTL减1(或在该路由器被处理前经过的秒数),总有一个时候会 被减到1,然后路由器会把它丢弃。

3.traceroute的是以收到"端口不可达"为标志来结束的。前提是发出的UDP数据报中要求 的端口在目的主机上没有进程在使用。而如果目的主机上正好有进程在使用这个端口,接收这个包并按正常方式处理,这样traceroute就收不到"端口不可达"的错误了。为了避免出现这种情况,UDP数据报的端口很高(书中的实现是初始值33435,以后每发送一次再加1,端口号最大可以到65535)。 普通程序一般不会使用这些高端口。问题是假如真的存在这种情况时,traceroute会怎么处理?而好像Solaris系统可能会使用高端口,这时又怎 么样。

4. 在发送过程中,要经过许多的路由,到达目的主机前,可能还要经过网关,防火墙,以及其他例如IDS的过滤,发送包能不能到达目的主机还是个问题。而即使到 达了,发送的ICMP信息能不能返回也是个问题。因为沿途经过的关卡太多,遇上黑洞路由器,不转发这些信息的话,那就一点办法也没有了。

TCP/IP详解之:Ping程序、Traceroute程序的更多相关文章

  1. TCP/IP 详解7 Ping指令

    首先介绍一下ping 指令的基本过程:(这部分摘自网络) 我们以下面一个网络为例:有A.B.C.D四台机子,一台路由RA,子网掩码均为255.255.255.0,默认路由为192.168.0.1 1. ...

  2. TCP/IP详解 (转)

    TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...

  3. TCP IP详解(转)

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 网络七层协议简称OSI.TCP/IP刨除了物理层,并把上三层(会话层.表示层和应用层)统称 ...

  4. TCP/IP详解学习笔记 这位仁兄写得太好了

      TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...

  5. 有了Openvswitch和Docker,终于可以做《TCP/IP详解》的实验了!

    所有做过网络编程的程序员,想必都会看<TCP/IP详解>卷一:协议 后来出了第二版,但是由于第一版才是Rechard Stevens的原版,本人还是多次看了第一版. 对这一版印象最深的就是 ...

  6. TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)

    TCP/IP详解学习笔记   这位仁兄写得太好了   TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...

  7. 【转】TCP/IP详解学习笔记(一)

      TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(13)-T ...

  8. 《TCP/IP详解 卷1:协议》系列分享专栏

    <TCP/IP详解卷1:协议>是一本详细的TCP/IP协议指南,计算机网络历久不衰的经典著作之一. 作者理论联系实际,使读者可以轻松掌握TCP/IP的知识.阅读对象为计算机专业学生.教师以 ...

  9. 《TCP/IP详解 卷1:协议》第3章 IP:网际协议

    3.1 引言 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输(见图1-4).许多刚开始接触TCP/IP的人对IP提供不可靠.无连接的数据报 ...

  10. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议

    4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...

随机推荐

  1. Oracle如何禁止并行

    PURPOSE -------   To explain how to disable Parallel Execution on Session/System level     SCOPE &am ...

  2. Reset Password Functionality FAQ

    In this Document   Purpose   Questions and Answers   How can users request a password reset?   How d ...

  3. 使用XmlReader读取xml文件之二

    在.net开发中经常需要读写xml形式的文件(app.config和web.config分别是WinForm和WebForm中使用到的 xml文件的一个特列,并且微软提供了通用的方法,在此就不赘述了) ...

  4. ES6笔记① var 和 let的区别

    let 和 var的区别    答:不同点在于作用域 1.(全局下)首先  let关键字声明的变量是这样写会导致错误. let声明的变量类似于”本地变量“,函数内如何不重新声明,还是会被改变 var ...

  5. boost信号量 boost::interprocess::interprocess_semaphore的用法

    使用方法首先给信号量初始化赋值,可以根据需要设定需要的值,之前在写项目的过程中用这个控制下载的线程个数. boost::interprocess::interprocess_semaphore m_s ...

  6. MySQL的联结(Join)语法

    MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别:   在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如 ...

  7. 【grunt整合版】 30分钟学会使用grunt打包前端代码

    grunt 是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:① 压缩文件② 合并文件③ 简单语法检查 对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩.合并文件,初学, ...

  8. Node.js包管理器:

    Node.js包管理器: 当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require ...

  9. Mining 影响数据挖掘结果的 5 方面

    第一个: 数据类型. 对象的不同属性会用不同的数据类型来描述,如  年龄-->int; 生日 -->date;数据挖掘时也要对不同的类型有不同的对待. 第二个: 数据质量. 数据质量直接影 ...

  10. Java日期时间使用(转)

    Java日期时间使用总结 转自:http://lavasoft.blog.51cto.com/62575/52975/   一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个 ...