深入理解通信协议二之TCP与UDP的差异

TCP与UDP的差异

4.1TCP

网络编程懒人入门(四):快速理解TCP和UDP的差异_1915184-43e91a9185faa031.jpg

TCP试图建立连接时,三次握手指的是客户端主动触发两次,服务端触发一次。

TCP建立建立连接并且初始化的目标:

  • 初始化资源
  • 告诉对方我的序列号

TCP三次握手:

  1. Client将标志位SYN置为1,随机产生一个值seq=x,并将数据包发送给Server,等待Server确认,然后进入SYN_SEND状态
  2. Server收到SYN报文进行确认,将标志位SYN和ACK置为1,ack=x+1,随机产生一个值seq=y,然后进入SYN_RECV状态,这个状态称为半连接状态。
  3. Client再次进行确认,将ACK置为1,ack=y+1,seq=x+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态。

4.2UDP

TCP是面向连接的、可靠的、有序的传输层协议,而UDP是面向数据报的、不可靠的、无序的传输协议,所以UDP压根不会建立连接。

UDP只需要知道对方的IP地址,将数据报一份一份的发送过去就可以了,其它的作为发送方都不需要关心。

5数据发送方式的差异

  • TCP:由于TCP是建立在两端连接之上的协议,理论上发送的数据流不存在大小的限制。但是缓冲区是有大小的限制,所以你可以用TCP发送一段很大的数据,可能会截断好几段,接收方依次的接收。
  • UDP:由于UDP本身发送的就是一份一份的数据报,所以自然而然就有一个上限的大小

UDP发送的数据大小有哪些因素共同决定?

  • UDP协议本身,UDP协议有16位deUDP报文长度,那么UDP报文长度不能超过2^16=65536
  • 以太网数据帧的长度,数据链路层的MTU(最大传输单元)
  • socket中的UDP缓冲区大小

UDP属于不可靠协议所以应该避免在传输被分割,UDP包头8字节IP包头20字节。在Intement下MTU的值位576字节,所以在internet下使用UDP协议,每个数据报的最大字节数就是:576-20-8=548字节。

6.数据有序性的差异

TCP本身有超时重传、错误重传还有等等一系列复杂的算法保证了TCP的数据有序的,假设你发送了数据1、2、3,则只要发送端和接收端保持连接时,接收端收到的数据始终都是1、2、3.

UDP协议无论server端缓冲区的大小有多大,接收client端发来的消息总是一个一个接收。并且由于UDP本身的不可靠性以及无序性,如果client发送了1,2,3server端接收的顺序可能是任意顺序

7.可靠性差异

TCP内部有很多算法让他保持连接的过程是可靠的,比如TCP的超时重传、错误重传、TCP的流量控制、阻塞控制、慢热启动算法、拥塞避免算法、快速恢复算法等等,所以TCP是一个内部原理复杂,使用简单的协议

UDP是一个面向非连接的协议,UDP发送的每个数据报都带有自己的IP地址和接收方的IP地址,它本身对这个数据报是否出错、是否到达不关心,只要发出去了就好了。

UDP丢包的情况:

  • **数据报分片重组丢失:**UDP协议本身规定的大小是64kb,但是在数据链路层有MTU的限制,大小大概在5kb,所以当你发送一个很大deUDP包的时候,这个包会在IP层进行分片,然后重组,这个过程就可能导致分片的包丢失。UDP本身有CRC检测,会抛弃丢失的UDP包;
  • **UDP缓冲区填满:**当UDP缓冲区填满的时候,接收方还没有处理缓冲区中这部分UDP数据,这个时候再过来数据报就没有地方可以存了,自然就被丢弃了。

8.场景总结

有很多人说UDP相比于TCP来说,性能速度上占有优势,因为UDP并不用保持一个持续的连接,也不需要对收发包进行确认。但是TCP在网络不错的情况下,TCP的整体性能优于UDP。

有什么时候我们非用UDP不可嘛?

  • 对实时性要求高:实时会议或视频,如果使用TCP,当网络不好时,画面重传越堆越多。如果使用UDP,偶尔丢包不影响。
  • 多点通信:TCP需要保持一个长连接,两个通信节点建立TCP连接不是一个容易的事情,而UDP可以无需保持连接,成本会很低,而且穿透性好。

初次之外使用TCP准备没有错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值