一块积木

系统是积木堆起来的,软件是积木堆起来的,世界也是积木堆起来的

用户操作
[即时聊天] [发私信] [加为好友]
积木ID:goodboy1881
177581次访问,排名448,好友4人,关注者15人。
goodboy1881的文章
原创 40 篇
翻译 4 篇
转载 40 篇
评论 93 篇
积木的公告

知其然,不知其所以然,不如不知。

最近动向

开始研究tomcat服务器。开始自己的J2EE历程

个人简介

学习口味甚杂, linux, solaris FreeBSD都有涉猎。 C++玩儿了4年,Java玩儿了一年。 其他网页脚本语言玩儿了两个月。 欢迎交流。

我的联系方式

邮件:goodboy1881(at)gmail.com

rss订阅

最近评论
obkof:这个系列的读书笔记写得太好了,我看书结合你的笔记,很好的理解tcp/ip的原理和重点,胜过上课老师的讲解,希望你以后还可以多写一些经典书籍的笔记^_^
chen231133:在这里我有一个问题一直不明白: 寻找默认路由之前会发送ARP请求不?它们二者之间是怎样一个过程?
------------------------------------------------
先回答后一个问题:源主机会搜索路由表来查找目标主机或者网络的表目,如果没有,就使用默认的表目,把数据报传给下一站路由器。只要确认目的地,才会发送ARP请求。
sky3010:我最近也开始学习TCP/IP详解这本书,借鉴一下你的笔记,不介意吧
linda003:(*^_^*)
inchling:做应用软件开发最好不要忽略数据库的学习,特别是大型数据库产品的知识,但数据库绝不仅仅是SQL语言。应用做到最后,数据和业务流程才是根本。
文章分类
收藏
    相册
    漂流日本
    其他
    文章插图
    一鸡回忆录
    给我留言
    给我留言
    推荐阅读
    Boost Getting Started 安装文档(翻译1.33版本)
    饼子堂
    一起在道上混的
    不亦快斋(RSS)
    废人废语(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

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

    新一篇: 女人50万年的进化(暴经典) | 旧一篇: TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议

    1.IMCP协议介绍

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

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

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

    1. ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)
    2. 目的地址是广播地址或多播地址的IP数据报。
    3. 作为链路层广播的数据报。
    4. 不是IP分片的第一片。
    5. 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

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

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

    1. ping查询(不要告诉我你不知道ping程序)
    2. 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)
    3. 时间戳查询(可以用来同步时间)

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

    2.ICMP的应用--ping

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

    Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
    Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
    Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
    Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

    Ping statistics for 10.4.24.1:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 0ms, Average = 0ms

    ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.net,就可以观察到一些 丢包的现象,而程序运行的时间也会更加的长。
    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文档来了解这些,这里就不赘述了。

    发表于 @ 2006年04月20日 18:14:00|评论(loading...)|编辑

    新一篇: 女人50万年的进化(暴经典) | 旧一篇: TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议

    评论

    #sky3010 发表于2008-03-31 16:55:18  IP: 61.132.84.*
    我最近也开始学习TCP/IP详解这本书,借鉴一下你的笔记,不介意吧
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 积木