97-ICMP 协议(端口不可达)

来源:互联网 发布:全国省市区sql脚本 编辑:程序博客网 时间:2024/05/20 05:26

ICMP 端口不可达是差错报文中的一种,它的类型(type)是 3,代码(code)也是 3.

1. 差错报文首部格式


这里写图片描述
图1 差错报文首部

2. 实验

  • 打开我们之前写的 ICMP 报文接收程序

程序托管在 gitos 上:http://git.oschina.net/ivan_allen/unp

如果你已经 clone 过这个代码了,请使用 git pull 更新一下。本节程序所使用的程序路径是 unp/program/icmp/basic.

$ sudo ./icmp
  • 打开 tftp 程序


这里写图片描述
图2 使用 tftp 程序向主机 mars 端口 9999 发送请求,准备下载 temp 文件

tftp 程序使用的协议是 UDP,这里使用了面向连接的 UPD 程序。实际上,mars 主机并没有在 9999 端口有任何服务。因此这个请求会失败。


这里写图片描述
图3 icmp 报文接收程序接收到了差错报文,type=3, code=3

根据差错报文的规则, icmp 报文携带的原始 ip 数据报里的前 8 字节,应该是 UDP 数据报前 8 字节的内容,看红色框框部分,这是 UDP 数据报的目的端口号,0x270f,也就是 10 进制 9999.

3. 总结

  • 掌握差错报文格式
原创粉丝点击