一、主要区别
① 连接的建立和断开:
- TCP(Transform Control Protocol)通过三次握手来建立一个可靠的连接。这个过程确保了双方都能发送和接收数据。连接建立后,TCP提供稳定的数据传输服务。当通信结束时,TCP通过四次挥手来断开连接,确保双方都能优雅地关闭连接。
- UDP(User Datagram Protocal)不需要建立连接,它直接发送数据包。这种方式确实减少了开销,使得UDP在某些场景下(如视频流、在线游戏)比TCP更高效。但是,UDP不保证数据包的顺序、完整性或可靠性,也不提供错误恢复机制。
② 数据传输和错误处理:
- TCP将数据分成多个段进行发送,并在接收方对这些段进行重组。TCP使用序列号(Sequence Numbers)来确保数据包的顺序,并且如果发生丢包,接收方会发送一个确认号(ACK)来请求重新发送丢失的数据包。TCP的这种机制确保了数据的完整性和顺序性。
- UDP同样将数据分成多个数据报进行发送,但它不保证数据报的顺序,也不提供错误恢复机制。如果需要在应用层实现数据的完整性和顺序性,必须由开发者自己来处理。UDP在发生丢包时,确实不能像TCP那样只重新发送丢失的数据包,而是可能需要重新发送整个数据报。
补充区别:
③ 头部开销:
- TCP头部开销较大,通常为20字节,而UDP头部开销较小,为8字节。这使得UDP在传输小数据包时更为高效。
④ 拥塞控制:
- TCP具有拥塞控制机制,可以调整发送速率以避免网络拥塞。
- UDP没有拥塞控制,发送方会以恒定速率发送数据,不考虑网络状况。
总的来说,TCP和UDP各有优势,选择哪种协议取决于应用的具体需求。
二、为什么TCP四次挥手呢?这个次数有何讲究?
TCP四次挥手主要分成两个目的:①保证数据传输完毕;②保证双方都断开连接;
为了达成这两个目的,将四次挥手分解成前两次挥手和后两次挥手。
下面将数据接收方->我方,数据发送方->对方
(1)前两次挥手:我方发送FIN包,表示不会再发送更多数据请求了(第一次挥手)。
对方得到这一信号后,回复ACK包(第二次挥手)。此时,对方可能还有数据没有发送完,
只有发送完这些数据,完成数据传输,才能进行真正的连接断开。
(2)后两次挥手:对方完成数据传输,随后发送FIN包(第三次挥手);我方在得到信号后,
回复ACK包;回复后的我方不能马上关闭连接,而是进入超时等待状态。因为对方未必
收到回复。如果对方没有收到,它就会重发FIN包,需要我方回复。
如果对方收到了,则说明断开连接的共识完全达成,对方直接关闭连接即可。