TCP、UDP都是在传输层,都是在程序之间传输数据。
TCP:是基于连接的,主要用于通话、视频
UDP:是基于非连接的,主要用于邮件、网站等
一、TCP三次握手
三次握手主要是建立客户端与服务端的连接,保证客户端和服务端都具有发送和接收数据的能力。
①客户端向服务端发送SYN包(确定是否能建立连接)
②若服务端同意连接,则向客户端发送SYN+ACK包
③客户端收到包后,向服务端发送ACK包(于是连接建立)
!二次连接不行吗?
①防止已失效的请求报文突然又传到服务器引起错误
eg.客户端第一次发送的SYN包阻塞网络,当第二次发送的SYN包通过二次连接与服务端建立连接,此时第一次发送的SYN包又成功发送。导致服务器认为客户端建立了两次连接,而实际客户端以为只建立了一次连接。
!三次握手是TCP为了在不可靠的信道上建立可靠的连接
①为了解决丢包和乱序问题,TCP协议建立了一个缓冲区,发送的报文:序列号+长度+数据内容。则回复确认为:ACK=序列号+长度(即下一包起始序列号)
二、四次挥手
①客户端向服务端发送FIN包,客户端进入等待1状态
②服务端收到后,发送ACK包,表示服务端已进入关闭等待状态。则客户端进入等待2状态(此时,服务端还可以发送数据,客户端还可以接收数据)
③服务端发送FIN包,进入最后确认状态
④客户端接收后,回复ACK包,并进入超时等待状态。客户端经过超时时间后关闭连接,服务端收到连接后立即关闭连接
! 客户端经过超时时间后才能关闭连接:
防止服务端没有收到ACK包一直处于等待状态。若服务端没收到,则服务端重发FIN包,客户端再发FIN包,并刷新超时连接时间