TCP是面向连接、保证传输的协议,而UDP是无连接的协议。

TCP传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等。在传输数据前,双方会先建立一条虚拟的通道,可以减少数据传输差错。

UDP的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视频直播等。在数据传输时,每个数据段都是一个独立的信息,包括完整的源地址和目的地,因此,数据能否被对方接收、数据到达的实践和内容的完整性有序性都无法得到保证。

1、三次握手:

•1)第一次:客户端发送SYN = 1,seq = client_isn

◦作用:客户端:无,服务端:确认自己的接收功能和客户端的发送功能

•2)第二次:服务端发送SYN = 1,seq = server_isn,ACK =client_isn +1

◦作用:客户端:确认自己发送和接收都正常,确认服务端的接收和发送正常,服务端:确认自己的接收正常,确认服务端的发送正常(这时候服务端还不能确认客户端接收是否正常)

•3)第三次:客户端发送SYN = 0, ACK = server_isn+1,seq =client_isn+1

◦作用:双方确认互相的接收和发送正常,建立连接

2、四次挥手

•1)第一次:客户端发送FIN

◦作用:告诉服务端我没有数据发送了(但是还能接收数据)

•2)第二次:服务端发送ACK

◦作用:告诉客户端收到请求了,可能服务端还有数据需要发送,所以客户端收到进入FIN_WAIT状态,等服务端数据传输完之后发送FIN

•3)第三次:服务端发送FIN

◦作用:服务端告诉客户端我发送完了,可以关闭连接了。

•4)第四次:客户端发送ACK

◦作用:客户端收到FIN之后,担心服务端不知道要关闭,所以发送一个ACK,进入TIME_WAIT,等待2MSL之后如果没有收到回复,证明服务端已经关闭了,这时候客户端也关闭连接。

注意:

•当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据

•最后需要等待2MSL是因为网络是不可靠的,如果服务端没有收到最后一次ACK,服务端会重新放FIN包然后等客户端再次发送ACK包然后关闭(所以客户端最后发送ACK之后不能立即关闭连接)