• TCP常见面试题 


    常见面试题  

    1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?    

      这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在 一个报文里来发送。

      但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以 未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报 文和FIN报文多数情况下都是分开发送的.

    2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

      这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

    3、大量TIME_WAIT产生的原因及解决办法

      原因:对于基于TCP的HTTP协议,关闭TCP连接的是Server端,这样,Server端回进入TIME_WAIT状态,可想而知,对于访问量大的Web Server,会存在大量的TIME_WAIT状态。

      解决办法:

        (1)开启socket重用,允许TIME_WAIT的socket重新用于TCP连接

        (2)开启快速回收

    4、保活机制

      

    5、TCP在listen时的参数backlog的意义

      linux内核中会维护两个队列:
        (1)未完成队列:接收到一个SYN建立连接请求,处于SYN_RCVD状态
        (2)已完成队列:已完成TCP三次握手过程,处于ESTABLISHED状态
        当有一个SYN到来请求建立连接时,就在未完成队列中新建一项。当三次握手过程完成后,就将套接口从未完成队列移动到已完成队列。
        backlog曾被定义为两个队列的总和的最大值,也曾将backlog的1.5倍作为未完成队列的最大长度
    一般将backlog指定为5

    6、accept发生在三次握手的哪一步

      accept会监听已完成队列是否非空,当队列为空时,accept就会阻塞。当队列非空时,就从已完成队列中取出一项并返回。
      而已完成队列中的都是三次握手过程已经完成的,因此accept发生在三次握手之后。

     7、三次握手过程中有哪些不安全性

      (1)SYN洪泛攻击

        服务器处于SYN_Wait的状态:

        

       伪装的IP向服务器发送一个SYN请求建立连接,然后服务器向该IP回复SYN和ACK,但是找不到该IP对应的主机,当超时时服务器收不到ACK会重复发送。当大量的攻击者请求建立连接时,服务器就会存在大量未完成三次握手的连接,服务器主机backlog被耗尽而不能响应其它连接。即SYN泛洪攻击 (属于DOS的一种,发送大量的半连接请求,耗费CPU和内存资源,引起网络堵塞甚至系统瘫痪)
      当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击

        

      (2)防范措施

        1、降低SYN timeout时间,使得主机尽快释放半连接的占用
        2、采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文
        3、在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由

  • 相关阅读:
    ThreadLocal应用场景以及源码分析
    ThreadLocal使用,应用场景,源码实现,内存泄漏
    ThreadLocal
    JBOSS默认连接池配置
    项目经验——jboss 配置数据库连接池
    InitialContext与lookup
    从零开发分布式数据库中间件 二、构建MyBatis的读写分离数据库中间件
    从零开发分布式数据库中间件 一、读写分离的数据库中间件
    appium+python自动化42-微信公众号
    appium+python自动化41-切换webview时候报chromedriver版本问题
  • 原文地址:https://www.cnblogs.com/Zzzzn/p/12190985.html
Copyright © 2020-2023  润新知