TCP/IP三次握手四次挥手和连续ARQ协议

TCP:
TCP三次 握手:
首先客户端处于Closed状态,服务器端处于Listen状态,客户端首先回向服务器端发送SYN报文,之后客户端进入SYN_SENT状态,服务器端收到报文后回复一个SYN+ACK的报文, 之后服务器端进入SYN_RECEVED状态,这是一个三次握手中的一个中间状态,称为半连接状态,很短暂,基本上用netstat很难看到这种状态,如果发生了SYN flood(洪泛攻击), 这种状态倒是可以看见很多,因为SYN flood就是利用三次握手的半连接状态来浪费服务器资源以达到让服务器崩溃的结果,因为在半连接状态中,如果没有超过SYN timeout,就会一直 发送最后一个ACK报文(因为服务器以为自己发送的SYN+ACK的报文丢失),这样就会大量浪费服务器资源,让服务器不能正常处理业务,从而丧失服务功能,当然也可以通过一些方法来预防,例如将SYN timeout的时间缩短,还有就是SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了这个IP的攻击,丢弃来自这个IP的后续报文即可, 所以要注意服务器的安全,再接着说最后一次握手,客户端接收到报文后回复一个ACK,表示已经成功接收,这时客户端和服务器端进入ESTABLISHED状态,之后就可以发送数据。
TCP四次挥手:
因为TCP的连接是一个全双工,所以每个方向必须进行单独的关闭,一般就是发送一个FIN来终止这个方向连接,先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方执行被动关闭。
当客户端向服务器端传送完数据后,客户端会执行主动关闭,也就是发送FIN给服务器端,客户端进入FIN_WAIT_1状态,服务器端收到FIN报文后回复ACK确认报文,之后服务器进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态也称为半关闭状态,这个状态一般停留时间比较长,可以使用netstat查看到,等到服务器向客户端传输完数据,服务器端会向客户端发送FIN报文,之后服务器端进入LAST_ACK状态,客户端回应确认报文ACK,之后进入TIME_WAIT状态,等待2MSL后关闭,这是因为TCP是可靠传输,要保证最后一个ACK数据包可以到达服务器,如果最后一个ACK丢失,则服务器端会再次发送FIN报文, 这时客户端会超时重传这个报文。

连续ARQ协议:
指发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认,这样信道的利用率就提高了。而发送方每收到一个确认,就将窗口向前移动。
(接受方一般都采用累计确认的方式,也就是说,接收方不必对收到的分组逐个发送确认,而是可以在收到几个分组后,对按序到达的最后一个分组发送确认);优缺点:容易实现,即使确认丢失也不必重传。
(例如要确认5,但5丢失了,但确认7到达了,就表示7以前的数据全都到达了)但缺点是不能向发送方反映出接收方已经正确收到的所有分组信息。



猜你喜欢

转载自blog.csdn.net/qq_34999633/article/details/80913670