您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    一文彻底搞懂 TCP三次握手、四次挥手进程及原理(2)
    时间:2020-03-08 08:00 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    为什么要4次挥手?

    确保数据可以残缺传输。

    当被动方收到自动方的FIN报文通知时,它仅仅表示自动方没有数据再发送给被动方了。

    但未必被动方一切的数据都残缺的发送给了自动方,所以被动方不会马上封锁SOCKET,它能够还需求发送一些数据给自动方后,

    再发送FIN报文给自动方,通知自动方赞同封锁衔接,所以这里的ACK报文和FIN报文少数状况下都是分开发送的。

    一、TCP报文格式

    TCP报文格式图:

    上图中有几个字段需求重点引见下:

    (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此停止标记。

    (2)确认序号:Ack序号,占32位,只要ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

    (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,详细含义如下:

    (A)URG:紧急指针(urgent pointer)有效。

    (B)ACK:确认序号有效。

    (C)PSH:接纳方应该尽快将这个报文交给运用层。

    (D)RST:重置衔接。

    (E)SYN:发起一个新衔接。

    (F)FIN:释放一个衔接。

    需求留意的是:

    (A)不要将确认序号Ack与标志位中的ACK搞混了。

    (B)确认方Ack=发起方Req+1,两端配对。

    二、三次握手

    TCP(Transmission Control Protocol) 传输控制协议

    TCP是主机对主机层的传输控制协议,提供牢靠的衔接效劳,采用三次握手确认树立一个衔接

    位码即tcp标志位,有6种标示:

    SYN(synchronous树立联机)

    ACK(acknowledgement 确认)

    PSH(push传送)

    FIN(finish完毕)

    RST(reset重置)

    URG(urgent紧急)

    Sequence number(顺序号码)

    Acknowledge number(确认号码)

    establish  树立,创立

    所谓三次握手(Three-Way Handshake)即树立TCP衔接,是指树立一个TCP衔接时,需求客户端和效劳端总共发送3个包以确认衔接的树立。在socket编程中,这一进程由客户端执行connect来触发,整个流程如下图所示:

    (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT形状,等候Server确认。

    (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client央求树立衔接,Server将标志位SYN和ACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认衔接央求,Server进入SYN_RCVD形状。

    (3)第三次握手:Client收到确认后,反省ack能否为J+1,ACK能否为1,假设正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server反省ack能否为K+1,ACK能否为1,假设正确则衔接树立成功,Client和Server进入ESTABLISHED形状,完成三次握手,随后Client与Server之间可以末尾传输数据了。

    SYN攻击:

    在三次握手进程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP衔接称为半衔接(half-open connect),此时Server处于SYN_RCVD形状,当收到ACK后,Server转入ESTABLISHED形状。

    SYN攻击就是Client在短时间内伪造少量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等候Client确实认,由于源地址是不存在的,因此,Server需求不断重发直至超时,这些伪造的SYN包将长时间占用未衔接队列,招致正常的SYN央求由于队列满而被丢弃,从而惹起网络梗塞甚至系统瘫痪。

    SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式十分复杂,即当Server上有少量半衔接形状且源IP地址是随机的,则可以判定遭到SYN攻击了,运用如下命令可以让之现行:

    #netstat -nap | grep SYN_RECV  

    三、四次挥手

    (责任编辑:admin)