「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「专栏简介」:此文章已录入专栏《计算机网络零基础快速入门》
ICMP协议
ICMP协议是IP的一个组成部分,负责传递
「控制信息」。
ICMP的功能是检错而不是纠错;
它将出错的报文返回给发送方的设备,发送方根据ICMP报文确定「错误类型」,从而更好的重发错误的数据包。
我们用来测试网络连通性的 ping 命令,就是ICMP的工作过程。
ICMP是IP协议的一部分,因此,ICMP协议的报文包含在IP数据报的数据部分:

1)类型(Type):4位,标明ICMP报文的作用及格式。
2)代码(Code):4位,标明报文的类型。
3)校验和:8位,检验报文是否有误。
ICMP协议主要通过 Type 和 Code 的组合,来标明报文的类型,常见的有三种:
1)请求响应
发送方发送一个 Type =8 的报文,途中没有异常,接收方就会返回一个 Type=0 的报文;
比如下面这一对请求和响应,注意看我圈中的地方:

2)网络、主机、协议、端口不可达
这几种情况的报文类型都是一样的,接收方返回一个 Type = 3 , Code=3 的报文,意思就是端口不可达(访问了一个不存在的端口),比如下面这个响应,重点看我圈中的地方:

常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)。
完整的ICMP报文类型如下:
| TYPE | CODE | Description |
|---|---|---|
| 0 | 0 | Echo Reply——回显应答(Ping应答) |
| 3 | 0 | Network Unreachable——网络不可达 |
| 3 | 1 | Host Unreachable——主机不可达 |
| 3 | 2 | Protocol Unreachable——协议不可达 |
| 3 | 3 | Port Unreachable——端口不可达 |
| 3 | 4 | Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 |
| 3 | 5 | Source routing failed——源站选路失败 |
| 3 | 6 | Destination network unknown——目的网络未知 |
| 3 | 7 | Destination host unknown——目的主机未知 |
| 3 | 8 | Source host isolated (obsolete)——源主机被隔离(作废不用) |
| 3 | 9 | Destination network administratively prohibited——目的网络被强制禁止 |
| 3 | 10 | Destination host administratively prohibited——目的主机被强制禁止 |
| 3 | 11 | Network unreachable for TOS——由于服务类型TOS,网络不可达 |
| 3 | 12 | Host unreachable for TOS——由于服务类型TOS,主机不可达 |
| 3 | 13 | Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 |
| 3 | 14 | Host precedence violation——主机越权 |
| 3 | 15 | Precedence cutoff in effect——优先中止生效 |
| 4 | 0 | Source quench——源端被关闭(基本流控制) |
| 5 | 0 | Redirect for network——对网络重定向 |
| 5 | 1 | Redirect for host——对主机重定向 |
| 5 | 2 | Redirect for TOS and network——对服务类型和网络重定向 |
| 5 | 3 | Redirect for TOS and host——对服务类型和主机重定向 |
| 8 | 0 | Echo request——回显请求(Ping请求) |
| 9 | 0 | Router advertisement——路由器通告 |
| 10 | 0 | Route solicitation——路由器请求 |
| 11 | 0 | TTL equals 0 during transit——传输期间生存时间为0 |
| 11 | 1 | TTL equals 0 during reassembly——在数据报组装期间生存时间为0 |
| 12 | 0 | IP header bad (catchall error)——坏的IP首部(包括各种差错) |
| 12 | 1 | Required options missing——缺少必需的选项 |
| 13 | 0 | Timestamp request (obsolete)——时间戳请求(作废不用) |
| 14 | Timestamp reply (obsolete)——时间戳应答(作废不用) | |
| 15 | 0 | Information request (obsolete)——信息请求(作废不用) |
| 16 | 0 | Information reply (obsolete)——信息应答(作废不用) |
| 17 | 0 | Address mask request——地址掩码请求 |
| 18 | 0 | Address mask reply——地址掩码应答 |
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总