Wireshark网络协议分析 - UDP协议

在我的博客阅读本文

文章目录

  • 1. 基础
  • 2. 实战
      • 2.1. 用Go写一个简单的UDP服务器与客户端
      • 2.2. Wireshark抓包分析
  • 3. UDP与TCP的区别
  • 4. 参考资料

1. 基础

UDP包的数据结构:

Untitled

2. 实战

2.1. 用Go写一个简单的UDP服务器与客户端

我们这里使用Golang写了一个简单的9830端口的UDP服务器与客户端,源代码简单展示如下:

服务端:

package serverimport ("fmt""net""os""test/util"
)func StartUDPServer(c chan<- string) {addr := "localhost:9829"udpAddr, err := net.ResolveUDPAddr("udp", addr)if err != nil {util.HandleError(err)os.Exit(1)}conn, err := net.ListenUDP("udp", udpAddr)if err != nil {util.HandleError(err)os.Exit(1)}defer conn.Close()c <- "ready"fmt.Println("UDP server listening on", addr)buffer := make([]byte, 1024)for {n, clientAddr, _ := conn.ReadFromUDP(buffer)if n > 0 {fmt.Printf("Received '%s' from %s\n", string(buffer[:n]), clientAddr)return}}
}

客户端:

package clientimport ("fmt""net""os""test/util"
)func StartUDPClient() {serverAddr := "localhost:9829"udpAddr, err := net.ResolveUDPAddr("udp", serverAddr)if err != nil {util.HandleError(err)os.Exit(1)}conn, err := net.DialUDP("udp", nil, udpAddr)if err != nil {util.HandleError(err)os.Exit(1)}defer conn.Close()message := []byte("Hello UDP server!")_, err = conn.Write(message)if err != nil {fmt.Println("Error writing to UDP:", err)os.Exit(1)}fmt.Println("Message sent to server:", string(message))
}

执行入口:

package mainimport ("fmt""sync"c "test/internal/client"s "test/internal/server"
)// main wireshark filter express: udp.port==9829
func main() {var wg sync.WaitGroupwg.Add(2)serverReady := make(chan string, 1)go func() {s.StartUDPServer(serverReady)wg.Done()}()go func() {<-serverReadyc.StartUDPClient()wg.Done()}()wg.Wait()fmt.Println("done!")
}

编译执行,控制台输出如下:

Untitled

2.2. Wireshark抓包分析

由于我们这里UDP客户端和服务端都是面向localhost ,使用adapter for loopback traffic capture接口捕获回环流量,过滤器过滤tcp端口9829即可:

udp.port==9829

Untitled

可以看到,UDP协议的过程是比较简单的,无需TCP一样的“三次握手”操作,仅需直接对着监听端口发送数据,接收方接受数据即可。

WiresharkTransport分析中,我们可以看到上述的UDP包头信息:

Untitled

其中包括了源和目标端口地址,长度,校验和和数据payload信息。

3. UDP与TCP的区别

  • 本质的区别是TCP 是有状态的,面向连接的,UDP是面向无连接的。TCP会三次握手,维护客户端和服务端的连接,建立一定的数据结构来维护双方交互的状态,UDP则不会
  • 剩下的区别都是基于这个本质特性不一样衍生出的应用特性,比如:
    • TCP提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、有序。
    • UDP不保证不丢失,不保证按顺序到达。

4. 参考资料

  • 林沛满 -《Wireshark网络分析就这么简单》
  • 刘超 ——《趣谈网络协议》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444312.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ—RocketMQ安装

RocketMQ—RocketMQ安装 在安装RocketMQ之前需要先安装Jdk&#xff0c;并配置JAVA_HOME环境变量。 在安装之前我们要先下载RocketMQ的安装包。 下载 到RocketMQ的官网https://rocketmq.apache.org/ 选择Download。 本文使用4.9.2版本。 将下载页面拉到最后面&#xff0c;有…

【Tomcat与网络6】 Tomcat是如何扩展Java线程池的?

目录 1.Java 的线程池 2.Tomcat 的线程池 学习Tomcat的时候&#xff0c;有很多绚丽的技术值得我们学习&#xff0c;但是个人认为Tomcat的线程池扩展是最值得研究的一个部分&#xff0c;线程池的应用太广了&#xff0c;也重要了&#xff0c;Java原生线程池的特征我相信很多人都…

案例三:U盘提示格式化?3种方法帮你拯救它

在U盘的使用过程中最尴尬的情况就是遇到“无法打开&#xff0c;需要进行格式化”的提示。此时&#xff0c;我们如何才能在不破坏内部数据的情况下&#xff0c;挽救这个U盘呢&#xff1f; 小编今天就和说3个方法&#xff0c;可以用来解决U盘“无法打开&#xff0c;需要进行格式化…

新生儿数创新低,母婴行业如何蹚出转型升级新路子?

902万&#xff01;这一数据让不少母婴公司眼前一黑。 不久前&#xff0c;国家统计局公布了中国人口最新数据&#xff0c;2023年出生人口902万人&#xff0c;对比上一年956万人的数据我国新生儿人数进一步减少。 新生儿数创新低&#xff0c;是否意味着母婴行业的增长空间越来越…

随时随地,指尖操控:揭秘远程控制APP的便捷之美!

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

大模型运行成本对比:GPT-3.5/4 vs. 开源托管

在过去的几个月里&#xff0c;生成式人工智能领域出现了许多令人兴奋的新进展。 ChatGPT 于 2022 年底发布&#xff0c;席卷了人工智能世界。 作为回应&#xff0c;各行业开始研究大型语言模型以及如何将其纳入其业务中。 然而&#xff0c;在医疗保健、金融和法律行业等敏感应用…

elementUI实现selecttree自定义下拉框树形组件支持多选和搜索

elementUI实现selecttree自定义下拉框树形组件支持多选和搜索 效果图定义子组件父组件应用 效果图 定义子组件 主要结合el-select和el-tree两个组件改造的。 <template><div class"selectTree"><el-select filterable :filter-method"filterMe…

【Leetcode 514】自由之路 —— 动态规划

514. 自由之路 电子游戏“辐射4”中&#xff0c;任务 “通向自由” 要求玩家到达名为 “Freedom Trail Ring” 的金属表盘&#xff0c;并使用表盘拼写特定关键词才能开门。 给定一个字符串ring&#xff0c;表示刻在外环上的编码&#xff1b;给定另一个字符串key&#xff0c;表…

鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级

在2023年云栖大会上&#xff0c;阿里云数据库产品事业部负责人李飞飞在主题演讲中提到&#xff0c;瑶池数据库推出“DB存储”一体化能力&#xff0c;结合人工智能、机器学习、存储等方法和创新能力&#xff0c;实现Buffer Pool Extension能力和智能冷温热数据分层能力。在大会的…

写静态页面——粘性定位练习

0、效果&#xff1a; 1、HTML代码&#xff1a;为了简洁采用内部样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

怎么恢复回收站清空的文件?这3个方法收藏好!

“着急&#xff01;想问问大家平常如果不小心清空了回收站&#xff0c;有什么比较好的方法可以恢复回收站里的重要文件吗&#xff1f;” 在日常生活中&#xff0c;我们可能会将一些重要的文件或数据误删进回收站&#xff0c;甚至清空了回收站。这些文件可能包含重要的工作文档、…

交通模拟软件为市政交通发展再加速

城市规划人员利用 DYNAMEQ 开发埃德蒙顿道路模型路线图&#xff0c;推动更智能的未来规划 满足快速发展城市的出行需求 埃德蒙顿市是加拿大阿尔伯塔省的首府。在过去的 10 年中&#xff0c;埃德蒙顿市人口增长了 25&#xff05;&#xff0c;是加拿大发展最快的城市。城市规划人…