握手:
第一次握手:客户端发送SYN包给服务器,并进入SYN_SENT状态,等待服务器返回确认包。
第二次握手:服务器接收到SYN包,确认客户端的SYN,发送ACK包,同时发送一个SYN包,并进入SYN_RCVD状态。
第三次握手:客户端接收到服务器的SYN包,以及ACK包,进入establish状态,同时向服务器发送ACK包。此时三次握手包发送完毕,服务器也进入establish状态。。
挥手:
第一次挥手,主动关闭方发送一个FIN包给被动方,进入FIN_WAIT_1状态;
第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包;并进入CLOKSE_WAIT状态。主动方接受到ACK包后,进入FIN_WAIT_2状态。如果有数据没有发送完毕,则继续发送,直到发送完毕为止;
第三次挥手:被动方发送一个FIN包,进入LAST_ACK状态.
第四次挥手:主动关闭方收到FIN包,回复一个ACK包。被动关闭方收到主动关闭方的ACK后关闭连接。
TCP与UDP区别
TCP:
1、提供面向连接的,可靠的数据传输服
2、传输过程中,数据无误,数据无丢失、数据无失序、数据无重复;
3、数据传输效率低,耗费的资源多;
4、数据收发不同步,会存在沾包算法,为了提高效率,TCP会将多个较小,并且发送间隔短的数据包,沾成一个包发送,该现象称为沾包现象;
5、TCP使用场景:对传输质量比较高的以及传输大量数据的通信,在需要可靠通信的传输场合,一般使用TCP协议,例如:账号登录,大型文件下载的时候;
UDP:
1、面向无连接的,不保证数据可靠的,尽最大努力传输的协议;
2、数据传输过程中,可能会出现数据丢失、重复、失序现象;
3、数据传输效率高,实时性高;
4、限制每次传输数据的大小,多出部分直接忽略删除;
5、收发是同步的,不会沾包;
6、适用场景:发送小尺寸的,在接收到数据给出应答比较困难的情况。