zoukankan      html  css  js  c++  java
  • TCP连接三次握手四次挥手

    一、OSI协议分层

    基于TCP/IP协议族的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。

    三次握手

     

    其中比较重要的字段有:

    (1)序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

    (2)确认号(acknowledgement number):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

    (3)标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:

        URG:紧急指针(urgent pointer)有效。

        ACK:确认序号有效。

        PSH:接收方应该尽快将这个报文交给应用层。

        RST:重置连接。

        SYN:发起一个新连接。

        FIN:释放一个连接。

     

    第一次

    第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;

    SYN:同步序列编号(Synchronize Sequence Numbers)

    第二次

    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),

    即SYN+ACK包,此时服务器进入SYN_RECV状态。

    第三次

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,

    客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

    四次挥手

     

    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
    (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
    (3) 服务器关闭客户端的连接,发送一个FIN给客户端。
    (4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

     

    参考:

    https://www.jianshu.com/p/cd801d1b3147

    https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc

  • 相关阅读:
    9-day9-生成器-列表解析-三元表达式-
    8-day8-列表解析-装饰器-迭代器
    7-day7-闭包函数-装饰器-函数2
    6-day6-函数-1
    5-day5-字符编码-函数-文件操作
    hive 跨年周如何处理
    nginx 安装部署
    logstash 读取kafka output ES
    leedcode 001 之 Two Sum 42.20% Easy
    大数据调度与数据质量的重要性
  • 原文地址:https://www.cnblogs.com/caohanren/p/13158711.html
Copyright © 2011-2022 走看看