区别
1.TCP面向连接(比如打电话需要拨号建立连接);UDP是无连接的,即发送数据之前 不需要建立连接
2.TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,而且是按照顺序到达,UDP不保证可靠交付
3.TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有阻塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有效,比如IP电话,实时的视频会议等)
4.每一条TCP链接只能是点到点的,UDP支持一对一、一对多、多对多的交互通信
5.TCP首部开销20字节,UDP的首部开销小,只有8字节
6.TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
虽然UDP不提供可靠的交付,但在某些情况UDP确实是一种最有效的工作方式(即时通信)
由于TCP要提供可靠的面向连接的传输服务,难免增加许多开销,如确认,流量控制,计时器以及连接管理,这就不仅使得协议数据单元的首部增大很多,还要占用许多处理机资源
TCP的三次握手
客户端采用TCP协议将带有SYN标志的数据包发送给服务器 。等待服务器确认
服务器在收到SYN 的数据包婚后,必须确认SYN ,即自己发送的ACK标志,同时自己发送一个SYN标志
客户端在收到服务器的SYN和ACK包后,自己向服务器发送一个ACK包,完成三次握手
四次挥手
断开服务器和客户端之间的通信,之所以要断开链接,是因为TCP/IP协议需要占用端口,计算机的端口有限,避免造成资源浪费
客户端想服务器发送FIN数据包,表示自己要断开通信
服务器收到FIN标志的数据包,发送ACK标志的应答信息,使客户端明白服务器还有数据需要进行发送
当服务器数据发送完成,向客户端发送FIN标志数据包,通知客户端断开链接
客户端收到FIN后,担心网络上某些并不可控因素,服务器不知道也要断开连接,会发送ACK进行确认,同时自己设置成Time_WAIT状态,启动定时器,服务器收到请求之后断开连接,当客户端等待2MLS(两倍报文最大生存时间)后,没收到请求重传以后,客户端断开连接,TCP通信结束
三次握手和四次挥手的必要性
三次握手每一次都是必须的,如两次,在第二次结束后,服务器不能保证客户端收到第二次请求,如此一来,服务器会一直保存着这个通信过程,因为TCP通信都是占用端口造成资源良妃,所以一定要客户端来发送ACK进行确认请求
四次挥手不能像三次握手一样,将ACK和SYN一起发送,ACK确认消息后,SYN建立连接。四次挥手,ACK和FIN不能一同发送,ACK只是个告诉客户端我收到了,带我将数据发送完毕向其发送FIN标志