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. sqlmap用户手册 [详细]

    当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出哪种数据库 4.根据用户选择,读取哪些数据 sqlmap支持五种不同的注入模式: ...

  2. (转)导出EXCEL时科学计数法问题

    //1)  文本:vnd.ms-excel.numberformat:@ //2)  日期:vnd.ms-excel.numberformat:yyyy/mm/dd //3)  数字:vnd.ms-e ...

  3. Vue的报错:Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'

    Vue的报错:Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>' ...

  4. [转] (CQRS)命令和查询责任分离架构模式(一) 之 什么是CQRS

    什么是CQRS? 这个问题网上可以找到很多资料,未接触过的童鞋请先查看Udi Dahan, Grey Young, Rinat Abdullin,园子里dax.net,以及Jdon社区上的相关文章. ...

  5. AngularJS高级程序设计读书笔记 -- 控制器篇

    作用域组成了一个能够用于在控制器之间形成通信的体系结构. 1. 控制器和作用域的基本原理 控制器就像领域模型与视图之间的纽带, 他给视图提供数据与服务, 并且定义了所需的业务逻辑, 从而将用户行为转换 ...

  6. oracle学习笔记(2)-基本术语

    oracle基本术语 先上图. 相当粗糙的一个图,可能有些地方不够精细,大致结构基本是对的. 逻辑结构上从大到小的依次为文件(file)->表空间(tablespace)->段(segme ...

  7. 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  8. Window文件目录挂载(mount)到linux系统目录下

    1.先在windows下面共享需要挂载的目录. 2.确保linux与windows是在同一个局域网当中. 3.在linux下面创建一个需要挂载到的目录. 4.然后点击"添加",建立 ...

  9. hive集成sentry的sql使用语法

    Sentry权限控制通过Beeline(Hiveserver2 SQL 命令行接口)输入Grant 和 Revoke语句来配置.语法跟现在的一些主流的关系数据库很相似.需要注意的是:当sentry服务 ...

  10. 音乐API之QQ音乐

    欢迎大家来到我的博客,这是我在博客园写的第一篇文章,但不会是最后一篇,希望大家多多关注我,支持我哦!正文开始,今天我们要讲的是QQ音乐的API,都是来源于官方的地址,以前我也想写一个,但百度谷歌之后都 ...