zoukankan      html  css  js  c++  java
  • 面试!TCP的三次握手和四次挥手的过程

    最近面试被问道TCP的三次握手和四次挥手,没准备好,回答的不流畅,趁着空闲时间,赶紧再梳理一下。

    三次握手

    文字描述

    1.由客户端发起链接请求,TCP数据包的SYN标识位等于1,代表要建立链接。

    2.服务端接收到消息后,向客户端发送TCP数据包,ACK位等于1,服务端准备好了。SNY位等于1,请求与客户端建立链接。

    3.客户端收到消息后,向服务端发送数据ACK=1,代表收到了服务端的消息,并可以建立链接了。

    为什么需要三次?

    因为client发起建立连接后,server可以收到消息。但是server不确定client能不能收到server发出的消息,所以需要第二次确定。

    等client确认可以收到消息后,才真正建立链接。

    系统中的一些防御策略可以决定一个端口的发送和接收的规则,有些端口是只能发送不能接收,所以需要二次确定再建立链接,才能保证链接的可靠性。

    流程图

    四次挥手

    文字描述

    1.由client发起断开请求,此时FIN标志位等于1,代表客户端要断开链接

    2.server接收到请求后,会立刻回复ACK=1,代表server准备断开链接

    但是这个时候,server可能还存在没有传输完的数据,所以server并不会直接发送断开标识,而是发送一个ACT的数据包来告诉client收到了断开请求。

    3.等数据传输完成后,由server向client发送FIN=1的数据包,代表server数据传输完成,可以断开了

    4.接收到server的FIN数据包后,client会发送ACK=1,表示自己收到了断开通知,链接断开。

    为什么要四次?

    因为再客户端发起断开请求后,服务端可能还没有传输完成,所以要等服务端数据传输完成后,再向客户端发起断开请求。

    流程图

  • 相关阅读:
    perl 获取铜板街页码
    $response->decoded_content 和$response->content
    基于Netty5.0高级案例之请求响应同步通信
    [Err] 1091
    [Err] 23000
    [Err] 42000
    perl 爬取 find_by_tag_name
    perl 爬取html findvalues 方法
    perl 安装DBI和DBD
    js setTimeout 参数传递使用介绍
  • 原文地址:https://www.cnblogs.com/inkyi/p/14940475.html
Copyright © 2011-2022 走看看