TCP协议与UDP协议
共同点:
- 都工作在传输层
- 目标都是在程序之间传输数据(文本、视频、图片等)
区别:
TCP基于连接,传输数据稳定可靠,适用于对网络通信质量较高的场景,需要准确无误的传输。
UDP基于非链接,速度快,可能产生丢包,适用于实时性较高,但是对少量丢包并没有太大要求的场景(如:域名查询、语音通话、视频直播等)
TCP如何保证数据准确传输的
1.三次握手
因为在建立连接的过程中发送了三包数据(SYN包、SYN+ACK包、ACK包)故叫三次握手
为什么三次握手而不是两次
解决网络信道不可靠的问题,在不可靠的网络信道上建立起可靠的链接
为了防止已失效的报文突然又传到服务器引起错误(服务端认为是两个连接,客户端认为是一个导致状态不一致)
2.传输确认
丢包问题和乱序问题的解决
1.发送缓冲
TCP为每一个连接创建一个发送缓冲区,从建立连接的第一个字节序列号为0,后面每一个+1。
2.发送报文
发送数据时,从数据缓冲区取一部分数据组成发送报文,在其TCP协议头中会附带序列号和长度。
3.回复确认
接收端在收到数据后需要回复确认报文,确认报文中的ACK=序列号+长度’=下一包起始序列号。
4.切割发送
发送端一次发送连续的多包数据。
接收端只需要回复一次ACK就可以了,根据序列号和长度在接收后重构出完整的数据
5.丢失重传
3.四次挥手
为什么客户端需要等待超时时间
在不可靠的网络信道中进行可靠的连接断开确认
这是保证对方以收到ACK包,如果客户端发送完ACK包后就释放了来连接,一但ACK包在网络中丢失,服务端将一直停留在最后确认状态,服务端没有收到ACK包会重发FIN包,客户端响应FIN包重发ACK包刷新超时时间。
UDP协议
基于非链接,发数据就是简单的将数据封装一下,从网卡发送出去,数据包之间没有状态上的联系。
优点
- 性能损耗小
- 内存资源占用少
缺点:
不能保证数据传输的稳定性
UDP的重要应用场景
隧道网络
- VPN
- VXLAN