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 server

import (
	"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 client

import (
	"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 main

import (
	"fmt"
	"sync"
	c "test/internal/client"
	s "test/internal/server"
)

// main wireshark filter express: udp.port==9829
func main() {
	var wg sync.WaitGroup
	wg.Add(2)
	serverReady := make(chan string, 1)

	go func() {
		s.StartUDPServer(serverReady)
		wg.Done()
	}()

	go func() {
		<-serverReady
		c.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网络分析就这么简单》
  • 刘超 ——《趣谈网络协议》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

appsmith安装手记:4.Sql server数据库容器安装

appsmith安装好&#xff0c;那就可以看是练练手。 数据当然是来自数据库&#xff0c;那就连接局域网中现成的一台数据库服务器试试&#xff0c;但是连接数据库的时候一直错误。 找到/home/appsmith/backend 目录下的日志&#xff0c;看到了错误&#xff1a; [rootlocalhost bac…

【HarmonyOS应用开发】ArkUI 开发框架-基础篇-第二部分(八)

八、Column&Row组件的使用 概述 一个丰富的页面需要很多组件组成&#xff0c;那么&#xff0c;我们如何才能让这些组件有条不紊地在页面上布局呢&#xff1f;这就需要借助容器组件来实现。 容器组件是一种比较特殊的组件&#xff0c;它可以包含其他的组件&#xff0c;而…

Qt 调用系统键盘

Wow64DisableWow64FsRedirection(&pvoid) 函数用于禁用 32 位 Windows 程序对文件系统重定向的支持。它将禁用文件系统重定向&#xff0c;以便在运行 32 位应用程序时&#xff0c;可以访问 64 位系统目录。pvoid 是一个指向先前启用的文件系统重定向状态的指针。 构建了要…

《动手学深度学习(PyTorch版)》笔记4.8

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

文本三剑客之grep

目录 一、正则表达式 1、什么是正则表达式 2、元字符 3、扩展正则表达式元字符 二、grep 一、正则表达式 1、什么是正则表达式 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#…

DevOps落地笔记-04|看板方法:成员工作内容清楚明白方法

上一讲主要介绍了用户故事以及如何通过讲好用户故事解决团队沟通的问题&#xff0c;争取达成共识。当团队都理解了用户需求之后&#xff0c;就进入到后续的产品设计、代码开发、功能测试、直到生产部署等环节了。作为软件从业人员都知道&#xff0c;后续的步骤不太可能一帆风顺…

初探分布式链路追踪

本篇文章&#xff0c;主要介绍应用如何正确使用日志系统&#xff0c;帮助用户从依赖、输出、清理、问题排查、报警等各方面全面掌握。 可观测性 可观察性不单是一套理论框架&#xff0c;而且并不强制具体的技术规格。其核心在于鼓励团队内化可观察性的理念&#xff0c;并确保由…

Python 报错 ERROR: No matching distribution found for xxx

文章目录 1. 报错2. 可能的解决方法3. 参考 1. 报错 例如在安装 Python 包的时候&#xff0c;有时会出现这种情况&#xff1a; ERROR: Could not find a version that satisfies the requirement bokeh (from versions: none) ERROR: No matching distribution found for bok…

人工视觉仍然需要图像采集卡

最初&#xff0c;图像采集卡被用作模拟视频数字转换器和图像缓冲器&#xff0c;但如今它们能够执行复杂的任务&#xff0c;例如图像处理。图像采集卡的设计不断发展&#xff0c;旨在提高系统性能并减少计算机处理需求。 除了图像采集之外&#xff0c;图像采集卡还执行机器视觉…

【正点原子STM32】IWDG 独立看门狗(简介、工作原理、IWDG寄存器配置操作步骤、IWDG溢出时间计算、IWDG配置步骤、独立看门狗流程)

一、IWDG简介 IWDG有什么作用&#xff1f; 二、IWDG工作原理 三、IWDG框图 四、IWDG寄存器 键寄存器&#xff08;IWDG_KR&#xff09;预分频器寄存器 (IWDG_PR)重装载寄存器(IWDG_RLR) 状态寄存器(IWDG_SR) 寄存器配置操作步骤 五、IWDG溢出时间计算 IWDG溢出时间计算公式…

幻兽帕鲁服务器Palworld游戏怎么更新?

自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新幻兽帕鲁服务器即可解决。阿里云百科aliyunba…

【Android】高仿京东三级类型列表Demo

本demo基于二级分类双列表联动Demo进行了改进&#xff0c;高仿实现了京东的三级类型列表。 京东的如图&#xff1a; 本demo的&#xff1a; 改进之处 实现了三级列表联动&#xff0c;二三级列表之间的滑动监听优化了一下&#xff0c;将二级类型选中交予自身的点击事件&#…

prometheus和alertmanager inhibit_rules抑制的使用

172.16.10.21 prometheus 172.16.10.33 altermanager 172.16.10.59 mysql服务&#xff0c;node探针以及mysql的探针 [rootk8s-node02 ~]# docker ps -a CONTAINER ID IMAGE …

asp.net core通过读取配置文件来动态生成接口

如果希望接口是每次通过配置文件生成的,这样设计一些低代码的方式来获得接口。 系统目录结构: 启动配置代码: using Microsoft.AspNetCore.Hosting; using System.Configuration; using System.Data.Entity; using Swashbuckle.AspNetCore.SwaggerGen; using System.Refle…

第94讲:MySQL主从复制过滤复制的概念以及使用

文章目录 1.主从复制过滤复制的概念2.通过从库层面实现过滤复制2.1.从库过滤复制的参数2.2.配置过滤复制2.3.验证复制的准确性 1.主从复制过滤复制的概念 在MySQL主从复制集群中&#xff0c;既可以对全库进行主从复制&#xff0c;也可以对数据库实例中的某个数据库进行主从复制…

ShardingSphere 相关实践

实现水平分表 同一个数据库&#xff0c;多个表&#xff0c;把数据分到多个表里面环境&#xff1a;spring boot 2.3.2.RELEASE create database course_db;use course_db;create table course_1 (cid bigint(20) primary key ,cname varchar(50) not null,user_id bigint(20) …

机器学习---可能近似正确(PAC)、出错界限框架

1. 计算学习理论概述 从理论上刻画了若干类型的机器学习问题中的困难和若干类型的机器学习算法的能力 这个理论要回答的问题是&#xff1a; 在什么样的条件下成功的学习是可能的&#xff1f; 在什么条件下某个特定的学习算法可保证成功运行&#xff1f; 这里考虑两种框架&…

Java后端须知的前端知识

Java后端须知的前端知识 HTML &#xff08;超文本标记语言&#xff09; W3C标准 结构&#xff1a;HTML表现&#xff1a;CSS行为&#xff1a;JavaScript 快速入门 <html><head><title></title></head><body><font color"red&q…

无人机除冰保障电网稳定运行

无人机除冰保障电网稳定运行 近日&#xff0c;受低温雨雪冰冻天气影响&#xff0c;福鼎市多条输配电线路出现不同程度覆冰。 为保障福鼎电网安全可靠运行&#xff0c;供电所员工运用无人机飞行技术&#xff0c;通过在无人机下方悬挂器具&#xff0c;将无人机飞到10千伏青坑线…

代码随想录算法训练营第二十二天 |235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点(待补充)

235.二叉搜索树的最近公共祖先 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公…