一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4501|回复: 8

TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute

[复制链接]
发表于 2015-4-4 14:47 | 显示全部楼层 |阅读模式
1.IMCP协议介绍

前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。书上的图6-3清楚的给出了错误类型和代码的组合代表的意思。

尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下

  • ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)
  • 目的地址是广播地址或多播地址的IP数据报。
  • 作为链路层广播的数据报。
  • 不是IP分片的第一片。
  • 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。( \! i# ]( F$ P( w- e- Q/ _

虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

  • ping查询(不要告诉我你不知道ping程序)
  • 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)
  • 时间戳查询(可以用来同步时间)
    6 a; _2 A3 R7 k

而差错报文则产生在数据传送发生错误的时候。就不赘述了。

2.ICMP的应用--ping

ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
7 {; A# m& R0 p! ~+ l9 tReply from 10.4.24.1: bytes=32 time<1ms TTL=2556 u2 |5 x+ x) w* v
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
& m* G' Z% w) g3 R4 M. X8 PReply from 10.4.24.1: bytes=32 time<1ms TTL=255, }' ?1 c( F2 n" C# E! r5 X
0 x4 W0 O- t; M9 y5 B! g
Ping statistics for 10.4.24.1:/ M2 X* w( w7 v1 t4 h
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),' l5 y" j+ M% [1 C. W9 `
Approximate round trip times in milli-seconds:( f: s! ~" y  M+ |6 Q4 `$ f
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.net,就可以观察到一些 丢包的现象,而程序运行的时间也会更加的长。% r. e: r" w$ n- ^, n4 y
ping还给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数 据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,无论如何,ip头所能纪录的路由列表是非常的有限。如果要观察路由, 我们还是需要使用更好的工具,就是要讲到的Traceroute(windows下面的名字叫做tracert)。

3.ICMP的应用--Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。

Traceroute的原理是非常非常的有意思,它受到目的主机的IP后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就 知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。

有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号>30000(真变态)的UDP报,所以到达目的主机的时候,目的 主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说Traceroute是一个骗子一点也不为过:)

Traceroute程序里面提供了一些很有用的选项,甚至包含了IP选路的选项,请察看man文档来了解这些,这里就不赘述了。

$ m3 F# M0 ^" u# |& |/ v

' R4 \9 V6 j2 O) K; l5 [* ]6 T
发表于 2015-4-5 10:09 | 显示全部楼层
这东西反正俺是弄不明白,也看不明白,。还是你们高手来研究吧。。。
回复

使用道具 举报

发表于 2015-4-5 14:28 | 显示全部楼层
还真开始啃tcp/ip协议了?这东西很复杂的。
回复

使用道具 举报

 楼主| 发表于 2015-4-5 16:35 | 显示全部楼层
yn5920 发表于 2015-4-5 14:28, |5 I" {2 i1 c- C: s5 @
还真开始啃tcp/ip协议了?这东西很复杂的。
) W6 r! k+ y  B; Q
是的,TCP其实真的不需要全部都搞,但要先明白其工作原理,还有现在TCP/IP都有IC了,想用wifi之类的都要明白这些东西,不前进就后退了。
4 o  T4 X+ G" o: A9 L: X* m+ j0 B+ O2 U3 r9 W
回复

使用道具 举报

发表于 2015-4-5 20:51 | 显示全部楼层
kenson 发表于 2015-4-5 16:35
' Y* f( }/ N4 F4 h& K. Z; [1 `0 i是的,TCP其实真的不需要全部都搞,但要先明白其工作原理,还有现在TCP/IP都有IC了,想用wifi之类的都要 ...

$ C' c% z5 {" i, q: l" h绝对是大神的节奏。
" `& Q" M0 m* W1 m2 o5 \5 y' _  e, u( B7 O. |
回复

使用道具 举报

发表于 2015-4-5 22:45 | 显示全部楼层
本帖最后由 文句子 于 2015-4-5 22:47 编辑
  s' @: r( f) {. t. @2 B/ k
kenson 发表于 2015-4-5 16:35
, B& x% {: u) x& l* o4 A8 g是的,TCP其实真的不需要全部都搞,但要先明白其工作原理,还有现在TCP/IP都有IC了,想用wifi之类的都要 ...
- M( k0 f# X* ]6 y2 ^0 u2 [/ ^
TCP/IP是个大体量的协议簇,* g# c9 g9 i, X: c, v1 e
对个人而言,那怕全部稍微了解的话,一般也只适合写标准了。
* c3 h5 T. {3 x; {6 v' j7 ~3 X1 ~我个人看法,& V! A3 B( c: W, |4 J7 L
没接触过通讯工程的,光链路层的内容看着都费劲。
, W4 a% @& ]6 @/ [8 h有时候,理解工作原理也是需要一定的背景知识的。4 ~$ L) C9 N2 w7 b3 D
以前好多招聘信息,经常看见“熟悉TCP/IP协议”赫然在列,看着都肝颤……5 `- H- T4 F  y

( y( t" ?& e0 {1 U
* g. p) G: |+ d) N+ W; w+ b6 A+ m) h
回复

使用道具 举报

 楼主| 发表于 2015-4-6 07:48 | 显示全部楼层
yn5920 发表于 2015-4-5 20:51
- i7 I7 q1 c! K6 s绝对是大神的节奏。
3 m% j6 X2 |( t: i! C( J2 `1 g+ I
这不 敢当,路还有很长的路要走呢+ L9 ?% P- h9 q! p) b& r4 ^
回复

使用道具 举报

 楼主| 发表于 2015-4-6 07:52 | 显示全部楼层
文句子 发表于 2015-4-5 22:45
+ V; {! i) l5 PTCP/IP是个大体量的协议簇,
- ~+ Q/ e# ~6 ?' i对个人而言,那怕全部稍微了解的话,一般也只适合写标准了。; D5 n" G+ Y. x7 k0 ~8 V/ K* f% {7 y
我个人看法, ...
- ^3 M+ k5 b/ H! n! B- d  e8 c, y
我以前也怕看这个,但不看不行但看了其实也没什么看你能不能静下心来,说实话我也加入物联网上了,之前也一值看电力载波之类的东西,不管用在那都有用,电力载波也是基于TCP/IP的。. G" \: K& V! H8 B* i( W6 w' Q
回复

使用道具 举报

发表于 2015-4-6 14:06 | 显示全部楼层
这玩意大概看下就OK,现成的系统现成的协议已经很成熟了,直接拉来用就OK!~
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2026-4-19 18:27 , Processed in 0.038849 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表