巴中做网站的公司,零基础学室内设计,搜索引擎营销概念,微信视频号可以推广吗在我的博客阅读本文 文章目录 1. 基础2. 实战2.1. 用Go写一个简单的UDP服务器与客户端2.2. Wireshark抓包分析 3. UDP与TCP的区别4. 参考资料 1. 基础
UDP包的数据结构#xff1a; 2. 实战
2.1. 用Go写一个简单的UDP服务器与客户端
我们这里使用Golang写了一个简单的9830端… 在我的博客阅读本文 文章目录 1. 基础2. 实战2.1. 用Go写一个简单的UDP服务器与客户端2.2. Wireshark抓包分析 3. UDP与TCP的区别4. 参考资料 1. 基础
UDP包的数据结构 2. 实战
2.1. 用Go写一个简单的UDP服务器与客户端
我们这里使用Golang写了一个简单的9830端口的UDP服务器与客户端源代码简单展示如下
服务端
package serverimport (fmtnetostest/util
)func StartUDPServer(c chan- string) {addr : localhost:9829udpAddr, 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 - readyfmt.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 (fmtnetostest/util
)func StartUDPClient() {serverAddr : localhost:9829udpAddr, 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 (fmtsyncc test/internal/clients test/internal/server
)// main wireshark filter express: udp.port9829
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!)
}编译执行控制台输出如下 2.2. Wireshark抓包分析
由于我们这里UDP客户端和服务端都是面向localhost 使用adapter for loopback traffic capture接口捕获回环流量过滤器过滤tcp端口9829即可
udp.port9829可以看到UDP协议的过程是比较简单的无需TCP一样的“三次握手”操作仅需直接对着监听端口发送数据接收方接受数据即可。
在Wireshark的Transport分析中我们可以看到上述的UDP包头信息 其中包括了源和目标端口地址长度校验和和数据payload信息。
3. UDP与TCP的区别
本质的区别是TCP 是有状态的面向连接的UDP是面向无连接的。TCP会三次握手维护客户端和服务端的连接建立一定的数据结构来维护双方交互的状态UDP则不会。剩下的区别都是基于这个本质特性不一样衍生出的应用特性比如 TCP提供可靠交付。通过 TCP 连接传输的数据无差错、不丢失、不重复、有序。UDP不保证不丢失不保证按顺序到达。
4. 参考资料
林沛满 -《Wireshark网络分析就这么简单》刘超 ——《趣谈网络协议》