TCP 和 UDP 的区别
TCP
TCP(Transmission Control Protocol传输控制协议)是一种面向连接的,可靠的,基于字节流的传输通信协议。
- tcp(Transmission Control Protocol传输控制协议)
- 传输层协议
- 原因:应用层需要可靠的连接,但是IP层没有这样的流机制
- 面向连接,即在客户端和服务器之间发送数据之间,必须先建立连接
- 位于应用层和IP层之间
- 连接需要建立三次握手、四次挥手断开连接
- 传输数据时可靠的
TCP 的包头的内容及作用
- 源端口和目标端口是不可少的。
- 包的序号,主要是为了解决乱序问题
- 确认序号,发出去的包应该有确认,这样能知道对方是否收到,如果没收到就应该重新发送,这个解决的是不丢包的问题
- 状态位,SYN 是发起一个链接,ACK 是回复,RST 是重新连接,FIN 是结束连接。因为 TCP 是面向连接的,因此需要双方维护连接的状态,这些状态位的包会引起双方的状态变更
- 窗口大小,TCP 要做流量控制,需要通信双方各声明一个窗口,标识自己当前的处理能力。
TCP连接建立——使用三次握手建立连接
- 客户端发送请求【寻址请求】
- 服务器端收到报文请求,回应客户端【确认请求】
- 客户端收到服务端的报文进行回应。【连接请求】
三次握手完成,TCP客户端和服务端成功地建立连接,可以传输数据。
TCP终止一个连接——四次握手
- 数据验证请求码
- 传输结束标记
- 确认结束标记
- 连接断开标记
TCP实现可靠传输
保证顺序性,每个包都有一个 ID。在建立连接的时候会商定起始 ID 是什么,然后按照 ID 一个个发送,为了保证不丢包,需要对发送的包都要进行应答。
应答方式是在某个 ID之前的表示都收到了,这种模式称为累计应答。
为了记录所有发送的包和接收的包,TCP 需要发送端和接收端分别来缓存这些记录,发送端的缓存里是按照包的 ID 一个个排列,根据处理的情况分成四个部分:
- 发送并且确认的
- 发送尚未确认的
- 没有发送等待发送的
- 没有发送并且暂时不会发送的
注意:3和4属于流量控制的内容
在 TCP 里,接收端会给发送端报一个窗口大小,叫 Advertised window。这个窗口应该等于上面的2加上3,超过这个窗口,接收端就不发送了。
具体如下图:
对于接收端来讲,它的缓存里面的内容要简单一些
- 接收并且确认过的
- 还没接收,但是马上就能接收的
- 还没接收,但也无法接收的
TCP 为什么是可靠连接
- 通过 TCP 连接传输的数据无差错,不丢失,不重复,且按顺序到达。
- TCP 报文头里面的序号能使 TCP 的数据按序到达
- 报文头里面的确认序号能保证不丢包,累计确认及超时重传机制
- TCP 拥有流量控制及拥塞控制的机制
UDP
UDP(User Datagram Protocol用户数据报协议)
- UDP(User Datagram Protocol用户数据报协议)
- 传输层协议
- 无连接的数据报协议
- 不能提供数据报分组,组装和不能对数据报进行排序
- 主要用于不要求分组顺序到达的传输中,分组传输顺序的检查和排序有应用层完成。
- 提供面向事务的简单不可靠传递服务。
- UDP协议使用端口分别运行在同一台设备上的多个应用程序
- 功能:为了在给定的主句上能识别多个目的的地址,同时允许多个应用程序在同一台主句上工作并能够独立地进行数据包的发送和接受,设计用户数据报协议UDP
UDP 的主要应用场景
- 需要资源少,网络情况稳定的内网,或者对于丢包不敏感的应用,比如 DHCP 就是基于 UDP 协议的。
- 不需要一对一沟通,建立连接,而是可以广播的应用。因为它不面向连接,所以可以做到一对多,承担广播或者多播的协议。
- 需要处理速度快,可以容忍丢包,但是即使网络拥塞,也毫不退缩,一往无前的时候
TCP和UDP的区别
- TCP是面向连接的(在客户端和服务器之间传输数据之前要先建立连接),UDP是无连接的(发送数据之前不需要先建立连接)
- TCP提供可靠的服务(通过TCP传输的数据。无差错,不丢失,不重复,且按序到达);UDP提供面向事务的简单的不可靠的传输。
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性比较高的通讯或广播通信。随着网速的提高,UDP使用越来越多。
- 没一条TCP连接只能是点到点的,UDP支持一对一,一对多和多对多的交互通信。
- TCP对系统资源要去比较多,UDP对系统资源要求比较少
- UDP程序结构更加简单
TCP是流模式,UDP是数据报模式
参考于 https://blog.csdn.net/zhang6223284/article/details/81414149