UDP协议和Ping程序

UDP是一个简单的面向数据报的不可靠的无连接的运输层协议。

UDP报文格式:
这里写图片描述

源端口号:16位。
目标端口号:16位。
数据报长度:16位。包含首部和数据。
检验和:16位。检验覆盖首部和数据部分。

特点
(1)UDP对应用程序提交的数据不进行分片处理,分片由IP层负责。
(2)在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。
(3)不提供报文到达确认、排序、及流量控制等功能。
(4)包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

(好像UDP没有太多好讲的东西。。。)

Ping程序

参数:
- c 数值 :执行Ping的次数。
- n :不进行IP与主机名的反查,直接使用IP输出(速度更快)。
- s 数值 :发送出去的ICMP数据包大小,默认为56字节。
- t 数值:TTL数值,默认是255。
- W 数值:等待响应对方的秒数。
- M [do | dont] :主要检测网络的MTU数值大小。do–不可分片;dont–可分片。

Ping程序通过向目的IP发送ICMP回显请求报文,来测试两个主机的连通性。
测试步骤:
1. 使用ipconfig观察本地网络设置是否正确;
2. Ping127.0.0.1,检查本地的TCP/IP协议有没有设置好;
3. Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误;
4. Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;
5.Ping本地DNS地址,这样做是为了检查本地DNS服务器是否工作正常。
6.Ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常。

返回信息

请求超时Request Timed Out:这个信息表示对方主机可以到达到TIME OUT,这种情况通常是为对方拒绝接收你发给它的数据包造成数据包丢失。大多数的原因可能是对方装有防火墙或已下线。
目标网络不可达Destination Net Unreachable:这个信息表示对方主机不存在或者没有跟对方建立连接。这里要说明一下”destination host unreachable”和”time out”的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现”time out”,如果路由表中连到达目标的路由都没有,那就会出现”destination host unreachable”。
坏的IP地址Bad IP address: 这个信息表示你可能没有连接到DNS服务器所以无法解析这个IP地址,也可能是IP地址不存在。
Source quench received信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 编程实现基于UDPping可以通过以下步骤来完成: 1. 导入所需的库:首先,需要导入Python的socket库,以便在程序中使用UDP套接字。 2. 创建UDP套接字:使用socket库创建一个UDP套接字,可以通过调用`socket.socket(socket.AF_INET, socket.SOCK_DGRAM)`来实现。 3. 设置超时时间:使用`socket.settimeout()`函数来设置套接字的超时时间,以便在接收响应时等待的最长时间。 4. 发送ping消息:使用套接字的`sendto()`函数来发送ping消息。可以选择发送一个特定的字符串作为ping消息。 5. 接收响应:使用套接字的`recvfrom()`函数来接收对ping消息的响应。可以选择接收一个特定大小的字节流。 6. 计算往返时间:从收到的响应中获取发送ping消息的时间戳,然后计算往返时间(RTT)。 7. 打印结果:根据ping的结果,打印出发送ping消息的IP地址、往返时间和响应状态。 8. 关闭套接字:最后,使用套接字的`close()`函数来关闭UDP套接字。 一个简单的基于UDPping程序的示例代码如下: ```python import socket import time def udp_ping(hostname, port): try: # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置超时时间为1秒 sock.settimeout(1) # 发送ping消息 start_time = time.time() sock.sendto(b'ping', (hostname, port)) # 接收响应 data, addr = sock.recvfrom(1024) end_time = time.time() # 计算往返时间 rtt = end_time - start_time # 打印结果 print('Ping from', addr[0], 'RTT:', rtt, 's') except socket.timeout: # 超时处理 print('Ping request timed out') finally: # 关闭套接字 sock.close() # 测试 udp_ping('localhost', 8080) ``` 这是一个简单的基于UDPping程序,它通过发送ping消息并等待响应来计算往返时间。在接收响应时,如果超过了设定的超时时间,程序将打印出"Ping request timed out"表示超时。 请注意,这只是一个基本示例,实际上,可以根据需要进行更多的改进和扩展,例如通过发送多个ping消息进行统计或添加其他ping功能。 ### 回答2: 基于UDP(用户数据报协议)实现ping功能需要以下步骤: 1. 导入必要的库:首先需要导入socket库来实现网络连接和发送/接收数据。 2. 创建一个UDP套接字:使用socket库的`socket(AF_INET, SOCK_DGRAM)`函数来创建一个UDP套接字。 3. 设定服务器地址和端口:使用`bind()`函数将服务器的IP地址和端口绑定到套接字上。 4. 设置超时时间:使用`settimeout()`函数设置等待数据的超时时间,即等待服务器响应的最长时间。 5. 发送和接收数据:使用`sendto()`函数将ping请求发送给服务器。然后使用`recvfrom()`函数等待服务器的响应。如果超过超时时间,服务器未响应,会抛出异常。如果接收到响应,计算往返时间(RTT)。 7. 输出结果:在控制台输出服务器的IP地址,发送/接收的数据包的大小和往返时间。 以下是一个示例的基于UDPping程序: ```python import socket import time # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设定服务器地址和端口 server_address = ('127.0.0.1', 12345) sock.bind(server_address) # 设置超时时间 sock.settimeout(1) # 发送和接收数据 for i in range(10): start_time = time.time() # 发送ping请求 message = f'Ping {i}'.encode() sock.sendto(message, server_address) try: # 等待服务器的响应 data, address = sock.recvfrom(1024) end_time = time.time() # 计算往返时间 rtt = end_time - start_time # 输出结果 print(f'Reply from {address[0]}: bytes={len(data)}, time={round(rtt * 1000, 2)}ms') except socket.timeout: print('Request timed out') # 关闭套接字 sock.close() ``` 此示例会向服务器发送10个ping请求,并等待服务器的响应。如果超过1秒钟没有收到响应,会输出"Request timed out"。收到响应后,会输出服务器的IP地址、发送/接收的数据包大小以及往返时间。 ### 回答3: 编程实现基于UDPping可以通过以下步骤来完成: 1. 导入必要的库和模块,例如socket库用于实现网络通信。 2. 创建一个UDP套接字对象,可以使用socket库中的socket函数来实现。 3. 设置超时时间,以便在等待服务器响应时能够控制等待时间。 4. 循环发送ping消息给服务器,并接收服务器的响应。 5. 在发送ping消息之前,记录当前时间作为开始时间。 6. 通过套接字对象的sendto函数将ping消息发送到服务器的特定地址和端口。 7. 接收服务器的响应消息,并记录接收到响应时的时间。 8. 计算往返时间(RTT)时间,即接收到响应时的时间减去发送时的时间。 9. 打印出接收到的响应消息、往返时间和服务器的地址和端口信息。 10. 重复步骤4-9,直到达到指定的次数或设置了终止ping的条件。 11. 统计和计算平均往返时间和丢包率等相关统计信息。 12. 关闭套接字。 编程实现基于UDPping可以通过上述步骤来完成。这个程序可以用于测试服务器的可用性和计算网络的RTT等指标。在实际使用中,还可以根据具体的需求对程序进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

继学先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值