• TCP三次握手及TCP连接状态 TCP报文首部格式


    建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图:

    开个玩笑

    ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1

    SYN(SYNchronization同步):在连接建立用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使用SYN=1

    ACK=1因此,SYN置1表示这是一个连接请求或连接接受报文

    FIN(FINIS)即完,终结的意思,用来释放一个连接。当FIN=1时,表明此报文段发送方的数据已经发送完毕,并要求释放连接

    TCP三次握手过程:

    1. 首先由Client发出请求连接即SYN=1,声明自己的序号seq=X

    2. 然后Server进行回复确认,即SYN=1 声明自己的序号seq=y,并设置ack=x+1

    3 .最后Client再进行一次确认,设置seq=x+1 ack+y+1

    注:seq 序列号范围:2^32-1 如果超过最大值,再从0开始

    seq 序列号作用:依据这个序列号来组数据,如果发N个数据包,服务端会按序列号来重新组装数据

    使用tcpdump抓取TCP三次握手

    tcpdump 常用参数:

    -c 指定包个数

    -n ip,端口用数字方式显示

    port 指定端口

    Client:192.168.94.11

    server:192.168.94.22

    使用Client ssh Server

    查看Server端

    Flag[S]中的S表示为SYN包为1 。client主机返回ack=1 这个值为相对序号,如果想查看完整序号可以命令后面加-S

    TCP连接状态 : 

    服务器端:LISTEN:侦听来自远方的TCP端口的连接请求

    客户端:SYN-SENT:再发送连接请求后等待匹配的连接请求

    服务器端:SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认

    客户端/服务器端:ESTABLISHED:代表一个打开的连接

    客户端:FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认

    服务器端:CLOSE-WAIT:等待从本地用户发来的连接中断请求

    客户端:FIN-WAIT-2:从远程TCP等待连接中断请求

    服务器端:LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认

    客户端:TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

    服务器端:CLOSED:没有任何连接状态

    在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的ACK包

    这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超关闭时间,才能施放内存

    如果恶意者通过通过ip欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未决的连接并占用大量内存和tcp连接,从而导致正常客户端无法访问服务端,这就是SYN洪水攻击的过程

  • 相关阅读:
    用例输入单元测试(3)参数化测试方法
    线程文件[MFC]线程优先级设置,下拉列表框ComboBox,复选框CButton,列表框CListBox的使用
    设置系统SetLocalTime设置系统时间
    页面错误毕业设计之错误集锦(六)
    定义数据类型SQL server中SET ANSI_PADDING对char、varchar、nvarchar的影响
    查找关键字算法:静态查找表(Static Search Table)
    密码注册ASP.NET实现忘记密码
    卡函数or1200基于simplespi的SD卡驱动
    目的地返回POJ 2336 动态规划(DP) Ferry Loading II
    坐标序列hdu 1003 解题报告 Max Sum
  • 原文地址:https://www.cnblogs.com/bigdevilking/p/9551744.html
Copyright © 2020-2023  润新知