对于即时通讯开者新手来说,在开始着手编写IM或消息推送系统的代码前,最头疼的问题莫过于到底该选TCP还是UDP作为传输层协议。
TCP
说到 TCP 建立连接,相信大多数人脑海里肯定可以浮现出一个词,没错就是--“三次握手”。TCP 通过“三次握手”来建立连接,再通过“四次挥手”断开一个连接。在每次挥手中 TCP 做了哪些操作呢?
我们可以先明确一下 TCP 建立连接并且初始化的目标是什么呢?
1)初始化资源;
2)告诉对方我的序列号。
所以三次握手的次序是这样子的:
1)client端首先发送一个SYN包告诉Server端我的初始序列号是X;
2)Server端收到SYN包后回复给client一个ACK确认包,告诉client说我收到了;
3)接着Server端也需要告诉client端自己的初始序列号,于是Server也发送一个SYN包告诉client我的初始序列号是Y;
4)Client收到后,回复Server一个ACK确认包说我知道了。
其中的 2 、3 步骤可以简化为一步,也就是说将 ACK 确认包和 SYN 序列化包一同发送给 Client 端。到此我们就比较简单的解释了 TCP 建立连接的“三次握手”。
UDP
我们都知道 TCP 是面向连接的、可靠的、有序的传输层协议,而 UDP