zoukankan      html  css  js  c++  java
  • TCP连接的3次握手和4次挥手

    一. 3次握手

    三次握手是指建立一个TCP连接时,需要客户端和服务端共同发送3个包以确认连接的建立.在socket编程中,这一过程由客户端执行connect来触发,流程如下:
    ALT

    • 第一次握手:Client将标志为SYN=1,随机产生一个seq=J,将该数据包发送给Server,Client进入SYN_SENT的状态,等待Server的确认
    • 第二次握手:Server收到由Client发送的SYN=1时,知道Client请求建立连接,Server将标志位SYN和ACK都设为1,ack=J+1,然后随机产生一个seq=K,并将这些数据发送给Client以确认连接请求,Server进入SYN_RCVD状态
    • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK=1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server可以开始传输数据

    二. 4次挥手

    四次挥手是指终止TCP连接,在断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开.在socket编程中,这一过程由客户端和服务端任一方执行close来触发,流程如下:
    ALT
    由于TCP连接时是全双工的,因此每个方向必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据,但是在这个TCP连接上仍然能够发送数据,知道这一方向也发送了FIN.
    首先进行关闭的一方将执行主动关闭,另一方则执行被动关闭.

    • 第一次挥手:Client发哦少年宫一个FIN,来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态
    • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态
    • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
    • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号收到序号+1,Server进入CLOSED状态,完成四次挥手
      上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况
      ALT
  • 相关阅读:
    Get distinct count of rows in the DataSet
    单引号双引号的html转义符
    PETS Public English Test System
    Code 39 basics (39条形码原理)
    Index was outside the bounds of the array ,LocalReport.Render
    Thread was being aborted Errors
    Reportviewer Error: ASP.NET session has expired
    ReportDataSource 值不在预期的范围内
    .NET/FCL 2.0在Serialization方面的增强
    Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
  • 原文地址:https://www.cnblogs.com/magicianyin/p/8529116.html
Copyright © 2011-2022 走看看