计算机网络编程——UDP详解

这篇具有很好参考价值的文章主要介绍了计算机网络编程——UDP详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.UDP协议的概述

UDP(User Datagram Protocol)是一种在网络通信中使用的传输层协议。与TCP(Transmission Control Protocol)相比,UDP是一种无连接的协议,这意味着它不像TCP那样在通信的开始和结束时需要建立和终止连接。

2.UDP协议的特点

 文章来源地址https://www.toymoban.com/news/detail-753453.html

  1. 无连接性: UDP是无连接的协议,这意味着通信的双方不需要在通信之前建立连接。每个UDP数据报都是独立的,它们可以单独发送,没有依赖关系。

  2. 不可靠性: UDP不提供数据传输的可靠性保证。它不会像TCP那样提供重传、确认和流量控制等机制。这意味着如果发送的数据丢失或者损坏,UDP不会自动重新发送,需要应用层自行处理。

  3. 速度和低延迟: 由于没有连接状态维护和复杂的确认机制,UDP的开销比TCP小,因此在速度和延迟方面表现更好。这使得它适用于实时应用,如语音通话和在线游戏。

  4. 数据报格式: UDP数据报包含了目标端口号和源端口号,这些信息用于将数据传递给正确的应用程序。但是,数据报本身没有保证按顺序到达或完整到达。

  5. 无拥塞控制: UDP不具备TCP的拥塞控制机制,因此在网络拥塞的情况下,UDP数据报可能会丢失或延迟增加。

  6. 广播和多播支持: UDP支持向特定组中的多个主机发送数据,这称为多播(Multicast)。也可以将数据报广播到网络中的所有主机,这称为广播(Broadcast)。

  7. 适用场景: UDP适用于需要快速传输和实时性要求较高的应用,如语音和视频流、在线游戏、实时传感数据等。它不适用于需要可靠传输和数据完整性的场景,因为这些方面没有被UDP提供。

3.UDP的格式

 

udp无连接怎么理解,计算机网络,udp,网络协议 

4.网络编程 

我是在同一局域网下两台电脑实现的通信,一台是服务器,一台是客户端 

你可以借用你室友的电脑,条件是在同一局域网,连同一个wifi就行,如果没条件的同学也可以把ip换成本地ip,本地测试。

server_address = ('127.0.0.1', 12345)

客服端代码

import socket
import time
# 定义服务器地址和端口
server_address = ('192.168.31.54', 12345)

# 创建 UDP 客户端套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
    send_time = time.time()
    message = "祖国必定统一!"
    client_socket.sendto(message.encode(), server_address)
    #接收数据
    data,server = client_socket.recvfrom(1024)
    receive_time = time.time()
    #计算延迟
    delay = receive_time - send_time
    print("收到数据:", data.decode())
    print("通信延迟:", delay, "秒")
finally:
    client_socket.close()

服务器ip地址192.168.31.54 端口号:12345 

服务端代码

 

import socket
# 绑定服务器地址和端口
server_address = ('192.168.31.54', 12345)  # 留空表示绑定到所有可用接口
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server_socket.bind(server_address)

print("等待客户端连接...")

try:
    data, address = server_socket.recvfrom(1024)
    print("收到数据:", data.decode())

    # 发送数据
    response = "hello from server!"
    server_socket.sendto(response.encode(), address)

finally:
    server_socket.close()

先运行服务端,在开启客户端。

服务端运行结果

udp无连接怎么理解,计算机网络,udp,网络协议 

客户端运行结果 

udp无连接怎么理解,计算机网络,udp,网络协议 

5.数据抓包 

 在运行服务端之前开启抓包

udp无连接怎么理解,计算机网络,udp,网络协议

udp无连接怎么理解,计算机网络,udp,网络协议 

抓包的数据保存在这里了。

电脑进程会调用12345端口,查询udp协议,端口12345产生的数据包。

udp无连接怎么理解,计算机网络,udp,网络协议 

 udp无连接怎么理解,计算机网络,udp,网络协议

udp无连接怎么理解,计算机网络,udp,网络协议 

 

 

  • Internet Protocol Version 4: 这表示这是一个IPv4数据包,与之前描述的类似,是一种在互联网上传输数据的常见协议。

  • Src: 192.168.31.46: 这是源IP地址,表示数据包的发送方的唯一标识。在你的数据中,源IP地址是 192.168.31.46。

  • Dst: 192.168.31.54: 这是目标IP地址,表示数据包的接收方的唯一标识。在你的数据中,目标IP地址是 192.168.31.54。

  • Version: 4: 这是IP协议的版本,表示这是IPv4。

  • Header Length: 20 bytes (5): 这是IP头部的长度,以字节为单位。在你的数据中,IP头部的长度是20字节。

  • Differentiated Services Field: 这是用于指示数据包优先级和服务质量的字段。在你的数据中,DSCP(DiffServ Code Point)被设置为0,表示默认服务。

  • Total Length: 49: 这是整个IP数据包的长度,以字节为单位。在你的数据中,数据包的长度是49字节。

  • Identification: 0x4ec2 (20162): 这是一个用于分片和重组数据包的标识字段。

  • Flags: 0x0000: 这是用于分片和重组的标志字段。

  • Time to live: 128: 这是数据包的生存时间,类似之前的描述。

  • Protocol: UDP (17): 这表示数据包中封装的是UDP协议的数据。

  • Header checksum: 这是IP头部的校验和,与之前的描述类似。

  • Source: 192.168.31.46: 这是源IP地址。

  • Destination: 192.168.31.54: 这是目标IP地址。

  • udp无连接怎么理解,计算机网络,udp,网络协议

  • 5c ba ef 2a ea 63: 这是目标MAC地址,也就是数据帧的目标设备的MAC地址。

  • 50 28 4a eb 78 e1: 这是源MAC地址,也就是数据帧的发送设备的MAC地址。

  • 08 00: 这是帧类型字段,指示以太网帧中的上层协议是IPv4。

  • 45 00: 这是IP首部的起始,表示IPv4版本和首部长度。

  • 00 2e: 这是IP数据报的总长度。

  • 35 7d: 这是标识字段,用于分片和重组数据报。

  • 00 00: 这是标志和片偏移字段。

  • 80 11: 这是TTL和上层协议字段,表明上层协议是UDP。

  • 45 8d: 这是IP首部校验和。

  • c0 a8 1f 36: 这是源IP地址,表示数据报的发送方IP地址。

  • c0 a8 1f 2e: 这是目标IP地址,表示数据报的接收方IP地址。

  • 30 39: 这是源端口号,表示UDP数据报的发送方端口号。

  • ed 4b: 这是目标端口号,表示UDP数据报的接收方端口号。

  • 00 1a: 这是UDP数据报的长度。

  • ba 41: 这是UDP校验和。

udp无连接怎么理解,计算机网络,udp,网络协议 

udp无连接怎么理解,计算机网络,udp,网络协议 

数据部分:

e7a596e59bbde5bf85e5ae9ae7bb9fe4b880efbc81

 

 

udp无连接怎么理解,计算机网络,udp,网络协议 

 udp无连接怎么理解,计算机网络,udp,网络协议

 

数据部分:48 65 6c 6c 6f 20 66 72 6f 6d 20 73 65 72 76 65 72 21udp无连接怎么理解,计算机网络,udp,网络协议

  1. hex_string = "48656c6c6f2066726f6d2073657276657221"

    • 这行代码将一个十六进制字符串赋值给变量 hex_string。这个十六进制字符串表示ASCII字符的值,拼写出了 "Hello from server!"。
  2. decoded_string = bytes.fromhex(hex_string).decode("utf-8")

    • 这行代码的作用:
      • bytes.fromhex(hex_string) 将十六进制字符串转换为字节序列。
      • .decode("utf-8") 将字节解释为UTF-8编码的字符串。
      • 结果被存储在变量 decoded_string 中。
hex_string = "48656c6c6f2066726f6d2073657276657221"
decoded_string = bytes.fromhex(hex_string).decode("utf-8")
print(decoded_string)


 udp无连接怎么理解,计算机网络,udp,网络协议

udp无连接怎么理解,计算机网络,udp,网络协议 

我上大一的时候还想抓包qq的连天记录,现在在知道怎么会这么容易让你知道聊天内容。就自己写了一个来抓包,顺便回忆一下计算机网络知识。 

 

 

 

 

  

 

 

 

 

到了这里,关于计算机网络编程——UDP详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络技术与JAVA网络编程URL编程-----JAVA入门基础教程-----计算机网络经典

    import org.junit.jupiter.api.Test; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class URLTest { public static void main(String[] args) { //URL:统一资源定位符(种子),一个URL就定位着互联网上某个资源的地址 //http:应用层协议,IP地址,端口号,资源地址,参数

    2024年02月15日
    浏览(34)
  • 计算机网络编程 | 多路I/O转接服务器

    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 专栏:《网络编程》 多路IO转接服务器也叫做多

    2024年02月12日
    浏览(41)
  • 计算机网络编程 | 并发服务器代码实现(多进程/多线程)

    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 专栏:《网络编程》 当涉及到构建高性能的服务

    2024年02月08日
    浏览(46)
  • 计算机网络技术与JAVA网络编程手写Socket聊天室-----JAVA入门基础教程-----计算机网络经典

    import java.io.*; import java.net.Socket; import java.util.Scanner; public class ChatClient { public static void main(String[] args) { try { Socket socket = new Socket(\\\"127.0.0.1\\\",9090); new Thread(new Runnable() { @Override public void run() { InputStream inputStream = null; while(true) { try { inputStream = socket.getInputStream(); } catch (IOException e)

    2024年02月15日
    浏览(44)
  • 计算机网络课程实验4——编程实现路由算法(迪杰斯特拉算法)

    实验目的: 运用各种编程语言实现基于 Dijkstra 算法的路由软件。 实验意义: 通过本实验,使学生能够对路由原理和路由算法有进一步的理解和掌握。 实验步骤: 1, 选择合适的编程语言编程实现基于 Dijkstra 算法的路由软件。 输入不同的网络拓扑和链路代价测试和验证自己

    2024年02月06日
    浏览(38)
  • 编程入门(四)【计算机网络基础(由一根网线连接两个电脑开始)】

    读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 当你有一跟网线和两台计算机💻时,你会不会想我如何让这两台电脑互联(通信)呢?本文将通过上述网络中所遇到的实际问题,来介绍

    2024年04月22日
    浏览(40)
  • jsp 网络社区便利店系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

    一、源码特点      JSP 网络社区便利店系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 jsp 网络社区便利店系统M

    2024年02月12日
    浏览(34)
  • 网络编程 —— TCP 和 UDP 编程详解

    目录 网络编程主要函数介绍 1. socket 函数 2. bind 函数 3. listen 函数 4. accept 函数 5. connect 函数 6. send 函数 7. recv 函数 8. recvfrom 函数 9. sendto 函数 TCP 和 UDP 原理上的区别 TCP 编程 服务端代码: 客户端代码: UDP 编程 服务端代码: 客户端代码: 1. socket 函数 int socket(int domain, int

    2024年02月04日
    浏览(33)
  • 【网络编程】TCP,UDP协议详解

    小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~   目录 前言 TCP协议 TCP协议特点 TCP协议通信场景 TCP协议的几个重要机制 一、

    2023年04月19日
    浏览(41)
  • 网络编程详解-UDP-TCP

    网络编程 在网络通信协议下,不同计算机上运行的程序,可以进行数据传输 网络编程的三要素是 IP地址、端口和协议 。具体分析如下: IP地址 :IP地址是网络中每一台计算机的唯一标识,它类似于现实生活中的家庭住址,用于在网络中找到具体的设备。IP地址是由数字组成

    2024年03月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包