UDP协议
TCP和UDP有哪些区别?
- TCP是面向连接的,UDP是面向无连接的。面向连接的协议会先建立连接。例如TCP的三次握手。所谓的建立连接是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
- TCP提供可靠支付,保证数据无差错、不丢失、不重复、按序到达,UDP反之。
- TCP是面向字节流的,UDP是基于数据报的。
- TCP可以拥塞控制。
- TCP是有状态服务。
包的传输过程:
UDP包到达目标机器,发现MAC地址匹配,取下。将剩下的包传输给处理IP层的代码。取下IP头,目标IP匹配。IP头里面有8位协议,存放数据是UDP还是TCP协议,如果我们知道UDP头的格式,就能从数据里面将它解析出来。处理完传输层的事情,数据就应该交给应用程序去处理。无论应用程序使用TCP还是UDP传数据,都需要监听一个端口来区分应用程序。
UDP三大特点:
- 沟通简单,不需要大量的数据结构、处理逻辑、包头字段。
- 不会建立连接。
- 不会根据网络的情况进行发包的拥塞控制。
UDP的三大使用场景:
- 需要资源少,在网络情况较好的内网,或者对于丢包不敏感的应用。
- 不需要一对一沟通,建立连接,而是可以广播的应用。
- 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也要毫不退缩。
TCP协议
TCP包头格式:
- 端口号:确定数据应该往哪里发送。
- 序号和确认序号:序号是为了防止乱序问题,确认序号是确定发出去的包有没有被收到。
- 状态位:SYN发起一个连接,ACK是回复,RST是重新连接,FIN是结束连接。
- 窗口大小:TCP要做流量控制,通信双方各声明一个窗口,标识自己当前能够的处理能力。
TCP的三次握手
一开始,客户端和服务端都处于CLOSED状态。先是服务器主动监听某个端口,处于LISTEN状态。然后客户端主动发起连接SYN,之后处于SYN—SEND状态。服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RCVD。客户端收到服务端的SYN和ACK之后,发送ACK的ACK,之后处于ESTABLISTEN状态。服务端收到ACK的ACK后,处于ESTABLISTEN状态。
TCP的四次挥手