1、三次握手建立连接过程:
第一次握手:
客户端发送syn包(seq=x)到服务器,并进入syn_sent状态,等待服务器确认;
第二次握手:
服务器收到syn包,必须确认客户的syn(ack=x+1),同时自己发送一个syn(seq=y),即syn+ack包,此时服务器进入syn_rcvd状态;
第三次握手:
客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=y+1),此包发送完毕,客户端和服务端进入establish状态,完成三次握手。
2、完成三次握手之后,就可以进行传输数据过程:
tcp数据传输的特性:
1)超时重传
超时重传机制用来保证tcp传输的可靠性。每次发送数据包时,发送的数据包都有seq号,接收端收到数据后,会回复ack进行确认,表示某一seq包已经收到。发送端在发送了某个seq包之后,等待一段时间,如果没有收到对应ack的回复,就会认为报文丢失,会重传这个数据包。
2)快速重传
接收数据的一方发现有数据包丢掉了,就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续收到标号相同的ack包,则会触发客户端的快速重传。
比较超时重传和快速重传,可以发现超时重传是发送端在傻等超时,然后触发重传;而快速重传则是接收端主动告诉发送端数据没收到,然后触发发送端重传。
3)流量控制
主要是tcp滑动窗口流量控制。tcp头里有一个字段叫window,又叫advertised-window,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据接收端的处理能力来发送数据,而不会导致接收端处理不过来。
4)拥塞控制
比较流量控制和拥塞控制,流量控制是实现对发送流量的控制,拥塞控制则是基于整个网络来考虑的。拥塞控制算法主要包括:慢启动、拥塞避免、快速重传和快速恢复
为什么TCP客户端最后还要发送一次确认?