tcp 和udp的区别

TCP是面向连接、可靠的传输协议,提供拥塞控制和全双工通信,适合需要高可靠性的场景。UDP是无连接、不可靠的协议,提供单播、多播和广播功能,适用于实时性和资源有限的场景。TCP编程中需要为每个客户端创建单独的连接,而UDP允许多个客户端共用一个socket。两者可以同时绑定相同端口,但多个TCP服务进程不能绑定相同IP和端口,除非使用SO_REUSEADDR或SO_REUSEPORT。客户端端口可以复用,TCP连接由四元组唯一标识,不会冲突。TCP的TIME_WAIT状态可能导致端口无法立即重用,可以通过内核参数解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP:传输控制协议。面向连接的、可靠的、基于字节流的传输层通信协议。特点:可靠传输(应答确认)、提供拥塞控制、全双工通信(允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据)。
UDP:用户数据报协议。无连接的、 不可靠的、 面向数据报的协议。特点:提供单播,多播,广播的功能
UDP的使用场景(一般情况下尽量使用TCP协议):
资源受限的情况下:例如 nat穿透技术。在互联网技术中,UDP常用在缓存读取,保存;用在监控或终端上报。
不在乎可靠性:例如 本节的 round_trip 程序,消息本身不需要重传,使用udp足够应对。又例如在 直播、视屏通话等场景中,需要的是实时性,如果因重传而造成延迟卡顿,那么用户的使用体验将会很糟糕。
网络编程角度差别:
TCP编程:1. 并发编程需要为每个客户端都创建socket连接,为每个客户端都配备文件描述符。同时需要考虑线程间的分配问题。 2. TCP线程不安全,应避免多个线程同时读取一个文件描述符。
UDP编程:1. 并发编程中,服务端一个socket可以服务多个客户端。2. 线程安全,数据报协议自动维护消息的边界,多线程操作同一个描述符也不会出现粘包,半包的问题(每次从接收缓冲都是只能取回一个完整的包)。
使用UDP编程,需要自己确保可靠性(参考tcp实现,设计心跳机制、应答确认、超时重传等)。 注:UDP协议栈会在发送的时候分片,到了接收重组,每次组好了完整的包就丢给用户,不完整就丢掉,故,可能会出现丢包现象。
 

报文区别

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

滑动窗口:

就是接受方每次收到数据包,在发送确认报文ack的时候,同时告诉发送方,自己的缓存区还有多少空余空间,缓冲区的空余空间,我们就称之为接受窗口大小

序号:占4个字节。序号范围是[0,2^32-1],可以对4GB数据进行编号,到达最大值后,序号会重新从0开始。该序号指的是本报文段所发送数据的第一个字节的序号。如:发送方的初始序号(Initial Sequence Number,ISN)为1000,那么第一个发送的字节将具有序号1000,第二个字节将具有序号1001,依此类推。

确认号,占4个字节。期望收到对方数据报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值