关于TCP和UDP的解读
网络协议是每个工程师都需要了解的传输层协议, 其中需要着重掌握的是TCP和UDP,这两中传输协议的区别也会成为面试管口中常问的问题。
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议。
(A和B加了好友进行聊天,聊天内容不会丢失)
UDP(User Data Protocol,用户数据报协议)是一个面向无连接的协议。
(A和B无线电聊天,听不听的到一切佛系随缘,男A和女B是谁详情往下…)
TCP和UDP的区别
1. 连接方面的区别
TCP是面向连接的,即传输数据前需要先建立连接
UPD是无连接的,发送数据之前是不需要连接的
2. 安全方面的区别
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。
UDP尽最大努力交付,即不保证可靠交付。
3. 传输效率的区别
TCP传输效率相对较问低。
UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。
4. 连接对象数量的区别
TCP连接只能是点到点、一对答一的。
UDP支持一对一,一对多,多对一和多对多的交互通信。
TCP连接的三次握手
-
第一次握手:建立连接时,客户端向服务器端发送syn包,等待服务器确认。
-
第二次握手:服务器收到syn包,同时自己也发送一个syn包,即syn+ack包。
-
第三次握手:客户端收到服务器的syn包,向服务器发送确认包。
此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
SYN:同步序列编号(Synchronize Sequence Numbers)。
以上解释比较官方,可以用一个简单的图片即可了解,如下
- 第一次握手:刚刚开学,男同学A看上了同班女同学B,在附近的人搜索看到了头像是她的qq号,发送了SYN(我的qq号是123456)
- 第二次握手,B看到A发送的消息,发出SYN(我的qq号是654321)+ACK(你是XXX吗?)
- 第三次握手:A收到B发送的消息,发出ACK(是的,你是XXX吗?)
A和B确实是对方没错,于是乎加了好友开始聊天(传输数据)
TCP连接的四次挥手
- 第一次挥手:A数据传输完毕需要断开连接,A的应用进程向其TCP发出连接释放报文段(FIN = 1,序号seq = u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1状态,等待B的确认。
- 第二次挥手:B收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,A到B的连接释放。而A收到B的确认后,进入FIN-WAIT-2状态,等待B发出的连接释放报文段。
- 第三次挥手:当B数据传输完毕后,B发出连接释放报文段(FIN = 1,ACK = 1,序号seq = w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A 的最后确认。
- 第四次挥手:A收到B的连接释放报文段后,对此发出确认报文段(ACK = 1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSE状态。
ok,有添加好友的过程就会有删除好友的过程
- 第一次:A另寻新欢,不想与B聊天了,但又怕B发现这个QQ的蛛丝马迹,于是主动给B发消息FIN:(这个号(seq=u)123456不聊了)
- 第二次:B收到A的消息,有点不开心,于是质问A发送ACK:((ack=u+1)123456+1不要了?连号的qq多好呀,那我(seq=v)654321咋办)
- 第三次:A在撩骚没给B发消息,B追问,FIN(死鬼?,不聊了?我还是觉得你的qq(ack=u+1)123456号好),ACK(你的新qq号是什么,我(seq=w)654321加你)
- 第四次:A有点不耐烦发送ACK(新号是1234567,(seq=u+1)123456这个号不喜欢了,你懂我意思吧,有更好的了,你这个(ack=w+1)654321也不咋地,有啥可稀罕了,删了)