TCP握手、挥手
TCP的握手和挥手过程以及为什么三次握手和四次挥手参考资料,讲得很详细:
https://blog.csdn.net/qzcsu/article/details/72861891
三次握手:
Client 发送SYN,进入SYN_SENT状态
Server接收到SYN,返回ACK,进入SYN_RECV状态
Client接收到ACK进入到ESTABLISHED状态,返回ACK给Server,也进入ESTABLISHED状态
三次握手才建立连接主要是防止浪费Server的资源,如果client有超时重传的SYN让Server收到了,可能会建立无用连接。
四次挥手:
Client发送FIN,进入FIN_WAIT1状态
Server收到FIN,返回ACK,进入CLOSE_WAIT状态,此时还可以给Client发送数据
Client接收到ACK,进入FIN_WAIT2状态;当Server数据发送完毕,发送FIN,进入LAST_ACK状态
Client接受到Server的FIN,进入TIME_WAIT状态,并返回ACK给Server;等待2msl后进入CLOSED状态
Server接收到ACK,进入CLOSED状态
等待2msl是为了让保证客户端发的最后的ACK到达服务端,因为如果该ACK丢失,服务端会认为Client没收到他的FIN,会重传FIN;Client可以在这段时间内补发ACK。
Server端会保持一个计时器,每次收到Client的消息就重置,防止Client出现问题导致资源浪费。
TCP数据传输
数据传输参考 陈爱军老师的《TCP性能分析技术及其应用20121231》,做简单理解总结
1、要知道TCP传输只是发送端的缓冲区到接收端缓冲区的过程,发送端和接收端操作系统负责将数据拷贝到缓冲区或者将数据从缓冲区取出。
2、BDP(Bandwidth Delay Product)带宽时延乘积