网络协议档案之ICMP、Ping、Traceroute

2023-12-06 20:32

本文主要是介绍网络协议档案之ICMP、Ping、Traceroute,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ICMP协议

ICMP经常被认为是IP层的一个组成部分,它是网络层的一个协议,它传递差错报文以及其他需要注意的信息,ICMP报文通常被IP层或更高层(TCP、UDP等)使用,它是在IP数据报内传输的。

ICMP报文大致分为两类:查询报文和差错报文。

先来看差错报文。当传送IP数据报发生错误时(比如主机不可达、网络不可达等),ICMP协议将会发送一个ICMP差错报文给源主机,好让主机做出相应的处理,也因此IP层以上的一些协议有可能做到可靠传输。书中给出了ICMP差错报文中的一些组合(类型和代码的组合)描述:如网络不可达、网络不可达、协议不可达、端口不可达等。这里说下端口不可达的意思:UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文,将报文中的类型和代码的组合设定为端口不可达。Traceroute程序就是利用端口不可达来产生ICMP差错报文的。

另外,在大多数情况下,传送IP数据报发生错误,会产生一个ICMP错误报文,但下面各种情况都不会导致产生ICMP差错报文:

* ICMP差错报文不会产生差错报文(ICMP查询报文可能会产生ICMP差错报文);

* 目的地址是广播地址和多播地址的IP数据报;

* 作为链路层广播的数据报;

* 不是IP分片的第一片

* 源地址不是单个主机的数据报。

这些规则是为了防止过去允许ICMP差错报文对广播分组影响所带来的广播风暴。

再来看ICMP查询报文,查询报文主要用途有:

* 子网掩码查询;

* 时间戳查询;

* ping查询。

ping程序

ping是ICMP的一个很著名的应用。ping程序时对两个TCP/IP系统连通性进行测试的基本工具,它只利用ICMP回显请求和回显应答报文,而不用经过传输层,ping服务器一般在内核中试下ICMP的功能。当某一个网站访问不了时,我们就可以ping一下这个网站,看下连通情况。比如下图:

这里先ping到google的服务器,我们可以看到连通性不是很好,丢包率为50%,而我们又ping了下Github的服务器,连通性比较好,丢包率为0%。

Traceroute程序

Traceroute是ICMP协议的另一个重要应用,主要用来侦测源主机到目的主机之间所经过的路由的情况。Traceroute使用ICMP报文和IP首部中的TTL字段,其原理很简单,开始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的UDP数据报,以确定路径中的每个路由器,而每个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,最终到达目的主机后,由于ICMP选择了一个不可能的值作为UDP端口(大于30000)。这样目的主机就会发送一个端口不可达的ICMP差错报文。

这篇关于网络协议档案之ICMP、Ping、Traceroute的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/463223

相关文章

VC网络协议

// PCControlDlg.cpp : 实现文件//#include "stdafx.h"#include "PCControl.h"#include "PCControlDlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框#ifde

C# 如何同时Ping多个IP地址

在C#中,如果需要同时ping多个IP地址,可以采用多线程或异步编程的方式来实现,以便可以同时进行多个ping操作。以下是两种常用的方法: 方法一:使用多线程(Task 或 Thread) 使用Task是更现代和推荐的方式,因为它内置了更好的线程管理和异常处理机制。以下是一个使用Task的示例,展示如何同时ping多个IP地址: using System; using System.Co

2025届计算机毕业设计:如何构建Java SpringBoot+Vue个人健康档案管理系统?

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

【内网】ICMP出网ew+pingtunnel组合建立socks5隧道

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 通过环境搭建,满足以下条件: 攻击机模拟公网vps地址,WEB边界服务器(Windows Server 2008)模拟公司对外提供Web服务的机器,该机器可以通内网,同时向公网提供服务。内网同网段存在一台Windows内网服务

Linux Ubuntu 能PING IP但不能PING主机域名的解决方法

------------------------------------------------------------------------------- ------------------------------------------------------------------------------- vi /etc/nsswitch.conf hosts: file

linux下 ping: unknown host www.baidu.com” 解决方法

问题现象 :   ping 和 telnet 都无法正常使用   而nslookup 可以正常解析到域名 $ ping  www.baidu.com  ping: unknown host  www.baidu.com $ telnet baidu.com 80  baidu.com/80: Name or service not known

网络协议栈学习之socket, sock_common, sock, 和 sk_buff

一. 前言   一直很好奇socket是如何实现的,底层的数据结构又是如何,因此在这里对socket的数据结构进行分析。   socket是传输层使用的数据结构,用于声明、定义套接字,网络层会调用sock结构体,其中sock会用到了通用sock_common结构体。而sk_buff则是内核中使用的套接字缓冲区结构体。在我们前文提到的NAT转换中,除了修改内核已有的Netfilter源码外,还有一

网络协议--HTTP 和 HTTPS 的区别

网络协议–HTTP 和 HTTPS 的区别 一、简述 HTTP (全称 Hyper Text Transfer Protocol),就是超文本传输协议,用来在 Internet 上传送超文本。是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从www服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。 HTTPS:安全超文

Linux下traceroute的安装和使用

traceroute是跟踪数据包到达网络主机所经过的路由工具。其原理为试图以最小的TTL发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。发送数据包的大小默认为40个字节。  yum install -y traceroute   SYNOPSIStraceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...

深入理解 Linux 的 ping、telnet 和 curl 命令

深入理解 Linux 的 ping、telnet 和 curl 命令 在 Linux 系统中,网络调试和测试是日常运维工作的重要部分。ping、telnet 和 curl 是常用的网络命令工具,用于测试网络连接、访问远程服务器和发送 HTTP 请求等操作。本文将详细介绍这些命令的语法、使用场景和区别,尤其是 curl 命令中的 GET 和 POST 请求。 1. ping 命令 1.1