成语| 古诗大全| 扒知识| 扒知识繁体

当前位置:首页 > 趣味生活

tcp协议和udp协议有何区别

Q1:简述TCP和UDP的主要区别,为什么有了TCP协议又要有UDP协议,主要应用场合是什么?

TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报服务;
TCP具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;
UDP具有较好的实时性,工作效率较TCP协议高
UDP段结构比TCP的段结构简单
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
应用场合 传输大量数据 少量数据
速度 慢 快

Q2:TCP协议与UDP协议的区别?主要是那层协议?

前者是面向连接的,比较可靠,好比是打电话,适用于传输文件。后者是无连接的,但节省时间和成本,好比是发传单,适用于传输音频视频。他们都是第四层(传输层)两个最主要的协议

Q3:TCP协议和UDP协议有什么区别?

TCP和UDP的基础知识,可以去翻阅相应书籍。

我说几个在选择和应用协议时比较重要的点,如果你不是很熟悉TCP/IP,应该是有所帮助的。尤其是关于对可靠性的理解。

基于字节流和面向数据报

TCP基于字节流:TCP接收到应用层协议的消息(已编码为二进制)后,然后参考该计算机连接的网络数据链路层MTU(最大传输单元)确定是否要分包,然后交给IP层。但是并不会在不同的消息之间设置分隔符,应用层协议需要在自己的消息中包含该消息的长度信息。类比:你向一个文件追加一系列的序列化对象数据(可看做应用层协议包),如果你自己不标记每次序列化数据的长度,到了反序列化的时候就没办法了。如果你类似Redis在处理字符串的时候在头部维护字符串的长度,就可以安全的读出该字符串。

UDP基于数据报:Udp接收到应用协议的某个消息(已编码为二进制)后,不会分包,但是要记录当前数据包的大小(消息大小加上8个字节头部),然后交给IP层。IPV4对UDP数据报的大小限制为65535字节(包含头部8个字节),你每次可以直接发送的消息不能超过65507字节。然后UDP协议会自行根据头部的报文长度字段确定完整的消息,对于应用层协议来说,这就是一条完整的消息,不用再做逻辑分离消息。

不管是TCP或者UDP,IP层都会再次考虑MTU确定是否分包。IP层的功能这里不展开。

可靠性和时效性

TCP是可靠的,可靠性通过确认和超时重传机制保证。它是保证路由可达时最终能传输成功。

但是如果你加上时效性要求,这个“可靠性”就大打折扣了!考虑RPG游戏场合,如果因为网络丢包等原因,导致超时重传消息1秒后才到,这种延迟你能接受么?

通信链路不总是可靠的,如果出现问题,TCP协议是不会向上汇报的。而是通过ICMP协议来完成,最终由操作系统接收处理,而操作系统一般会接受多次反馈后才会最终确认“断网了”,WIndows就会长达几分钟。你可以尝试拔掉路由器的WLAN端口,再看看你的操作系统什么时候才反应过来无法连接到因特网。你的应用协议可以忍受这么长时间的“懵逼”状态么?

所以,即使TCP有可靠性保证,绝大部分基于TCP的应用层协议都会显示或隐式地包含确认功能和超时设置。考虑HTTP,显示的确认功能,客户端都会有请求超时时间限制。

Tips:

自定义应用层协议需要保证消息有序传输时,tcp的滑动窗口是个很好的实现参考。

选择问题

关于TCP和UDP的一般选择,这里不说了,到处都可以找到。

说几两个需要可靠性但是适用UDP的场合吧。

1、如果你需要做实时性很高且消息小(比如小于以太网的MTU1500Byte)的通信程序,UDP就很适合。关键消息重复发,不用等确认都可以,当然最终还是需要确认。

2、如果是内网环境,网络非常稳定,UDP几乎不会出问题,如果极度要求性能,可以考虑。

3、如果你公网网络资源有限,而用户之间需要传递大量数据,可以考虑用UDP做NAT穿透。

个人见解,欢迎大家评论或者提出意见。

Q4:简述TCP协议和UDP协议有什么区别?

tcp 传输控制协议,经过三次握手实现连接。这中间有建立连接-传送数据-释放连接。是面向连接的安全的协议。
udp 用户数据报协议。是面向无连接的不安全的协议。适用于少量数据的传输。只把数据发送出去,不考虑对方时候接受和接受是否正确。在针对少量数据传输的时候,要比tcp快,而且实用

猜你喜欢

更多