Linux网络编程 之TCP协议_╯ Instinct的博客-CSDN博客

      最后更新:2021-12-17 00:56:21 手机定位技术交流文章

      tcp协议

      • 1、TCP协议特点
        • 一.1 连接建立和断开
          • 三次握手
          • 四次挥手
        • 一.2. 转让TCP地位
        • 1.3、复位报文段
        • 一.4. 区块数据流和交互式数据流
        • 1.5、带外数据
        • 一.6. 流体服务的特点
        • 一.7. 加班费重新传送和答复确认
        • 1.8、滑动窗口
        • 1.9、拥塞控制

      1、TCP协议特点

      一.1 连接建立和断开

      TCP提供面向链接的、可靠的字节流服务。TCP 协议的两个用户必须首先创建连接 。然后,数据可以读写。双方必须投入必要的内核资源进行联系。处理连接状态和连接数据传输TCP 连接总是活跃的。连接使双方的数据都能读写。完成数据交换之后,为了释放系统的资源 双方必须断绝对话为了观察TCP连接的形成和关闭,使用 tcpdump 来捕捉软件包。这项命令需要行政特权。格式如下(假设将两个主机IP地址合并进行测试):

      三次握手

      客户执行连接 () 时发生了三次握手, 方法也成功返回, 表明已经建立了三次握手 。 以下是三个握手的例子 :
      在这里插入图片描述
      1. TCP服务器程序最初建造了转让控制区块TCB,并准备接受客户程序的连接请求,然后服务器进入ListEN(听觉)状态。
      2. TCP客户程序还产生一个传输控制区块(TCB),并向服务器发送连接请求。在此阶段,选择了SYN=1信息第一部分的同步符号和初始序列号后序号 = x。SYN-SENT(同步发送)是TCP客户程序的状况。TCP称,数据不能通过SYN报告(SYN=1)传送。因此,必须吃掉序列号。
      3. TCP服务器收到请求后,如果连接被接受,即发出确认信息。当 TCP 服务器进程进入 SYN-RCVD (同步接收) 时,它将确认 ACK=1, SYN=1, 确认序列号 x+1, 并为自己确定序列号后数 = y。本文件不传输数据,但使用序号。
      4. 确认ACK=1,确认序列号y+1及其自己的序列号x+1,然后将TCP客户程序返回服务器。
      TCP连接此时已建立,客户已进入建立(连接)状态。 服务器收到客户确认后,服务器也处于建立状态,双方都可以开始沟通。
      两次握手可以吗?
      正确; 但是, 为了防止将一已绝迹的连接请求发回服务器,从而产生错误。如果用两个握手来建立联系,假设有这种情况客户提出了最初的连接请求,但没有丢失。只是他们被粘在互联网上太久了TCP客户不能这样做,因为他们很晚才收到确认信息。我以为服务器错过了目前,该员额已重新发送到服务器上。此后,客户和服务器通过两次握手连接。传输数据,然后关闭连接。连接请求与目前留在后面的连接请求无效 。自网络打开以来,它已经到达服务器 。这是预言的结论。但是,由于两个握手程序,客户端和服务器将能够重新连接。这将导致不必要的错误和资源支出。
      如果握手三次,即使提供了无效电文,服务还是得到了无效电文,对确认作出答复,但客户不会再次发送确认。由于服务器没有收到确认,假定客户没有寻求连接。
      使用命令查看
      在这里插入图片描述
      当客户端向服务器传送“Hello”这个词时
      在这里插入图片描述

      四次挥手

      由于客户或服务完成了近()连接,发生了四波波,详情如下:
      在这里插入图片描述
      1. 客户程序发出连接发布信息。并且停止发送数据。释放数据报文首部,FIN=1,序号是后序号=u(等于先前交付数据的最后字节)加1。客户现在在FIN-WAIT-1(终止等待1)中。 TCP规定,据FIN说,即使他们没有数据,他们也无法这样做。也要消耗一个序号。
      第二,服务器收到一条信息 显示连接已经释放发出确认报文,ACK=1,请确认编号u+1的序列号。另外,它的序号是续v,目前,服务器处于CLOSE-WAIT(关闭等候)状态。TCP服务器与高级别应用程序进行通信。客户被放行 并引导到服务器上。这是一个半封闭期。用户无进一步信息可发送 。然而,如果服务器提供数据,客户端依然要接受。目前的状况将持续一段时间。也就是说,CLOSE-WAIT状态的长度。
      在客户收到服务器的确认请求后,它进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接发布信息(但需收到服务器提供的最后数据)。
      4. 当服务器最终传输数据时,这篇文章是全球之声在线特稿的一部分。FIN=1,确认序号为v+1,由于在半关闭状态,服务器最有可能发送更多的数据 。假设目前的序号是后序号 = w,此时,服务器处于 LAST-ACK( 最后确认) 状态 。等待客户端的确认。
      5. 客户收到服务器连接释放后,必须发出确认,ACK=1,确认序号为w+1,此外,他的序列号是u+1。此时,时间-时间(等待)是客户的状态。似乎TCP的连接还没有被放弃在通过2 *MSL(报告期最长期限)之后,当客户撤回相关TCB时,我们只是现在处于封闭状态。
      6 一旦收到客户的确认,服务器就将其状态改为封闭数据交换系统。同样,TCB的退出终止了TCP连接。从可以看出,服务器在客户之前终止TCP连接。
      使用命令查看
      在这里插入图片描述

      一.2. 转让TCP地位

      在任何特定时间,TCP连接的任何结束都处于某种状态。Nett Stat 命令可用于查看当前状态 。下图说明TCP连接状态在通信两端从创建到关闭的演变情况。假设的起点是 封闭状态这不是真正的环境状况。
      在这里插入图片描述
      上图中,时间-WAIT通常是在积极关闭结束时发生的情况。该状态出现后,它的寿命为2MSL(最高安全寿命)。才能完全关闭。MSL是TCP信息在网络中生存的最长期限。RFC 1122标准文件建议值为2分。
      时代-WAIT状态的出现有两个原因:
      TCP 连接已可靠终止 。
      确保及时发现和销毁迟交的TCP报告。
      在Linux操作系统上TCP 端口不能同时打开几次(两次或两次以上)。当 TCP 连接处于状态时 Time_WAIT,我们无法马上建立新的连接, 因为连接的被占领港口已经投入使用。如果有真正要求强制该程序使用Time_WAIT连接所持有的港口,可以通过使用 Setsockopt () 函数 SO_ REUSEAD DRAD 设置选项来做到这一点。

      1.3、复位报文段

      在某些例外情况下,TCP连接的一端将向另一端发送带有RST标志的报告副本,即报告副本,并提醒另一方关闭或重新建立连接。
      1) 当客户方软件试图连接到一个不存在的港口时,目标主机会回复回信。
      2)异常终止连接。正常情况下,数据交换完成之后,为了结束该段,一方将FIN发送给另一方。TCP提供了一种不寻常的终止连接的方法。也就是说,将报告副本发送给另一方。其中一人提供了一份报告的副本。发件人队列中准备传送的任何数据将被丢弃 。要配置发回地址, 程序可以使用套接字选项 SO_ LINGER 。以异常终止连接。
      (3) 处理半开放连接。例如,TCP在一端终止连接。由于网络故障,双方都没有收到任何服务终了报告。另一方错误地认为连接仍然是正常的。半开放连接是处于这种状态的连接。如果您在连接结尾处发送数据,您将被发送此回复的副本 。

      一.4. 区块数据流和交互式数据流

      TCP根据其传送的应用数据持续时间分为两类:交互式数据和区块数据。互动数据只使用几个字节。在使用交互式数据的应用程序中,实时极为重要。类似电话、手机和其他类似协议TCP条目允许的最大数据长度是区块数据的长度。使用区块数据的应用程序需要极佳的传输效率。比如 FTP。

      1.5、带外数据

      额外数据(带外数据,OOB)是几个传输层使用的概念。最后,没有得出结论,立即将当天结束时发生的重大事件通知对立方。因此,额外数据比常规数据更重要。应始终尽快提供。是否或缓冲区内是否有正常的数据队列可供传送。
      UDP没有实现额外数据传输,而TCP并没有真正传输额外数据。 另一方面,TCP向程序提供了一种通过应急指示器和应急指示器在头部传递紧急数据的方式。

      一.6. 流体服务的特点

      以下是TCP字节流特征:发送者进行书面作业的次数与接收者进行阅读作业的次数之间没有数量上的联系,应用程序对发送和接收数据没有边界限制。
      在这里插入图片描述
      插图贴纸到底是什么?
      上面的图像描绘了贴纸;TCP发送程序传送了一条10乘100字节的信息,这意味着接收申请可能收到1,00字节的连续数据。
      TCP的页眉没有长信息;
      我们可以调查以下方面:

      (1) 如果使用TCP,则每次提供数据时都相互连接,当双方提交单一数据时,即关闭连接,以防止重叠(因为只有一个数据结构)。
      (2) 如果发送的数据没有结构化,例如,通过文件传输,发件人只需发送,接收端只能储存,不使用粘贴袋。
      (3) 如果双方建立了连接,许多不同的数据结构必须在连接之后的一段时间内传递,到那时,接收的最终应用程序可能会获得大量粘合在一起的数据,这意味着接收的最终应用是愚蠢的,它在做什么?我不知道,因为协议不允许这种奇怪的数据。

      一般而言,这些问题有以下解决办法:

      • 您必须在引用已发送的函数( PUSH 命令) 后立即传输数据 。
      • 对于由接收方创建的标签,可以通过改进流程结构、减轻接收流程的负担、提高接收流程的优先地位等办法,防止及时接收数据。
      • 添加一个固定的信息信头,该信头持有数据长度信息,然后根据信息实体所携带的信息长度接收信息实体。 换句话说,许多人类控制的接收器都防止粘贴袋。
      • 设置 TCP_ NODELAY 选项以禁止使用 Nagle 算法 。
      • 确定SO_RCVBUF和SO_SNDBUF参数,以及根据申请要求确定的适当接收和传输缓冲区的大小。
      • 添加报文分隔标识,例如,发送信息被放在“n”结尾处。当使用 recrov () 方法接收信件时,MSG_PEEK 设定为参数标记值。Nota bene: 当国旗选项设定为 MSG_PEEK 时,repv () 有能力读取套接字缓存中的数据 。但是,这一部分的缓存 将无法清除。尽管如此,如果您使用读 () 函数直接访问盒式缓存的内容,它将清除缓存的物品。假设两段报文粘包,读取后会清除缓存内容 。因此,随后的报告中丢失了粘胶袋的部分数据。

      一.7. 加班费重新传送和答复确认

      TCP 文本信息被排入 IP 层 。然而,知识产权水平只能提供最大可行的服务。也就是说,TCP以下网络传输不稳定。因此,TCP必须采取适当的预防措施,确保两层运输之间通信的可靠性。通过长期使用反应确认和再传送,使TCP通信更加可靠。
      下图说明在无误差时数据互动的过程:发送者将数据m1传送到接收端,接收端接收数据并向发送者发送确认电文,以示已成功收到数据。 M1应一直保持到发送者收到确认。
      在这里插入图片描述
      下图说明发生错误时数据交换的流动情况:
      在这里插入图片描述

      1.8、滑动窗口

      利用TCP协议通过使用滑动窗口管理交通。一般来说,我们不断努力争取更快的数据传输。这不可能一次做一个字节然而,如果发送者提供数据的速度太快,可以想象接收器无法及时收到这将造成数据丢失。“交通管理”一词是指发件人发送速度不快。为接收者到达和接收提供空间。
      接收通知窗口是 TCP 页眉中的一个字段。在此字段中, receivupg 结尾填充 。接收端通知发送方可接收数据的缓冲区数目。因此,传输人可以根据接收端的处理能力发送数据。它不会导致接收者无法管理它。因此,发件人将有一个发件人的窗口。发送窗口的大小取决于接收端接收通知窗口的大小。当发件人端的数据从收件人端传输和接收时,窗口的位置向右移动。将之称为滑动窗口。
      发送者的幻灯片窗口图如下:
      在这里插入图片描述
      当收到36个后方的后方和发送46-51字节时,窗口幻灯片如下:
      在这里插入图片描述

      1.9、拥塞控制

      计算机网络(即带宽)、交换节点缓存和CPU等链接。都是网络的资源。在某段时间,如果对某一网络资源的需求超过资源的现有部分,对该资源的需求将更大。该网络的运行情况将进一步恶化。这种病的医学术语是腐蚀。人群控制的目的是防止将过多的数据注入网络。这将防止路由器或网络连接超载。信仰控制是一种包罗万象的程序。涉及到所有主机,所有路由器,以及所有导致网络传输性能下降的因素
      有几项减少交通拥堵的战略:

      • 慢开始
      • 拥塞避免
      • 快速重传
      • 快速恢复
        启动缓慢、交通不便、地图快速恢复:
        在这里插入图片描述

      快速重传示意图:
      在这里插入图片描述

      参考书籍:
      Linux软件设计中文版第4版
      Linux内核设计和实施版本3

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/14916.html

          热门文章

          文章分类