Ping程序就是调用的就是ICMP报文。利用的是ICMP的应答和回显请求。来看下具体的ping报文。 Request的报文类型为8

Reply的类型为0

通过具体的ping报文可以看到ping报文的大小为84字节。其中ICMP报文56个字节,再加上20个字节的IP首部和8个字节的ICMP首部。因此IP报文的总长度为84字节

我们也可以改变ICMP的报文大小,通过-s命令。Ping www.sina.com.cn –s 32. 将ICMP报文大小设置为32字节。加上20字节的IP首部以及8字节的ICMP首部,总共60个字节

Ping程序中还可以通过设置ping的次数,通过-c。ping www.sina.com.cn –c 3.在ping了3次以后,ping程序自动停止

其他ping的字段设置可以通过man ping查看,一般用的最多的就是-s和-c。

IP记录路由选项:ping程序还可以记录所经过路径的IP地址。这个通过-R的方法来实现。Ping程序在发送出去的IP数据报中设置IP RR选项。这样每个处理该数据报的路由器都把它的IP地址放入选项字段中。当数据包达到目的端时,IP地址清单就复制到ICMP回显应答中。当ping程序收到回显应答时,它就打印出这份IP地址清单。

数据格式如下:由于IP首部中的首部长度字段只有4bit,因此IP首部最长只能包含15个32bit的字=60字节。IP首部为20个字节。RR选项用去3个字节。这样只剩下37个字节来存放IP地址清单,一个IP地址为4个字节,因此最大也就只能存放9个IP地址。在当前的互联网场景下,9个IP地址太少了。一半情况下都满足不了要求

结果显示如下,我们用ping局域网192.168.0.1的例子来看,首先显示的是去的路径192.168.0.8->192.168.0.1然后是回来的路径192.168.0.1->192.168.0.8

Traceroute:

前面讲到IP可以记录路由选项。但是IP首部中留给选项空间有限,不可能存放太多的路径,最多只能存放9个地址,对于现在的网络来说远远不够,那么如果我们想探究网络路径可以用traceroute命令。

Traceroute主要运用的是ttl原理

1 首先第一个包发出,ttl为1. 由于目的路由器为将ttl减一,因此返回ICMP超时给主机,记录返回的路由地址

2 然后主机继续发出ICMP报文,设置ttl为2,这样在经过第二个路由器的时候,返回ICMP超时给主机。记录返回的路由地址

.。。。。。。

一直重复这个过程,每次都将ttl在上一次的基础上加一,直到达到目的地。这样就可以记录所有经过的路由地址

但是在windows和linux下命令名称不一样,而且实现方式也不太一样

Windows下用的命令是tracert,linux下用的是traceroute

实现方式来说:

Windows下使用的是ICMP报文,而linux下使用的是UDP报文。这个有什么区别呢

看下windows下的结果:

Linux下的结果:

从最终的执行结果来看,看不出什么差异,

继续看下报文的结果,首先来看windows下的

从报文中可以看出ttl不断的在增长。

而且主机发出的报文全都是ICMP报文。

Linux下的报文可以看到主机发出的报文都是UDP报文,而且每个报文都带有一个目的端口,端口每次都在增长。

带的是一个UDP报文,而非ICMP报文

但是从对端反馈回的报文都是ICMP报文。且最终目的地址反馈一个port unreachable的报文。这个端口不可达的报文在windows系统中并没有找到。

从上面的报文对比可以看到windows下和linux下的traceroute报文是不一样的。Windows下是纯粹使用ICMP报文。直到找到目的地址,并记录经过的路径

而linux下是发出一个UDP报文。且同样也设置TTL时长,但选择一个不可能的值作为UDP端口(大于30000),使目的主机的任何一个应用程序都不可能使用这个端口。最终目的主机会产生一份端口不可达的错误。此时就判断结束。具体流程参考下图

TCP/IP协议之ping和traceroute的更多相关文章

  1. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  2. Android网络编程系列 一 TCP/IP协议族之网际层

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 网际层包括:IP.ICMP.IGMP 以及处在网际层实际工作在链路层的 ARP 和 RARP等等协议. 1.IP协议 互联网 ...

  3. 【转载】TCP /IP协议详解

    首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...

  4. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  5. 网络编程基础之C/S架构和TCP/IP协议

    一.何谓C/S架构 C指的是client(客户端软件),S指的是Server(服务端软件),既然我们的的标题是网络编程基础, 那我们就一起来学习怎样写一个C/S架构的软件,实现服务端与客户端软件基于网 ...

  6. TCP /IP协议详解【转】

    转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...

  7. 【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)

    一.TCP/IP协议簇(DoD参考模型) 用于简化OSI层次,以及相关的标准. 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信 是由一组不 ...

  8. TCP/IP协议学习-1.概述

    目录 TCP/IP协议概述 分层 延伸知识 FTP例子 为什么需要网络层和传输层 TCP/IP的分层 封装 分用 总结 本文主要摘抄自书籍<TCP/IP详解卷一:协议>与TCP协议相关内容 ...

  9. 003 TCP/IP协议详解(二)

    一.ping ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分.利用"ping"命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障. 例如:当我们某一 ...

随机推荐

  1. 表单的get和post使用情景

    GET和POST两种方法都是将数据送到服务器,但你该用哪一种呢? HTTP标准包含这两种方法是为了达到不同的目的.POST用于创建资源,资源的内容会被编入HTTP请示的内容中.例如,处理订货表单.在数 ...

  2. 模拟jquery底层链式编程

    //特点1:快级作用域,程序启动自动执行 //内部的成员变量,外部无法访问(除了var) //简单的函数链式调用 function Dog(){ this.run=function(){ alert( ...

  3. centOS下服务启动

    nginx应该在mongodb之后启动,也可以通过chkconfig <服务名> on将服务设置为开机自启动.具体命令如下 service mysql start service memc ...

  4. ByteBuffer源码分析

    在进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是JDK NIO类库中提供的java.nio.Buffer,实现类如下: 在使用NIO编程时,最常用的是其中的ByteBuffer,本篇分析B ...

  5. RabbitMQ windows安装官方文档翻译!

    RabbitMQ Windows安装和配置 下载地址 官网windows下载地址: http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/r ...

  6. Mac QQ 怎么清除聊天记录

    在 Mac 电脑上登录 QQ 以后,点击顶部菜单中“应用”下的“消息管理器”选项,如图所示

  7. 【Android Developers Training】 80. 管理网络使用

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. accp8.0转换教材第1章多线程理解与练习

    一.单词部分: ①process进程 ②current当前的③thread线程④runnable可获取的 ⑤interrupt中断⑥join加入⑦yield产生⑧synchronize同时发生 二.预 ...

  9. javascript之原型(prototype)

    今天是第一次写博客,写点在javascript中重要的一个概念----原型(prototype): 原型,顾名思义,就是一切事物的模板. 柏拉图在<理想国>卷10中说:"床不是有 ...

  10. 一个Ruby静态代码分析器 rubocop

    A Ruby static code analyzer, based on the community Ruby style guide. http://rubocop.readthedocs.io ...