关于QQ用的是TCP还是UDP

原本是想汇总整理一下采集到的关于这个问题的问答,翻完一圈发现肤浅的我可能做不了这事了:(
那么我们先从小白角度来区别一下TCP和UDP好了。(另外,我可能要放弃对计网的挣扎了)

传输层

网络层只把分组发送到了目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。

用户数据报协议UDP(User Datagram Protocol)

· UDP是无连接的,不可靠的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加UDP首部),支持一对一,一对多,多对多的交互通信。

传输控制协议TCP(Transmission Control Protocol)

· TCP是面向连接的,提供可靠交付的,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文堪称字节流,把字节流组织成大小不等的数据块),每一条TCP连接只能是点对点的。

【此处分享有幸获得的一个repo:https://github.com/CyC2018/CS-Notes

继续区别

· 系统资源:TCP占用资源多,UDP少
· 程序结构:TCP较复杂,UDP较简单
· 传输模式:TCP(流模式),UDP(数据报);TCP保证数据正确性,UDP可能丢包;TCP保证数据顺序,UDP不保证
· 一些要求比较高的服务通常使用TCP协议,如FTP,Telnet,SMTP,HTTP,POP3等;UDP则面向无连接,使用它的常见服务有DNS,NFS,SNMP
· TCP需经三次握手,四次挥手来建立和释放连接,并通过重传、确认和校验和的方式来确保可靠
· UDP仅仅提供了校验和机制来保障一个报文是否完整,若校验失败,则直接丢弃报文,不做任何处理

总之

· TCP可靠但速度慢,UDP不可靠但速度快,若是自己选择,就看完整性需求和实时性需求哪个更强烈

再看一下QQ

· QQ目前以UDP为主,TCP为辅(据说经典qq上还能自己进行网络设置选择登陆服务器类型为UDP或TCP)
· UDP延迟较短,对数据丢失处理简单,开销小
· 端对端视频音频一般用的都是UDP,毕竟视频聊天的时候丢包重传就很郁闷了,没收到的画面,不看也罢~
· QQ采用UDP,但是在应用层上加了可靠性服务
· 出于UDP穿墙能力的考虑,对早期的腾讯省下不少服务器
· 早期网很烂,这种情况下TCP的优势都会变成劣势
· TCP一定要建立连接,故必须两端都在线,这样很受限制(收不到离线消息?)
· 登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。(有人说现在传文件是TCP)
· (开心一笑:)因为企鹅翅膀太短了,总是握手挥手太累了……

【参考:https://www.zhihu.com/question/20292749

另外,查看运行软件占用的端口及对应协议:
在cmd下输入netstat -an就好啦,如果不行的话,先转到cd c:\WINDOWS\system32\