TCP通信过程详解以及tcp长连接和短连接

2023-11-03

1. TCP连接

当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的

经典的三次握手示意图:

图片

经典的四次挥手图:

图片

tcp的十种状态图:

图片

注意:

当一端收到一个FIN,内核让read返回0来通知应用层另一端已经终止了向本端的数据传送;发送FIN通常是应用层对socket进行关闭的结果。

tcp的2MSL问题

图片

2. TCP短连接

我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server 发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起 close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在 client/server间传递一次读写操作

短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段

3.TCP长连接

接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资 源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务 器端检测到这种半开放的连接。

如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:

客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。从上面可以看出,TCP保活功能主要为探测长连接的存活状况,不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。

在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问 题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的 客户端连累后端服务。

长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。

什么是“长连接”和“短连接”?

解释1

所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差;

所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接

解释2

长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据。

而短连接就是只有在有数据传输的时候才进行连接,客户-服务器通信/传输数据完毕就关闭连接。

解释3

长连接和短连接这个概念好像只有移动的CMPP协议中提到了,其他的地方没有看到过。通信方式 各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对 CMPP消息的发送。现阶段,要求ISMG之间必须采用长连接的通信方式,建议SP与ISMG之间采用长连接的通信方式。

解释4

短连接:比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。长连接:有些服务需要长时间连接到服务器,比如CMPP,一般需要自己做在线维持。

HTTP协议之长、短连接

一、长连接与短连接:

长连接:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于P2P通信。短连接:Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此方式常用于一点对多点通讯。C/S通信。二、长连接与短连接的操作过程:

短连接的操作步骤是:建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接 长连接的操作步骤是:建立连接——数据传输…(保持连接)…数据传输——关闭连接 

三、长连接与短连接的使用时机:

长连接:长连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。每个TCP连接的建立都需要三次握手,每个TCP连接的断开要四次握手。如果每次操作都要建立连接然后再操作的话处理速度会降低,所以每次操作后,下次操作时直接发送数据就可以了,不用再建立TCP连接。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,频繁的socket创建也是对资源的浪费。

短连接:web网站的http服务一般都用短连接。因为长连接对于服务器来说要耗费一定的资源。像web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。试想如果都用长连接,而且同时用成千上万的用户,每个用户都占有一个连接的话,可想而知服务器的压力有多大。所以并发量大,但是每个用户又不需频繁操作的情况下需要短连接。总之:长连接和短连接的选择要根据需求而定。

四、发送接收方式:

1、异步:报文发送和接收是分开的,相互独立,互不影响的。这种方式又分两种情况:异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接送。异步单工:接送和发送使用两个不同的程序来完成。2、同步:报文发送和接收是同步进行,即报文发送后等待接送返回报文。同步方式一般需要考虑超时问题,试想我们发送报文以后也不能无限等待啊,所以我们要设定一个等待 时候。超过等待时间发送方不再等待读返回报文。直接通知超时返回。

五、报文格式:

通信报文格式多样性更多,相应地就必须设计对应的读写报文的接收和发送报文函数。阻塞与非阻塞方式

1、非阻塞方式:读函数不停的进行读动作,如果没有报文接收到,等待一段时间后超时返回,这种情况一般需要指定超时时间。

2、阻塞方式:如果没有接收到报文,则读函数一直处于等待状态,直到报文到达。

循环读写方式

1、一次直接读写报文:在一次接收或发送报文动作中一次性不加分别地全部读取或全部发送报文字节。

2、不指定长度循环读写:这一版发生在短连接进程中,受网络路由等限制,一次较长的报文可能在网络传输过程中被分解成很多个包,一次读取可能不能全部读完一次报文,这就需要循环读取报文,直到读完为止。

3、带长度报文头循环读写:这种情况一般在长连接中,由于在长连接中没有条件能够判断循环读写什么时候结束。必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读报文,实际情况中,报头码制格式还经常不一样,如果是非ASCII的报文头,还必须转换成ASCII

常见的报文头编制有:1、n个字节的ASCII码。2、n个字节的BCD码。3、n个字节的网络整型码。以上是几种比较典型的读写报文方式,可以与通信方式模板一起预先提供一些典型的API读写函数。当然在实际问题中,可能还必须编写与对方报文格式配套的读写API. 在实际情况中,往往需要把我们自己的系统与别人的系统进行连接, 有了以上模板与API,可以说连接任何方式的通信程序都不存在问题。

什么时候用长连接,短连接?

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的 连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频 繁操作情况下需用短连好。总之,长连接和短连接的选择要视情况而定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP通信过程详解以及tcp长连接和短连接 的相关文章

  • Kali Linux 安全渗透核心总结,444页核心知识点

    就像IT人离不开Linux系统一样 网安人也离不开Kali Linux 作为攻击性防御和渗透测试的代名词 越来越多的人开始学习Kali 如果你也对kali感兴趣 又想深入了解这方面内容 不妨收藏一下这份Kali Linux安全渗透教程 共4
  • 网络基础面试题(二)

    11 什么是网桥 防火墙的端口防护是指什么 网桥是一种网络设备 用于连接两个或多个局域网 LAN 并转发数据包 它能够根据MAC地址来识别和转发数据 提高网络的传输效率和安全性 防火墙的端口防护是指对防火墙上的各个端口进行保护和限制 只允许
  • 服务器集群是如何提高计算性能的?

    服务器集群是一种将多台服务器连接起来协同工作的技术 通过集群配置 可以提高计算性能 可靠性和可扩展性 以下是服务器集群如何提高计算性能的详细解释 一 并行处理能力 服务器集群的核心优势在于其并行处理能力 通过将多个服务器组成一个集群 可以将
  • 这些专利知识你知道吗?

    专利作为一种重要的知识产权保护形式 专利不仅成为了企业核心竞争力的重要组成部分 也成为了国家创新发展的重要支撑 专利是指国家专利主管机关授予发明创造申请人的一种专有权 这种专有权具有独占性 排他性和法律强制性 能够为持有者带来经济利益和竞争
  • 从不同维度的调研数据,看企业数字化转型

    数字化转型逐渐成为企业增长和价值创造的新引擎 然而 在复杂的背景下 企业数字化转型也面临着前所未有的挑战和机遇 未来 我们还能做些什么 怎么做 这成为了各企业高管当前亟需厘清的问题 企业做数字化转型的原因 总体来看 大部分受访企业做数字化转
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 前端必备的 web 安全知识手记

    前言 安全这种东西就是不发生则已 一发生则惊人 作为前端 平时对这方面的知识没啥研究 最近了解了下 特此沉淀 文章内容包括以下几个典型的 web 安全知识点 XSS CSRF 点击劫持 SQL 注入和上传问题等 下文以小王代指攻击者 话不多
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • Python爬虫实战:IP代理池助你突破限制,高效采集数据

    当今互联网环境中 为了应对反爬虫 匿名访问或绕过某些地域限制等需求 IP代理池成为了一种常用的解决方案 IP代理池是一个包含多个可用代理IP地址的集合 可以通过该代理池随机选择可用IP地址来进行网络请求 IP代理池是一组可用的代理IP地址
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制_raylink todesk

    目录 一 前言 二 远程控制中的安全威胁 三 国内外远控软件安全机制 ToDesk RayLink Teamviewer Splashtop 四 安全远控预防 一 前言 近期 远程控制话题再一次引起关注 据相关新闻报道 不少不法分子利用远程
  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 内网安全:隧道技术详解

    目录 隧道技术 反向连接技术 反向连接实验所用网络拓扑图及说明 网络说明 防火墙限制说明 实验前提说明 实战一 CS反向连接上线 拿下Win2008 一 使用转发代理上线创建监听器 二 上传后门执行上线 隧道技术 SMB协议 SMB协议介绍
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • 光波导结构

    摘要 增强现实和混合现实 AR MR 领域的新应用引起了人们对带有光栅区域的光波导系统的越来越多的关注 这些光波导系统用于输入和输出耦合以及扩瞳目的 VirtualLab Fusion为这类系统的仿真和设计提供了几个强大的工具 其中一个是具

随机推荐

  • 三分钟拥有自己的 chat-gpt (开发到上线)

    三分钟拥有自己的 chat gpt 开发到上线 首先你需要有一个 laf 账号 如果你还不知道 laf 是什么 点击这里三分钟学会 然后你还需要有一个 chat gpt 的账号并且生成一个 apiKey 这一步可以问 Google 云函数
  • Centos 7 阿里yum源及epel源配置

    1 下载阿里yum配置文件 wget O etc yum repos d CentOS Base repo http mirrors aliyun com repo Centos 7 repo 2 下载阿里epel配置文件 wget O e
  • ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found

    在运行程序的时候报错 import cv2 ImportError usr lib x86 64 linux gnu libstdc so 6 version GLIBCXX 3 4 26 not found required by hom
  • 【STM32内部架构理解】

    STM32和GD32F10X内部架构 整体架构 模块架构 总线矩阵 最开始学stm32开始对架构各部分不是很了解看架构图基本上走马观花 然后陷入对各个外设的投入中去 比如GPIO ADC CAN等 但是对整体架构的掌握对后面编程很多细节的理
  • 列表首屏毫秒级加载与自动滚动定位方案

    引用自 摸鱼wiki 场景
  • 利用libuv编写异步多线程的addon实例

    转载自 http snoopyxdy blog 163 com blog static 601174402013422103614385 最近cnode上很多TX在问关于node的异步回调以及单线程的事情 今天看了libuv的一些api和d
  • 微信小程序启动自动检测版本更新,检测到新版本则提示更新

    UpdateManager 对象 用来管理更新 可通过 wx getUpdateManager 接口获取实例 在app js中的示例代码 onShow 获取小程序更新机制的兼容 由于更新的功能基础库要1 9 90以上版本才支持 所以此处要做
  • 垃圾分类资料汇总

    目录 一 前言 二 垃圾分类话题简介 三 当前存在的一些有用参考资源 四 当前存在的垃圾分类小程序或者APP 五 当前规模比较大的产品 六 个人想法 参考资料 注意事项 一 前言 自从上海实行了垃圾分类之后 垃圾分类这个话题就成为了一个热点
  • 蓄水池抽样算法(Reservoir Sampling)

    蓄水池抽样算法 Reservoir Sampling 问题描述 问题分析 代码实现 数学证明 问题描述 给定一个数据流 数据流长度N很大 且长度不可预知 问如何在仅遍历一次数据的情况下 如何等概率 抽取m个样本 问题分析 首先明确概念 等概
  • qt5.2音乐播放器的播放功能

    qt5 2并没有了phonon 模块 在播放音频视频的时候可以使用QMediaplayer来实现 创建媒体 player new QMediaPlayer this 创建播放列表 并在列表里添加两首歌曲 mediaList new QMed
  • 禁止弹窗中蒙层底部页面跟随滚动的几种方法汇总

    场景概述 众所周知 弹窗是一种常见的交互方式 而蒙层是弹窗必不可少的元素 用于隔断页面与弹窗区块 暂时阻断页面的交互 但是 在蒙层元素中滑动的时候 滑到内容的尽头时 再继续滑动 蒙层底部的页面会开始滚动 显然这不是我们想要的效果 因此需要阻
  • linux内核epoll实现分析

    为了更好的分享体验 博客搬迁至极客驿站 欢迎查阅 epoll与select poll的区别 select poll epoll都是IO多路复用的机制 I O多路复用就通过一种机制 可以监视多个描述符 一旦某个描述符就绪 能够通知程序进行相应
  • Linux汇编语言编译

    Linux中汇编的使用 一 安装nasm编译器 二 编译过程简介 三 编译实例 一 安装nasm编译器 输入以下命令安装nasm编译器 sudo apt install nasm 二 编译过程简介 1 预处理 预处理的过程主要包括以下过程
  • 区块链用到的技术

    区块链的核心技术 加密算法 P2P 共识算法 智能合约 分布式存储 加密算法 目的 保证数据的安全 防止数据被非法窃取 验证身份 应用于数字签名或者数字证书 在不暴露身份的前提下知道 我是我 手段 对称加密 加密和解密使用的密钥相同 非对称
  • 数据结构与算法学习笔记(第一章)

    配套材料 大话数据结构 主 中国大学MOOC浙江大学 数据结构 补充 介绍 数据结构是相互之间存在一种或多种特定关系的数据元素集合 数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间关系和操作等相关问题的学科 为什么要学习数
  • Linux进程、系统性能和计划任务

    成功不易 加倍努力 1 进程和内存管理 1 1 什么是进程 1 2 进程结构 1 3 进程相关概念 1 3 1 物理地址空间和虚拟地址空间 1 3 2 用户和内核空间 1 3 3 C代码和内存布局之间的对应关系 1 3 4 进程使用内存问题
  • 一个非常有用的函数——COALESCE

    很多人知道ISNULL函数 但是很少人知道Coalesce函数 人们会无意中使用到Coalesce函数 并且发现它比ISNULL更加强大 其实到目前为止 这个函数的确非常有用 本文主要讲解其中的一些基本使用 首先看看联机丛书的简要定义 返回
  • java对象创建过程(jvm)

    虚拟机遇到一条new指令时 开始进行对象的创建 1 检查这个指令的参数是否能在常量池中定位到一个类的符号引用 true 则继续下一步 false 说明这个类还没有被定义 会抛出ClassNotFoundException 2 检查这个符号引
  • centos7自定义镜像运行Flask

    一 centos7自定义镜像 1 支持22端口的sftp连接 参考链接 Centos7创建支持ssh服务器的docker容器 2 支持flask 上一步保存的镜像名为 centos7 dn 0119 docker run d p 8023
  • TCP通信过程详解以及tcp长连接和短连接

    1 TCP连接 当网络通信时采用TCP协议时 在真正的读写操作之前 server与client之间必须建立一个连接 当读写操作完成后 双方不再需要这个连接 时它们可以释放这个连接 连接的建立是需要三次握手的 而释放则需要4次挥手 所以说每个