计算机网络(5)-----ICMP协议和PING程序

控制报文协议(Internet Control Message Protocol)

定义

  它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

简介

  ICMP报文就像是IP报文的小弟,总顶着IP报文的名头出来混。因为ICMP报文是在IP报文内部的,如图:

  

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

  当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。

组成

  ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。

  

报文分类

  ICMP 报文大致可分为两类:差错报文、查询报文。具体消息类型如下表所示:

  

具体格式

  目的不可达(Type3)

    日常生活中,邮寄包裹会经过多个传递环节,任意一环如果无法传下去,都会返回寄件人,并附上无法邮寄的原因。

    同理,当路由器收到一个无法传递下去的IP报文时,会发送ICMP目的不可达报文(Type 3给IP报文的源发送方。报文中的Code就表示发送失败的原因。

    Code

    0 = net unreachable;

    1 = host unreachable;

    2 = protocol unreachable;

    3 = port unreachable;

    4 = fragmentation needed and DF set;

    5 = source route failed.

  超时(Type11)

    网络传输IP数据报的过程中,如果IP数据包的TTL值逐渐递减为0时,需要丢弃数据报。

    这时,路由器需要向源发送方发送ICMP超时报文(Type11),Code为0,表示传输过程中超时了。

  重定向(Type5)

    当路由收到IP数据报,发现数据报的目的地址在路由表上没有,它就会发ICMP重定向报文(Type为5)给源发送方,提醒它想要发送的地址不在,去其他地方找找吧。

Ping程序

原理

  ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。

过程

  ICMP 回显请求和 ICMP 回显应答报文是配合工作的。当源主机向目标主机发送了 ICMP 回显请求数据包后,它期待着目标主机的回答。目标主机在收到一个 ICMP 回显请求数据包后,它会交换源、目的主机的地址,然后将收到的 ICMP 回显请求数据包中的数据部分原封不动地封装在自己的 ICMP 回显应答数据包中,然后发回给发送 ICMP 回显请求的一方。如果校验正确,发送者便认为目标主机的回显服务正常,也即物理连接畅通。

  

引用

  http://www.cnblogs.com/Akagi201/archive/2012/03/26/2418475.html

  http://www.cnblogs.com/jingmoxukong/p/3811262.html

  http://network.51cto.com/art/201411/458259.htm

时间: 2024-10-07 10:15:36

计算机网络(5)-----ICMP协议和PING程序的相关文章

002.原始套接字,构建ICMP包,实现Ping程序,简化版

大致流程: 将ICMP头和时间数据设置好后,通过创建好的原始套接字socket发出去.目的主机计算效验和后会将数据原样返回,用当前时间和返回的数据结算时间差,计算出rtt. 其中: 1.我们以ping www.baidu.com为例,但我们并没有计算平均rtt 2.我们并没有手动创建IP头,而是交给了内核去帮我们处理 3.中间设计到的函数需要查相关资料 代码实现: 1 /* 2 ===========================================================

4.ICMP协议,ping和Traceroute

1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机.给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因.ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成.而前 16bit就组成了ICMP

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

转自:http://blog.csdn.net/goodboy1881/article/details/670761 ———————————————————————————————————————————————————————— 1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将

ICMP的应用--ping

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

TCP协议和socket API 学习笔记

本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类: 原文地址:TCP协议和socket API 学习笔记 作者:gilbertjuly  • TCP包头 ACK为1时,确认序号有效,表示期望收到的下一个序号,是上次成功收到的字节序加1. SYN, FIN都占用一个序号. • TCP连接的建立 client通过connect()来建立TCP连接,connect()会发送SYN报文: server通过bind().list

linux服务之http协议和httpd的配置(一)

http协议和httpd的配置 URL:Unifrom Resource Locator URL方案:scheme 服务器地址:ip:port 资源路径: http://www.magedu.com:80/bbs/index.php, https:// 基本语法: <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fra

Android即时通讯开发之XMPP (一)初识XMPP协议和asmack

在讲XMPP和asmck之前 ,我还是先分享一些资源文档,如果你有耐心,可以直接忽略我下面所写的.下面有关XMPP的介绍大部分是摘抄网上的文档,后面我会写一些基于XMPP协议和asmck开源库的聊天室开发,功能包括,文本,语音,和当前地理位置地址. XMPP官网:http://xmpp.org Smack开发官方指导文档:http://www.igniterealtime.org/builds/smack/dailybuilds/documentation/extensions/index.ht

Http协议和IO模型

HTTP 协议和IO模型 一:HTTP协议 http协议:HyperText Transfer Procotol超文本传输协议,http协议是无状态的,监听在80端口,TCP协议上.HTTP协议的特点有以下几点: 1.支持客户/服务器模式.2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的类型不同.由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快.3.灵活:HTTP允许传输任意类型的数据

[转]ICMP协议之ping实现

原文链接http://blog.csdn.net/qy532846454/article/details/5429700 1. 相关ICMP协议概述 这里只讲解与ping有关的ICMP消息类型,主机发送回送消息(Type = 8),被请求主机回送响应消息(Type = 0),基本格式如下: 回送消息[ECHO] 回送响应消息[ECHO REPLY] 其中•Code = 0, •CheckSum为校验和,重点注意从ICMP的头部(即Type开始),到data结束(即到整个数据包结束),具体计算见下