UDP与TCP的区别

UDP与TCP的区别

  1. 连接方式

    • TCP是面向连接的协议,通信前需通过三次握手建立连接。
    • UDP是无连接的协议,直接发送数据,无需建立连接。
  2. 可靠性

    • TCP提供可靠传输,通过确认、重传、流量控制等机制确保数据完整有序。
    • UDP不保证可靠性,数据可能丢失或乱序。
  3. 效率

    • TCP因复杂控制机制,传输效率较低,延迟较高。
    • UDP无控制开销,传输效率高,延迟低。
  4. 数据边界

    • TCP是字节流协议,无明确消息边界。
    • UDP保留数据包边界,发送和接收次数一致。
  5. 拥塞控制

    • TCP动态调整传输速率以避免网络拥塞。
    • UDP无拥塞控制,可能加剧网络拥塞。

TCP建立到结束过程

建立连接(三次握手)

  1. 客户端发送SYN=1, seq=x的同步报文。
  2. 服务端回复SYN=1, ACK=1, seq=y, ack=x+1
  3. 客户端发送ACK=1, seq=x+1, ack=y+1确认。

数据传输

  • 发送方按需分割数据并编号,接收方确认后窗口滑动。
  • 通过超时重传、流量控制等机制确保可靠性。

断开连接(四次挥手)

  1. 主动方发送FIN=1, seq=u
  2. 被动方回复ACK=1, ack=u+1
  3. 被动方发送FIN=1, seq=v
  4. 主动方回复ACK=1, ack=v+1并等待超时关闭。

UDP建立到结束过程

无连接通信

  • 发送端直接构造数据包(源/目标端口、长度、校验和),通过Socket发送。
  • 接收端监听端口,接收数据包并处理。无确认或重传机制。

无明确结束流程

  • 通信双方随时可停止发送或关闭Socket。

应用场景

TCP适用场景

  • 需要可靠传输:网页浏览(HTTP)、文件传输(FTP)、邮件(SMTP)。
  • 长连接交互:数据库连接、远程登录(SSH)。

UDP适用场景

  • 实时性优先:音视频流(RTP)、在线游戏、VoIP。
  • 广播/多播:DNS查询、DHCP、网络发现协议。

Unity中的使用场景

TCP应用

  • 需同步状态的回合制游戏或策略游戏,如棋牌类。
  • 玩家数据持久化,如登录验证或存档上传。

UDP应用

  • 实时动作类游戏(如FPS、MOBA),低延迟优先。
  • 高频小数据包传输,如玩家位置同步。

Unity实现示例

// TCP客户端示例
TcpClient client = new TcpClient();
client.Connect("127.0.0.1", 8080);
NetworkStream stream = client.GetStream();
byte[] data = Encoding.UTF8.GetBytes("Hello TCP");
stream.Write(data, 0, data.Length);

// UDP客户端示例
UdpClient udpClient = new UdpClient();
byte[] udpData = Encoding.UTF8.GetBytes("Hello UDP");
udpClient.Send(udpData, udpData.Length, "127.0.0.1", 9090);

注意事项

  • Unity主线程中需避免阻塞,建议异步处理网络通信。
  • UDP需自行处理丢包和乱序,如添加序列号或冗余校验。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值