zoukankan      html  css  js  c++  java
  • TCP的三次握手与四次挥手

    SYN攻击:
    在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接。此时服务器处于SYN-RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.
    SYN攻击就是攻击客户端,在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,
    服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
    SYN攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.

    1、 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
    这因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建立连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。
    但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送了;但未必所有的数据都全部发送给对方了,即可能还需要发送一些数据给对方,所以不会马上关闭SOCKET,当数据全部发送给对方后,再发送FIN报文给对方来表示同意现在可以关闭连接了,所以关闭连接的ACK报文和FIN报文多数情况下都是分开发送的。

    2、 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
    因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED状态,但是必须假想网络是不可靠的,无法保证客户端最后发送的ACK报文一定会被对方收到,
    就是说对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

    3、关闭TCP连接一定需要4次挥手吗?
    不一定,4次挥手关闭TCP连接是最安全的做法。但有些时候,可以不用TIME_WAIT 状态(如当MSL数值设置过大导致服务器端有太多TIME_WAIT状态的TCP连接,减少这些条目数可以更快地关闭连接,为新连接释放更多资源),这时可以通过设置SOCKET变量的SO_LINGER标志来避免SOCKET在close()之后进入TIME_WAIT状态,这时将通过发送RST强制终止TCP连接(取代正常的TCP四次握手的终止方式)。但这并不是一个很好的主意,TIME_WAIT 状态往往是有利的。

  • 相关阅读:
    随笔 Frida
    [转]某种传染病第一天只有一个患者,前五天为潜伏期,不发作也不会传染人 第6天开始发作,从发作到治愈需要5天时间,期间每天传染3个人 求第N天共有多少患者 Frida
    sql 将具有相同ID的多条记录组合成一条记录 Frida
    【转】小谈C#.NET下的爬虫(蜘蛛)技术 Frida
    ECMAScript基础1 Frida
    显示隐藏层 jquery Frida
    SQL语句备份和还原数据库
    Hello!Blog~
    23个MySQL常用查询语句
    SQL Server 2008压缩数据库日志文件
  • 原文地址:https://www.cnblogs.com/xidian2014/p/10359258.html
Copyright © 2011-2022 走看看