三次握手
解释:客户端A和服务器B刚开始处于CLOSED状态,两者之间没有任何联系,A主动打开,B被动打开由
CLOSED进入LISTEN状态,这是A发送一个SYN=1的标志位的数据包,并且数据的序列为seq=x,
A也由CLOSED进入SYN-SENT状态,B接收到A的请求,也主动 发送SYN=1的建立连接的请求的
数据,在B这里数据包的排序为seq=y并且发送一个确认号ack=x+1用来表示已经收到A发送的数据,
ACK用来确认ack是有效的,B也有LISTEN转入SYN-RCVD状态,A收到B的数据,发送一个序列号
为x+1,确认号为y+1的数据,同样ACK用来表示ack的有效性,此时A由SYN-SENT状态转入
ESTAB-LISTEND状态,B收到A的回复,状态也转入ESTAB-LISTEND状态。 到此三次握手建立完成。
知识点:
URG :表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer )只有当
URG=1 时才有效。
ACK :表示是否前面的确认号字段是否有效。ACK=1 ,表示有效。只有当ACK=1时 时,前面的确认号
字段才有效。TCP 规定,连接建立后, ACK 必须为1, 带ACK 标志的TCP 报文段称为确认报文段
PSH :提示接收端应用程序应该立即从TCP 接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1 ,
则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,
就会一直停留在TCP 接收缓冲区中。
RST :如果收到一个RST=1 的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,
然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST 标志的TCP
报文段称为复位报文段
SYN :在建立连接时使用,用来同步序号。当SYN=1 ,ACK=0 时,表示这是一个请求建立连接的报文段;
当SYN=1 ,ACK=1 时,表示对方同意 建立连接。SYN=1,说明这是一个请求建立连接或同意建立
连接的报文。只有在前两次握手中SYN才 才置为1 ,带SYN 标志的TCP 报文段 称为同步报文段。
FIN :表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1 ,即告诉对方:“我的数据
已经发送完毕,你可以释放连接了”,带FIN 标志的TCP报 报文段称为结束报文段。
有限状态机:
CLOSED 没有任何连接状态
LISTEN 侦听状态,等待来自远方TCP 端口的连接请求
SYN-SENT 在发送连接请求后,等待对方确认
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
ESTABLISHED:建立连接
涉及攻击:黑客制造出大量主机和服务器建立连接,在建立三次握手的时候,不给服务器发送第三次确认,
这样就会增大服务器的缓存压力,导致服务器无法对外提供服务。
四次挥手
解释:刚开始客户端A和服务器B都处于ESTAB-LISHED状态,是可以进行数据传输的,这是A主动关闭,
并发送一个FIN=1,seq=u的数据,A随机进入FIN-WAIT-1状态,B收到数据后,发送一个seq=v,
ack=u+1(表示接收到A发送的数据),ACK=1表示ack的有效性,B随机进入CLOSE-WAIT状态,
A也进入FIN-WAIT-2状态,B此时再发送一个FIN=1,ACK=1,seq=w,ack=u+1的数据,随机进入
LAST-ACK状态,A收到后,发送一个seq=u+1,ack=w+1,ACK=1的数据,B收到后进入CLOSE
状态,A进入TIME-WAIT状态,2倍的MSL值后进入CLOSED状态。
知识点:
有限状态机
FIN-WAIT-1 主动关闭, 主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2 主动关闭, 主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT 被动关闭, 收到对方发来的关闭连接请求,并已确认。
LAST-ACK 被动关闭, 等待最后一个关闭传输连接确认,并等待所。
CLOSING:双方同时尝试关闭传输连接,等待对方确认。
注意:
当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1 状态。
若此时客户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2 状态。
当客户端处于FIN_WAIT_2 状态时,服务器处于CLOSE_WAIT 状态,这一对状态是可能发生
半关闭的状态。此时如果服务器也关闭连接(发送结束报文段)则客户端将给予确认并进入
TIME_WAIT 状态。