008-ICMPプロトコル(インターネット制御メッセージプロトコル)

I.概要

  ICMPは(インターネット制御メッセージプロトコル)インターネット制御メッセージプロトコルです。これは、IPホスト、ルータ間で制御メッセージを渡すために、サブプロトコルTCP / IPプロトコルスイートです。失敗した操作を介してネットワーク制御メッセージを指し、ホストは、そのような利用可能なルートネットワーク自体かどうかなどのメッセージ到達可能です。これらの制御メッセージは、ユーザデータを送信しないが、しかし、ユーザデータの転送のために重要な役割を果たしています。

  それはTCP / IPプロトコルに属するプロトコルサブファミリー、ネットワーク層プロトコルは、主にエラー報告を、ホストとルータの間で制御情報を送信するなどのために使用される、交換制御およびステータス情報は限られています。IPデータにアクセスできなく目標に直面した場合には、IPのルータがない転送できるの現在の伝送速度でパケットように状況、自動的にICMPメッセージを送信します。IPヘッダのプロトコルタイプフィールドの値(プロトコル8ビット)、A = 1のフレーム構造でICMPパケット。

  IP通信では、パケットは、多くの場合、他の当事者に到達することはできません。その理由は、どこかにすべてのパケットを処理していないため、通信の途中でルータは、パケットを1つずつ削除されますということです。それとも、しかし、しかし、原因間違ったポート番号に反対側に到達するために、サーバソフトウェアはそれを受け入れない場合があります。IPネットワーク上で、パケットがの理由により廃棄され、制御が発呼者に必要な情報を渡します。ICMPプロトコルを支援するためにはIPプロトコル、製造される各種の制御情報の交換です。

  IPの不可欠な部分は、RFC792の書かれた」ICMPをされて以降、IPソフトウェアは、ICMPプロトコルのすべてを実装する必要があり、ICMPが働いているIPを共有するための機能の一部です。

  

1.1、機能

  エラー通知情報の問い合わせ:RFCにおいて、ICMPは、大きく分けて2つの機能に分けます。

  1. IPパケットが正常に送信先アドレスに到達していることを確認します 

  IPパケットの送信中2.原因通知が破棄されます 

注意点

1、ICMPは、IPプロトコルの作業に基づいていますが、それはまだネットワーク層プロトコルに降りてくるので、それは、トランスポート層の機能ではありません 

IPv4のみを用いて2、ICMP、IPv6のそれは場合であれば、必要があるのICMPv6  

1.2、職場での上位層プロトコルとしてICMP IP 

  ICMPは、相互に通信するパケットのIPのコンテンツのデータの部分に配置されます。すなわち、ICMPのIP上位層プロトコルであるICMPパケットフォーマットです。RFCに記載されているようしかし、ICMPは、IP共有機能の一部です。だから、同じプロトコルとIP層であると考えられています。パケットフォーマットとRFCバーで指定されたパケットの内容を見てください。

  IPデータグラム、IPヘッダ最前ICMPパケットに含まれるICMPパケット。ICMPパケットは、IPヘッダ(少なくとも20バイト)、ICMPヘッダ(少なくとも8バイト)およびICMP(データ部に属するICMPパケット)を含みます。IPヘッダのプロトコルフィールドが1である場合、それはICMPパケットであることを意味します。図に示すようにICMPヘッダ。 
図は次のとおりです。

  

  図は、IPヘッダを含み、ICMP、ICMPは一部であります

  

データパケットそれのフォーマットで詳細な表情。確かに、ICMPパケットを送信するための多くのフィールドがあると、IPパケットです。しかし、実際にはわずか7サブセグメントは、ICMPプロトコルに関連付けられています。

1)プロトコル; 2)送信元IPアドレス、3)宛先IPアドレス、4)生存、四つのフィールドは、IPヘッダに含まれます。

6)コード; 5)タイプ7)オプション取引、ICMPのデータ部に含まれる三つのフィールド。

1)プロトコルフィールドの値は1.2で、あります)およびICMPパケットのアドレス情報の交換に使用されている3)、特別な意味はありません。ICMP自体は理解するために、それは)5が重要である、6)、7)は、3つのフィールド。両方のフィールドのコア5)タイプ、6)コードが存在することが重要フィールドを参照することができます。エラー通知及び情報問合せメッセージを交換するためのすべてのICMPは、表現型とコードの組み合わせで作られています。RFCは15種類を定義します。エラー通知と「エコー要求」を区別するためのTypeフィールドによって、このような情報の問い合わせを「のメッセージが到達することはできません」。その意味を表現するためにICMPパケットタイプのコードで分類すると、おそらく小さなメッセージを渡す必要があります。また、相互にデータを送信するのに必要な時間は、7)オプションデータフィールドを配置します。

可能性のあるメッセージの一覧:

  

二つは、ICMPを実現します

2.1、MTUを探ります

  所谓路径MTU 探索,是探索与通信对方之间不用分片IP 数据包,就能交流的MTU 大小的功能。MTU大小是指计算机一次能够送出去的数据的最大长度,基本上由网路的种类来决定。例如,以太网的话通常是1500 字节,使用PPPoE 的ADSL 通常是1492 字节。为了实现这个路径MTU 探索,ICMP 被使用着。

  

  路径MTU 探索的原理本身是非常简单的。首先,Windows 向通信对方送IP 数据包时,先设置IP 首部的分片禁止标志然后再送。这是路径MTU 探索的基本。假如,Windows 将大于1000 字节的数据包送了出去,通信路径上有MTU 从1500 字节变成1000 字节的地方。因此,那个路由器将不允许超过1000 字节的数据包通过,而进入MTU 是1000 字节的网路。路由器尝试着将IP 数据包分片。但是因为数据包的分片禁止标志是有效的,所以不能分片。该路由器就将该IP 数据包丢弃,并用ICMP 通知送信方“想分片,但不能分片”。这时路由器发送的ICMP的类型字段是3,代码字段为4。这是“需要分片但不能分片,不能送至终点”的意思。而且,大多数路由器将在数据选项部里填入不分片就能通过的MTU 大小。Windows 收到该ICMP 报文后就知道了不分片就能够传送的数据大小,并暂时将MTU 大小更换掉,然后继续通信。

2.2、改变路由

  改变路由是指路由器向送信方计算机指示路径改变这个功能。计算机根据自己的路由信息(路由表)来决定传送目标。不知道发给谁好的时候,就将数据包发给设为默认网关的路由器。被指定为默认网关的路由器接收到数据包,发现将数据包发给局域网内的其它路由器会比较快的时候,将这一信息通过ICMP 通知发送方。这时使用的是,类型是5,代码是1 的ICMP 改变路由报文。在选项数据部分里写着应该发送给的路由器IP 地址。Windows 收到这个报文后,重写自己的路由表,与对方的通信将在一段时间里经由被指定的路由器来实行。

  

2.3、源点抑制

  数据包集中到达某一路由器后,数据包因为来不及被处理,有可能被丢弃的情况。这时候,向送信方发送的是ICMP 源点抑制报文,用来使送行方减慢发送速度。

  

2.4、ping命令

  ping 命令用来在IP 层次上调查与指定机器是否连通,调查数据包往复需要多少时间。为了实现这个功能,ping 命令使用了两个ICMP 报文。  

  

  注意, 此处 ping 的是域名,不是url,域名可以通过DNS解析成IP地址 

ping命令的功能

(1)能验证网络的连通性 
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期) 
那么如何验证的呢? 
(1)ping命令会先发送一个 ICMP Echo Request给对端 
(2)对端接收到之后, 会返回一个ICMP Echo Reply 
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。

问题:

  telnet是23端口,ssh是22端口,那么ping是什么端口? 
  答:ping命令是基于ICMP,是在网络层。 
  而端口号,是传输层的内容。所以在ICMP中根本就不关注端口号这样的信息。

用ping 命令不能确定与对方连通的原因大致有三个。

  1)目标服务器不存在;

  2)  花在数据包交流上的时间太长ping 命令认为超时;

  3)目标服务器不回答ping 命令。

  如果是原因2),通过ping 命令的选项来延长到超时的等待时间,就能正确显示结果了。如果原因是1)或3)的话,仅凭ping 命令的结果就不能判断是哪方了。正如这样,ping 命令不一定一定能判断对方是否存在。

2.5、traceroute命令

  功能:打印出可执行程序主机,一直到目标主机之前经历多少路由器。

  

  linux、mac:traceroute www.baidu.com

  windows:tracert www.baidu.com

2.6、端口扫描  

  端口扫描就是检查服务器不需要的端口是否开着。服务器管理者用来检查有没有安全上有问题的漏洞开着。不是象ping 和traceroute 那样是操作系统自带的工具,需要利用网络工具才行。

  端口扫描大致分为“UDP 的端口扫描”和“TCP 的端口扫描”两种。这里面,与ICMP 相关的是UDP一边。使用TCP 的通信,通信之前必定要先遵循三向握手的程序。因此,只要边错开端口号边尝试TCP连接就能调查端口的开闭。不特别需要ICMP。与此相对,UDP 没有这样的连接程序。因此,调查端口是否打开需要想点办法。这样,被使用的是ICMP。根据ICMP 规格,UDP 数据包到达不存在的端口时,服务器需要返回ICMP 的“终点不可达”之一的“端口不可达”报文。

    

 

おすすめ

転載: www.cnblogs.com/bjlhx/p/10985384.html