• TCP的建立和关闭


    一.TCP头信息

    简单的至少应该知道,源端口,目的端口,序号,确认号,标志位,校验和

    二.TCP的建立

    1.客户端将SYN标志位置1,同时生成随机的序号,确认号是0。

    2.服务器接收到SYN,知道有人想和他建立连接,做出回应,将SYN和ACK标志位置1,确认号为刚刚接受客户端的序号加1,代表已经收到客户端的建立连接请求。然后自己再随即生成一个序号,用来确认从服务器到客户端的链路正常。

    3.客户端接收到服务器发送的确认号,检查是不是自己刚才发送的序号加一,代表从客户端到服务器的链路正确。客户端发送确认号为服务器端发送的序号加一,序号为客户端之前发送序号加一。

    辅助记忆:

    1.两次随机

    只有序号上才会随机,确认号不能随机,序号的随机是在第一次握手和第二次握手上。因为TCP是双工通信,所以需要确认两边的链路都正确,所以服务器和客户端都要随机生成一次序号,等待对方来确认。

    2.除了第一次握手确认号是0,确认号永远是序号加一

    3.标志位 SYN->SYN,ACK->ACK

    只要有确认号的存在,ACK标志位就得为1,所以除了第一次握手,后两次ACK标志位都是1。建立连接请求发起SYN标志位为1,因为客户端,服务器端各发起一次建立连接请求,所以第一第二次的SYN是1.

    状态的转换:

    1.第一次握手完,服务器端进入SYN_RCVD状态,客户端进入SYN_SENT状态

    2.第二次握手完,客户端进入ESTABLISHED状态

    3.第三次握手完,服务器进入ESTABLISHED状态

    扩展:SYN攻击

    Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。服务器端大量SYN_SENT状态的连接

    三.TCP关闭

    1.客户端发起关闭请求,发送一个信息:FIN(M)

    2.服务端接受到信息后,首先返回ACK(M+1),表明自己已经收到消息。

    3.服务端在准备好关闭之前,最后发送给客户端一个 FIN(N)消息,询问客户端是否准备好关闭了

    4.客户端接受到服务端发送的消息后,返回一个确认信息: ACK(N+1)

    状态装换:

    客户端主动关闭发送FIN以后进入FIN_WAIT_1状态,接受服务器端的确认ACK进入FIN_WAIT_2状态。

    服务器端收到客户端发送的FIN,并发送ACK进入CLOSE_WAIT(被动关闭)状态。

    服务器端向客户端发送FIN,进入LAST_ACK状态。

    客户端收到服务器端发送的FIN,并发送ACK进入TIME_WAIT(主动关闭)状态。客户端在2MSL(一次IP传输的最大时间)以后进入CLOSED状态(这是因为有可能发送的ACK由于网络问题没有送到服务器端,服务器端又一次发送FIN,所以客户端不是发送完ACK立刻进入CLOSED状态)。

    服务器收到客户端发送的ACK,进入CLOSED状态。

    对于HTTP服务器,主动关闭的是服务器端,所以服务器端通常会有大量的TIME_WAIT,如果有CLOSE_WAIT,那说明是客户端主动关闭的连接,如果存在大量的 CLOSE_WAIT,则说明客户端并发量大,且服务器未能正常感知客户端的退出,也并未及时 close 这些套接字。

    从客户端看状态转换

    FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

    从服务器端看状态转换

    CLOSE_WAIT->LAST_ACK->CLOSED 

  • 相关阅读:
    密码控件安全技术浅析及攻击实例
    一个QQ木马的逆向分析浅谈(附带源码)
    菜鸟开始学习SSDT HOOK((附带源码)
    leetcode229
    leetcode1401
    leetcode1400
    leetcode1399
    leetcode228
    leetcode223
    leetcode222
  • 原文地址:https://www.cnblogs.com/23lalala/p/3579199.html
Copyright © 2020-2023  润新知