【网络协议】ICMP协议、Ping、Traceroute
ICMP协议
ICMP常常被觉得是IP层的一个组成部分,它是网络层的一个协议。它传递差错报文以及其它须要注意的信息。ICMP报文通常被IP层或更高层(TCP、UDP等)使用,它是在IP数据报内传输的。
ICMP报文大致分为两类:查询报文和差错报文。
先来看差错报文。当传送IP数据报错误发生时(比方主机不可达、网络不可达等),ICMP协议将会发送一个ICMP差错报文给源主机,好让主机做出对应的处理,也因此IP层以上的一些协议有可能做到可靠传输。
书中给出了ICMP差错报文中的一些组合(类型和代码的组合)描写叙述:如网络不可达、网络不可达、协议不可达、port不可达等。
这里说下port不可达的意思:UDP的规则之中的一个是,假设收到一份UDP数据报而目的port与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文,将报文中的类型和代码的组合设定为port不可达。Traceroute程序就是利用port不可达来产生ICMP差错报文的。
另外,在大多数情况下,传送IP数据报错误发生,会产生一个ICMP错误报文。但以下各种情况都不会导致产生ICMP差错报文:
- ICMP差错报文不会产生差错报文(ICMP查询报文可能会产生ICMP差错报文);
- 目的地址是广播地址和多播地址的IP数据报;
- 作为链路层广播的数据报;
- 不是IP分片的第一片
- 源地址不是单个主机的数据报。
- 子网掩码查询。
- 时间戳查询。
- ping查询。
ping程序
ping是ICMP的一个非常著名的应用。ping程序时对两个TCP/IP系统连通性进行測试的基本工具,它仅仅利用ICMP回显请求和回显应答报文。而不用经过传输层,pingserver一般在内核中试下ICMP的功能。
当某一个站点訪问不了时。我们就能够ping一下这个站点,看下连通情况。比方下图:
这里先ping到google的server,我们能够看到连通性不是非常好,丢包率为50%,而我们又ping了下Github的server,连通性比較好,丢包率为0%。
Traceroute程序
Traceroute是ICMP协议的还有一个重要应用。主要用来侦測源主机到目的主机之间所经过的路由的情况。Traceroute使用ICMP报文和IP首部中的TTL字段,其原理非常easy,開始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的UDP数据报,以确定路径中的每一个路由器,而每一个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,终于到达目的主机后,因为ICMP选择了一个不可能的值作为UDPport(大于30000)。
这样目的主机就会发送一个port不可达的ICMP差错报文。
【网络协议】ICMP协议、Ping、Traceroute的更多相关文章
- [协议]ICMP协议剖析
1.ICMP简介 ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议. ICMP的协议号为1. ICMP报文就像是IP报文的小弟,总顶着IP报文的名头 ...
- TCP/IP协议---ICMP协议及ping、traceroute
ICMP Internet控制报文协议通常被认为是IP层的组成部分,一般被IP层或更高层(TCP.UDP)使用.ICMP报文是在IP数据报内部被传输的.如图: ICMP报文的格式如下: 报文的前4个字 ...
- ICMP协议概述
• ICMP是三层协议,和IP.ARP.ICMP同属三层 • IP协议中的6是代表上层的TCP协议,17代表UDP协议,1代表同层的ICMP协议 • ICMP协议主要用来探测 ...
- 三、ARP协议和ICMP协议
一.ARP协议 网络设备有数据要发送到另一台网络设备时,必须要知道对方的网络层地址(IP).IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送.数据帧必 ...
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...
- 4.ICMP协议,ping和Traceroute
1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...
- 网络协议 5 - ICMP 与 ping:投石问路的侦察兵
日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了. 那你知道 ping 命令是怎么工作的吗?今天,我们就来一起认识下 pi ...
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute【转】
转自:http://blog.csdn.net/goodboy1881/article/details/670761 1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议(是一种尽力传送的协 ...
- 网络协议 5 - ICMP 与 Ping
日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了. 那你知道 ping 命令是怎么工作的吗?今天,我们就来一起认识下 ping 命 ...
随机推荐
- 在redhat6上装1.8以下的docker
因为目前1.8以上的docker最低要求是3.10的Linux内核,而我的内核版本远低于此. [root@localhost home]# uname -r -.el6.x86_64 鉴于我的vm上有 ...
- Servlet初始化与异步支持
Shared libraries(共享库) / runtimes pluggability(运行时插件能力) 1.Servlet容器启动会扫描,当前应用里面每一个jar包的 ServletContai ...
- Oracle快速收集AWR的方案
记一种方便的awr收集方法,该脚本可以按小时收集目标时段的awr 素材:awr_generate.sql(具体脚本内容请见本文末尾) (1)将awr_generate.sql置于数据库服务器本地路径, ...
- Spring Boot (20) 拦截器
动态资源和静态资源 拦截器可以算是aop的一种实现,专门拦截对动态资源的后台请求,也就是拦截对控制层的请求,主要用于判断用户是否有权限请求后台.拦截器不会拦截静态资源,如spring boot默认静态 ...
- 【Linux】磁盘分区
我们在Linux操作过程中,可能会遇到磁盘分区的问题.这篇文章是对/dev/sdb 这块磁盘进行分区. linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d) ...
- 微信公众号API使用总结
官网: https://mp.weixin.qq.com/ API: http://mp.weixin.qq.com/wiki/home/index.html 接口调试工具:h ...
- C++对象的内存模型
1. 普通对象模型 对象是如何在内存中布局的? 成员 存放位置 访问范围 非静态数据成员 每一个对象体内 为该对象专有 静态数据成员 程序的静态存储区内,只有一份实体 为该类所有对象共享 成员函数(静 ...
- json简介及josn数组中取字符
1.json字符串就是字符串,只不过格式是Json格式的,以键值对的形式存在,键和值可以是字符串,数字,空值,数组等. json对象在花括号中书写,一个json对象包含多个键值对,json对象以花括号 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
- 磁盘及文件系统管理(以及btrfs)
Linux系统管理 磁盘分区及文件系统管理 raid lvm 网络属性管理 程序包管理 sed及awk 进程查看和管理 内核管理(内核的编译和安装) 系统启动流程 定制,编译内核,busybox 系统 ...