zoukankan      html  css  js  c++  java
  • TCP的握手

    TCP的握手主要有两个:建立连接时的三次握手、释放连接时的四次握手

    首先理解下TCP协议中用到的几个关键字:

    tcp关键字

    最常用的是SYN(发起连接时的同步序列号)、ACK(确认包的接收)、FIN(结束连接)、RST(重置连接、通知双方马上关闭连接)

    一、建立TCP连接的三次握手:

    示意图:

    tcp连接的建立

    1. 首先由某一方主机主动发起连接(C/S架构中通常时Client发起),发送SYN命令同时附带值为x的序列号;
    2. 另一端收到这个连接请求之后,会回复一个SYN命令同时附带值为x+1的ACK(表明x+1之前不包括x+1的所有值都收到了,下一次再发应从x+1开始发),同时附带自己的一个值为y的序列号;
    3. 然后这边再收到之后,回复一个ACK=y+1的表明收到了对方的SEQ=y,同时附到自己的序列号SEQ=x+1。当这个包发出去之后,其会同步开启本方的连接
    4. 另一端收到这个包之后,不再回复确认包,直接开启本方的连接,由此,双方都各自开启了连接,一个TCP连接由此形成。下面就可以全双工地发数据了。

    二、释放TCP连接的四次握手:

    示意图:

    tcp连接的释放

    1. 首先,由host1主动发起结束连接的请求,发送FIN包以及SEQ=x的序列号,注意,这之后host1不会再发送data,单仍会接收data
    2. host2接收到来自host1的请求之后,回复一个ACK包,但并不会发送SEQ,要等到下一次发包,这是因为host2本机可能仍有数据没发完给host1,所以需要一些时间来进行这些殿后的处理
    3. host2把殿后的工作处理完了,发送一个FIN包附带SEQ=y,告诉host1我已经准备好了可以释放连接了,这之后host2页不再发送数据
    4. host1接收到来自host2的FIN包之后,回复一个Ack=y+1的ACK包,然后再等待一个timeout wait时间之后才正式关闭连接(这个timeout是用来防止来自host2的包在网络中延迟稍晚才来到)
    5. host2接收到这个ACK包之后也正式关闭TCP连接,至此,TCP连接完全关闭(释放)
  • 相关阅读:
    第五周学习进度报告
    第四周学习进度报告
    第三周大数据学习进度
    十六周总结
    程序员修炼之道-从小工到专家阅读笔记03
    第二阶段冲刺10
    利用正则表达式,分割地址至省市县,更新MySQL数据库数据
    阅读笔记--《大型网站技术架构》—01大型网站概述
    第三周周总结——kettle的简单使用以及MYSQL数据库去重
    热词分析中运用可用性战术
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586378.html
Copyright © 2011-2022 走看看