• 如何理解TCP的三次握手协议?


    TCP是一个面向链接的协议,任何一个面向连接的协议,我们都可以将其类比为我们最熟悉的打电话模型

    如何类比呢?我们可以从建立和销毁两个阶段分别来看这件事情。

    建立连接阶段

    首先,我们来看看TCP中经典的3次握手协议:

    
    # 主机A、B建立连接阶段3次握手过程
    
    
    
    1. 主机A向主机B发送请求报文(其中SYN位为1)。
    
    
    
    2. 主机B接受到报文后,向主机A回复ACK报文,并为此处连接分配资源。
    
    
    
    3. 主机A接受到ACK报文后,也向主机A回复ACK报文,并分配资源。一次TCP连接就这样建立了。
    
    

    如果类比成打电话,那么就是

    
    # A给B打电话,B拿起听筒后
    
    
    
    1.  A首先对着听筒“喂”了一声。
    
    
    
    2.  B听到“喂”之后,向A回复“请讲”。//此时A可以确认B能够听到他说话
    
    
    
    3.  A听到B的“请讲”之后,回复“你好”。 //此时B也确认了A能够听到他说话
    
    

    至此,TCP是3次握手,而不是2次或是4次握手的原因也就一目了然了:A和B发出的第一个报文都是为了获得对方的回答,以便确 大专栏  如何理解TCP的三次握手协议?认对方能接受到自己的消息。

    销毁连接阶段

    销毁连接阶段,要经历4次握手:

    
    1.  Client端发起FIN中断连接请求。
    
    
    
    2.  Server端接受到该请求,Server端发送ACK给Client端,Client端进入FIN_WAIT状态。此时,Server端可以继续发送数据到Client端。
    
    
    
    3.  Server端数据发送完毕,发起FIN中断连接请求。
    
    
    
    4.  Client端接受到中断请求,发送ACK给Server端,Server端若收到该请求,断开连接。Client端等待30s后,若没收到Server端的消息,也断开连接。
    
    

    上面的流程,我们同样可以用打电话做类比:

    
    # A和B正在打电话
    
    
    
    1.  A对B说:“我的话说完了,准备挂了啊。”
    
    
    
    2.  B对A说:“等等,blablabla。”
    
    
    
    3.  B对A说:“我也说完了,挂吧。”
    
    
    
    4.  A对B说:“好的。”, 然后挂断了电话。B听到电话传来嘟嘟声之后也挂断了电话。
    
    

    由于TCP和打电话一样都是全双工协议(意味着连接的双方都可以向对方发送消息),因此,销毁连接时,任意一方都可以发起销毁连接的请求(即谁都可以挂电话),但在断开连接之前,需要保证对方的消息已经发送完毕。这也是关闭一条连接需要4次握手的原因。

  • 相关阅读:
    POJ2983Is the Information Reliable
    POJ2706Connect
    POJ1716Integer Intervals
    js Number 转为 百分比
    c# Unicode编码
    json datatable
    分割js 数组
    IQueryable定义一个扩展方法。分页
    sql 计算岁数
    sql 获取一个周的周一和周日
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12262637.html
Copyright © 2020-2023  润新知