tcp 同 udp的区别

来源:互联网 发布:java大数据量处理 编辑:程序博客网 时间:2024/04/26 21:48

1. udp package 的最大值为64k;tcp没有限制


2. udp 的单个package,要么整体到达(包括组装),要么传递错误(一次sendto只能对应一个recvfrom);tcp需要考虑可能一次只有部分包到达(需要放入while中保证数据全部获取)


3. udp 连续发送的多个包可能达到的顺序不同;tcp因为是stream,不存在这个问题


4. udp server端只需要bind后就可以接受数据; tcp server端逻辑则不同,它包括两个socket,passitive socket和active socket,passitive socket只负责监听端口,一个passitive socket 可以生成多个active socket,active socket才会有具体的数据流动,每条数据通过(local_ip, local_port, remote_ip, remote_port)来确定传输到哪个active socket中


5. connect() API, UDP 并没有实际和server端交互,它仅仅是建议默认连接,并过滤来至其它socketname的数据;而tcp会与server端进行握手操作


6. udp 的sent和receive都是原子操作,要么成功,要么失败;tcp则不同,关于sent,如果outgoing buffer富裕,则整体发送,返回数据的长度,如果buffer繁忙,则会block住进程,如果buffer只有有限空间,这会发送部分数据,返回这部分数据的长度。关于receive,如果没有数据达到,进程会block住,如果buffer中有充足的数据,则会提供recv需要的数目,如果buffer中的数据量小于query的,也会立即返回部分的数据

 

7. udp 不会存在把network buffer填满的情况出现,因为udp packet会自动丢掉;而tcp则可能

0 0
原创粉丝点击