TCP(传输控制协议(Transmission Control Protocol))
提供面向连接的、可靠的、有序的、流量控制的传输服务(稳)
Tcp是可靠传输,适合对完整性要求高,对延时不敏感
网页也是文件,文件都有完整性要求,其中数据丢失一点,导致文件损坏,整个文件无法打开
延时不敏感,迟0.5s显示,几乎不影响体验
UDP(用户数据报协议(User Datagram Protocol))
提供无连接、不可靠的、无序的、无流量控制的传输服务(快)
基于 UDP 的几个例子
1、直播。直播对实时性的要求比较高,宁可丢包,也不要卡顿的,所以很多直播应用都基于 UDP 实现了自己的视频传输协议
2、实时游戏。游戏的特点也是实时性比较高,在这种情况下,采用自定义的可靠的 UDP 协议,自定义重传策略,能够把产生的延迟降到最低,减少网络问题对游戏造成的影响
3、物联网。一方面,物联网领域中断资源少,很可能知识个很小的嵌入式系统,而维护 TCP 协议的代价太大了;另一方面,物联网对实时性的要求也特别高。比如 Google 旗下的 Nest 简历 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的
区别
TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
总结以及面试问题
什么是面向连接,什么是面向无连接
在互通之前,面向连接的协议会先建立连接,如 TCP 有三次握手,而 UDP 不会
TCP 为什么是可靠连接
通过 TCP 连接传输的数据无差错,不丢失,不重复,且按顺序到达。
TCP 报文头里面的序号能使 TCP 的数据按序到达
报文头里面的确认序号能保证不丢包,累计确认及超时重传机制
TCP 拥有流量控制及拥塞控制的机制
Tcp 怎么保证可靠
1、 三次握手,发送数据前先确保双向通信都正常,才发
2、 滑动窗口,发送方根据接收方的接收能力,动态调整速率,更稳定
3、 确认重传机制,每个数据包,都要收到确认消息才算,没收发会重发
4、 Mss,自动的根据mtu,调整分段的大小,避免分片重组。
5、 数据传输完毕,通过四次挥手释放连接,端口号还可以给其他应用使用
TCP 的顺序问题,丢包问题,流量控制都是通过滑动窗口来解决的
拥塞控制时通过拥塞窗口来解决的