TCP | UDP |
---|---|
面向连接(一对一 双全工) | 无连接(广播,可以一对一,也可以一对多) |
保证数据的准确性 | 可能丢包 |
保证数据的顺序 | 不保证数据顺序 |
以流的形式传输 | 以数据包的形式传输 |
TCP是怎么保证可靠的数据传输的?
1.校验和 (简单来说就是可以通过这个值判断数据有没有出错)
2.应答机制和序列号(对每个数据包都进行了编号,收到都要应答)
3.超时重传(发送完数据包之后一段时间没收到应答,重新发送)
4.流量控制(防止发送太快,缓冲区不够导致丢包,可以告诉对面缓冲区大小,该发多大的包)
5.拥塞控制(慢开始,一开始传少量的数据看看网络情况,逐渐提高传输效率,如果传输出了问题,又会降低传输效率)
什么是流?什么是数据包?有什么不同?
tcp粘包问题
流:比如一次传输200KB,再来一次传输300KB ,可以只调用一次recvfrom函数就全部接受
数据包:发几次就要调用几次recvfrom函数
什么时候会发生粘包?
发送端发送的数据间隔较短,且数据量小
接收端处理缓冲区的速度小于接收的速度
怎么解决粘包?
在发送数据包的包头包含此次数据包大小的信息
网友评论