LwIP系列(5):TCP 3次握手+4次挥手+状态机转换

这篇具有很好参考价值的文章主要介绍了LwIP系列(5):TCP 3次握手+4次挥手+状态机转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

TCP的3次握手、4次挥手以及TCP状态机,是TCP的核心概念,我们在分析LwIp中TCP相关代码流程,也需要熟悉这些流程,本文就详细介绍这些概念。

TCP 3次握手、应用数据交互、4次挥手完整流程

LwIP系列(5):TCP 3次握手+4次挥手+状态机转换,tcp/ip,网络,网络协议

TCP 为什么是3次握手,而不是2次或4次

网上针对为什么是3次握手,会有很多的分析,尤其有些文章会特别强调client和server的seq序列号同步,众说纷纭吧,我个人倾向于:

  1. 防止旧的重复连接,引起连接混乱。
  2. client与server之间同步初始化序列号。
  3. 3次握手能够在通信信道不保证可靠情况下,从软件流程上,保证TCP通信可靠的最小代价。

防止旧的重复连接

在TCP协议的标准文档RFC793中指出了3次握手的设计原因,原文引用如下:

The principle reason for the three-way handshake is to prevent old duplicate connection initiations from causing confusion.

翻译后为:

3次握手的握手设计的主要原因是为了防止旧的重复连接,引发连接混乱。

我们假设只有2次握手,在正常的网络环境下,是没有问题的,但是在网络比较差的环境下,client可能会因为没有收到ack,而重新发送SYN,而server端可能会收到多次的SYN请求,对于Server端,要么拒绝,要么接收,这不仅会浪费server的资源(为client分配资源),而且可能会导致连接的混乱,因为某测的SYN请求可能是过时的,所以通过3次握手,通过seq就可以判断出哪些连接是旧的,哪些是对的。

client与server同步初始化序列号

这个在上图中就可以看到,client与server 3次握手后,对于client端,就能够确定一个随机序列号A,对于server端,就能确定一个随机序列号B,后续client与server之间的通信,可靠性通信,都是通过这两个序列号来实现的,具体如何实现,我们后面的文章再详细分析。

综上:

3次握手,是为了在通信信道不能保证稳定的情况下,从软件层面,保证TCP通信可靠的一种最小代价,这里提到的最小代价,主要是3次是最小的尝试,我们也可以4次握手、5次握手,甚至更多,只不过那样会浪费效率和资源。

TCP状态机转换图

TCP的维护有状态机,没错,是固定的状态机,不管是Linux和LwIp中,状态机是一致的,这就更能说明,TCP/IP就是一种标准的软件协议。TCP状态机转换如下:

LwIP系列(5):TCP 3次握手+4次挥手+状态机转换,tcp/ip,网络,网络协议文章来源地址https://www.toymoban.com/news/detail-545078.html

到了这里,关于LwIP系列(5):TCP 3次握手+4次挥手+状态机转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP通讯(三次握手、四次挥手;滑动窗口;TCP状态转换;端口复用;TCP心跳检测机制)

     前言:建议看着图片,根据文字描述走一遍TCP通讯过程,加深理解。 目录 TCP通信时序: 1)建立连接(三次握手)的过程: 2)数据传输的过程: 3)关闭连接(四次挥手)的过程: 滑动窗口 (TCP流量控制): TCP状态转换: 半关闭: 2MSL: 程序设计中的问题: 端口复用:

    2024年02月03日
    浏览(89)
  • TCP/IP 三次握手&四次挥手详解,以及异常状态分析

    1.TCP/IP 三次握手 TCP/IP 三次握手过程 主要依靠IP协议报文中的 SYN ACK 两个标识位,SYN 表示是请求连接的报文,ACK 表示确认报文的请求 过程: 客户端处于 CLOSE 状态,服务器处于 LISTEN 状态,客户端向服务器发送请求连接报文,SYN=1 seq=x,发送成功后,客户端状态修改为 SYN_SEND

    2024年02月22日
    浏览(38)
  • 【Linux网络】TCP/IP三次握手、四次挥手流程

    目录 一、三次握手,建立连接 二、四次挥手,断开连接 三、主要字段  1、标志位(Flags)  2、序号(sequence number)  3、确认号(acknowledgement number) 四、三次握手的报文变化 五、四次挥手的报文变化 六、面试题 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手,

    2024年02月08日
    浏览(50)
  • OSI(七层)网络模型,三次握手四次挥手梳理,Socket.TCP/IP.HTTP三者说明

    目录 一   OSI网络模型 二   三次握手与四次挥手的简单理解 ● 常见问题梳理 三   Socket,TCP/IP,HTTP ① TCP/IP连接 ② HTTP连接 ③ Socket说明 ● 套接字(socket)概念 ● 建立socket连接 四   Socket连接与TCP/IP连接 五   Socket连接与HTTP连接 OSI网络模型也称七层网络模型 7 应用层

    2023年04月09日
    浏览(42)
  • TCP的四次挥手与TCP状态转换

    TCP客户端与服务器断开连接的时候,在程序中使用close()函数,会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的,所以断开的时候也是双向的。 三次挥手可以吗?可以是可以,和状态有关。 四次挥手是用于客户端和服务器断开连接的时候,

    2024年02月13日
    浏览(39)
  • 详解TCP/IP的三次握手和四次挥手

    本文章讲解TCP/IP协议的三次握手和四次挥手的流程。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 TCP协议位于传输层,作用是提供可靠的字节流服务

    2024年02月09日
    浏览(50)
  • 网络连接管理除了TCP三次握手,还有TCP四次挥手

    网络通信 建立连接 ,TCP会进行三次握手,三次握手主要是两个主机之间建立连接,和其他没有什么关系,那么两个主机之间是如何进行三次握手的呢?他们又会使用什么操作来建立连接呢? 这里我们先了解一下TCP的报文结构: 三次握手主要是理解成客户端与服务器经过三次

    2024年02月07日
    浏览(63)
  • 【网络原理】TCP连接管理机制(三次握手四次挥手)

    🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 在使用TCP协议进行网络交互时,TCP会进行三次握手即建立连接,TCP四次挥手即断开连接。三次握手与四次挥手后就完成了网络交互,这样的操作也叫TCP的连接

    2024年02月09日
    浏览(48)
  • 【Linux 网络】 传输层协议之TCP协议 && TCP的三次握手和四次挥手

    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议 基于TCP应用层协议 HTTP HTTPS SSH Telnet FTP SMTP 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去 32位序号/确认序号:TCP的确认应答机制要使用到的字段,保证TCP的可靠

    2024年02月14日
    浏览(57)
  • 【计算机网络】TCP 的三次握手和四次挥手

    TCP 是面向连接的,面向连接就是数据通讯的时候需要进行三次握手,断开通讯的时候需要进行四次挥手。 1.seq(sequence number),序列号,随机生成的 2.ack(acknowledgement number),确认号,ack=seq+1 3.ACK(acknowledgement),确定序列号有效 4.SYN(synchronous),发起新连接 5.FIN(FINISH),完成 TCP三次

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包