tcp/ip协议学习 第四章 ICMP:Internet控制报文协议

派猴子来的救兵

关于ICMP的RFC文档在此!

干嘛的

在我看来, ICMP协议主要就是为了互相传递/查询一些基本信息, 大部分是传递一些错误信息.

比如A发送UDP信息到B的10000端口, 但B的10000端口并没有开放, 就会回一个ICMP包给A, 告诉A10000端口未开放.

基本的查询信息, 比如最常用的ping命令, 就是发送ICMP包到目的主机, 然后等待目的主机的响应(响应也是ICMP包).

协议

协议定义的非常简单. ICMP在IP层上面一层. 前面是20个字节的IP头, 然后就是ICMP头.

ICMP头, 截图来自TCP/IP协议详解卷一

类型和代码两个字段的组合决定了这个ICMP包的用途, 比如我们常用的ping就是0,0组合和8,0组合. 具体如下:

各种类型的ICMP报文, 截图来自TCP/IP协议详解卷一

代码放上

好像没有什么好说的. 直接代码放上吧. 实现了一下书中的例子, 一个是查询子网掩码, 一个是查询时间. github地址, 点我点我

端口不可达

这也是书中的一个例子. 比如A发送UDP信息到B的10000端口, 但B的10000端口并没有开放, 就会回一个ICMP包给A, 告诉A10000端口未开放.
来看一下效果.

用瑞士军刀发送个UDP消息到192.168.0.108的10000端口.

% nc -u 192.168.0.108 10000                                                   ?
abcd

同时开一个Tcpdump监听看看:

# tcpdump -vvv -x -nn icmp                                                    ?
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
01:48:01.420363 IP (tos 0x0, ttl 64, id 45430, offset 0, flags [DF], proto ICMP (1), length 56)
    192.168.0.108 > 192.168.0.104: ICMP 192.168.0.108 udp port 10000 unreachable, length 36
    IP (tos 0x0, ttl 64, id 42558, offset 0, flags [DF], proto UDP (17), length 33)
    192.168.0.104.60181 > 192.168.0.108.10000: [no cksum] UDP, length 5
    0x0000:  4500 0038 b176 4000 4001 072a c0a8 006c
    0x0010:  c0a8 0068 0303 eac9 0000 0000 4500 0021
    0x0020:  a63e 4000 4011 1269 c0a8 0068 c0a8 006c
    0x0030:  eb15 2710 000d 0000

ping

最重要的PING的实现还没有写. 后面补上.

时间: 2024-10-15 14:21:06

tcp/ip协议学习 第四章 ICMP:Internet控制报文协议的相关文章

《TCP/IP详解卷2:实现》笔记--ICMP:Internet控制报文协议

ICMP在IP系统间传递差错和管理报文,是任何IP实现必须和要求的组成部分.可以把ICMP分成两类:差错和查询.查询报文 是用一对请求和回答定义的.差错报文通常包含了引起错误的IP包的第一个分片的IP首部(和选项),加上该分片数据部分 的前8个字节. 下图显示了所有目前定义的ICMP报文.双线上面的是请求和回答报文,双线下面的是差错报文. PRC_栏显示了Net/3处理的与协议无关的差错码和ICMP报文之间的映射.对请求和回答,这一列是空的.因为在这种情况 下不会产生差错.如果对一个ICMP差错

2016.7.9 计算机网络复习要点第四章之网际控制报文协议ICMP

1.ICMP允许主机或路由器报告差错情况和提交有关异常情况的报告:为了更有效地转发IP数据报和提高交付成功的机会: 2.ICMP不是高层协议,因为ICMP报文是装在IP数据报中的,作为其中数据部分,所以是IP层的协议: 3.ICMP报文的种类: (1)ICMP差错报告报文 (2)ICMP询问报文 4.ICMP报文的格式: (1)前4个字节是统一的格式,共有三个字段:类型,代码,检验和: (2)接着的4字节,与ICMP的类型有关,最后是数据字段,其长度取决于ICMP的类型: 5.几种常用的ICMP

《TCP/IP具体解释卷2:实现》笔记--ICMP:Internet控制报文协议

ICMP在IP系统间传递差错和管理报文,是不论什么IP实现必须和要求的组成部分.能够把ICMP分成两类:差错和查询.查询报文 是用一对请求和回答定义的.差错报文通常包括了引起错误的IP包的第一个分片的IP首部(和选项),加上该分片数据部分 的前8个字节. 下图显示了全部眼下定义的ICMP报文.双线上面的是请求和回答报文,双线以下的是差错报文. PRC_栏显示了Net/3处理的与协议无关的差错码和ICMP报文之间的映射.对请求和回答,这一列是空的.由于在这样的情况 下不会产生差错.假设对一个ICM

ICMP:Internet控制报文协议实现学习笔记

ICMP是网络层的一个协议,可以看作IP协议的附属协议,因为它主要被IP用来与其他主机或路由器交换错误报文及其他需要注意的信息.当然,更高层协议(tcp/udp)甚至有些用户进程也可能用到ICMP报文 注册ICMP协议和ICMP协议的处理涉及以下文件: net/ipv4/icmp.c ICMP协议处理入口 net/ipv4/af_inet.c 网络层和传输层接口 ICMP报文结构 参见tcp/ip协议学习笔记(5)Internet Control Message Protocol(ICMP) 注

ICMP Internet控制报文协议

ICMP端口不可达验证. 1.准备 window上下载tftp32软件,并设置好服务器IP地址(window系统的ip),并关闭windows防火墙.如下图所示: 2.ubuntu虚拟机,安装tftp服务,并安装wireshark. sudo apt-get install tftp 3. 打开wireshark. 启动tftp服务,并连接window,指定8000端口,这个端口号是没有进程在使用的,当需要get文件,最终会显示端口不可达,超时. wireshark显示端口不可达.(window

《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

ICMP:Internet控制报文协议

ICMP:Internet控制报文协议. 是IP层的组成部分,传递差错报文或其他信息. ICMP报文被封装在IP数据报内部: 详细格式例如以下所看到的: 个字段含义例如以下: 8位类型.表示该ICMP报文的含义.如目的不可达.超时.请求回显等. 8为代码. 进一步描写叙述该ICMP报文.ICMP报文的类型由类型字段和代码字段共同决定. 16位检验和.和IP首部检验和的算法同样. 我们常常使用的ping程序就是基于ICMP报文进行的传输.pingclient发送一个ICMP回显请求报文,serve

TCP/IP详解,卷1:协议--第6章 ICMP:Internet控制报文协议

引言 I C M P经常被认为是 I P层的一个组成部分.它传递差错报文以及其他需要注意的信息. I C M P报文通常被I P层或更高层协议( T C P或U D P)使用.一些I C M P报文把差错报文返回给 用户进程. 在本章中,我们将一般地讨论 I C M P报文,并对其中一部分作详细介绍:地址掩码请求和 应答.时间戳请求和应答以及不可达端口 ICMP报文的类型 各种类型的I C M P报文如图6 - 3所示,不同类型由报文中的类型字段和代码字段来共同决定. 图中的最后两列表明 I C

tcp/ip协议学习 第四章 ARP:地址解析协议

派猴子来的救兵 关于ARP的RFC文档在此! ARP干嘛的 曾经有段时间, 六七年前了吧. 本科的时候, 流行了一阵子ARP病毒攻击, 导致整个局域网都不能上网了. 当时只听说这个东西防不住, 只要有一个人中毒, 就导致所有人上不了网. 现在也终于知道这是怎么回事了, 也能手工让某个同学上不了网了, 咳咳. 大家应该也都知道ARP是干嘛的, 我再啰嗦一下.. 比如我访问了百度, 百度回了包给我, 百度只知道我的IP是什么,不知道我的MAC地址. 这个包到网关的时候, IP这一层再把数据交给下一层