====================================================||

欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业)

====================================================||

目录

一、半开连接

二、半关连接

三、wireshrk抓包示例

1.TCP半开

2.TCP半关

补充说明:


在前面部分我们我们分别介绍了三次握手、四次挥手、同时打开和同时关闭,TCP连接还有两种场景分别是半打开(Half-Open)连接和半关闭(Half-Close)连接。TCP是一个全双工(Full-Duplex)协议,因此这里的半连接"半"字就是相对于全双工的"全"来说的。

一、半开连接

从协议定义的角度来说,TCP的半开连接是指TCP连接的一端异常崩溃,或者在未通知对端的情况下关闭连接,这种情况下不可以正常收发数据,否则会产生RST(后面内容我们在介绍RST)。比如一个常见的情况是TCP连接的一端异常断电,就会导致TCP的半开连接。如果没有数据传输,对端就不会知道本端的异常而一直处于ESTABLISHED状态(TCP有存活检测机制,后面内容我们会进行介绍)。

另外从linux实现的角度来说,因为linux内部有个半连接队列,TCP半开连接是指发送了TCP连接请求,等待对方应答的状态,此时连接并没有完全建立起来,双方还无法进行通信交互的状态,此时就称为半连接。由于一个完整的TCP连接需要经过三次握手才能完成,这里把三次握手之前的连接都称之为半连接。

二、半关连接

TCP的半关连接是指TCP连接只有一方发送了FIN,另一方没有发出FIN包,仍然可以在一个方向上正常发送数据。这种场景并不常见,一般来说Berkeley sockets API调用shutdown()接口时候就会进入半关闭状态(调用常规的close()一般是期待完整的双向关闭这个TCP连接),shutdown()接口相当指示程序,本端已经没有数据待发送,所以我发送一个FIN到对端,但是我仍然想要从对端接收数据,直到对端发送一个FIN指示关闭连接为止。如下图所示,在红色背景文本框标注的数据传输场景下就是TCP的半关连接

三、wireshrk抓包示例

首先注意半开连接是不能正常传输数据的,而半关连接是可以在其中的一个方向上传输数据的。下面简单附一下wireshark的抓包图示,限于篇幅仅作简要介绍,详细请参考对应的wireshark抓包文件

1.TCP半开

通过单台笔记本的双无线网卡测试tcp连接的半开,步骤如下

  • server绑定网卡A的地址

  • client绑定网卡B的地址并连接server 对应截图中的No 1--No 3包

  • client发送"hello"消息 对应截图中的No 4包

  • server正常接收到后"hello"消息后 拔掉网卡A

  • kill掉server进程 使server的FIN消息不能发送到client

  • 插上网卡A  注意在路由器中绑定IP地址和MAC地址,使得网卡A的地址和之前是一致的,此时client和server即处于半开连接状态

  • client向server发送"world"消息   对应截图中的No 6包

  • server回复rst消息

2.TCP半关

正常建立连接后,client首先发送"hello"消息给server,然后server发送FIN给client,关闭了server到client方向的数据传输,但是client仍然可以向server传输数据,此时client和server之间的连接即处于半关连接的状态,接下来client向server发送"world"消息,然后发送FIN给server关闭client到server方向的数据传输。

补充说明:

1.目前linux最新的实现已经没有半连接队列了,连接请求的pseudo sock已经插入ehash(e代表establish,ehash即已连接hash队列)中了  详情https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/net/ipv4/?id=079096f103faca2dd87342cca6f23d4b34da8871&context=3&ignorews=0&dt=1

TCP系列04—连接管理—3、TCP连接的半打开和半关闭相关推荐

  1. 计算机网络中TCP连接管理,计算机网络 TCP协议

    TCP:面向连接的运输 TCP协议是面向连接的协议,把连接作为最基本的抽象.每一条TCP连接唯一的被通信两端的两个端点所确定.TCP协议是点对点,而不是点对多点.端点又被称为套接字,TCP协议规定,I ...

  2. TCP系列11—重传—1、TCP重传概述

    在最开始介绍TCP的时候,我们就介绍了TCP的三个特点,分别是面向连接.可靠.字节流式.前面内容我们已经介绍过了TCP的连接管理,接下来的这部分内容将会介绍与TCP可靠性强关联的TCP重传. 很多网络 ...

  3. TCP协议-TCP连接管理

    一.TCP概述 TCP协议是 TCP/IP 协议族中一个非常重要的协议.它是一种面向连接.提供可靠服务.面向字节流的传输层通信协议. TCP(Transmission Control Protocol ...

  4. gRPC-go源码(1):连接管理

    gRPC-go源码(1):连接管理 1 写在前面 在这个系列的文章中,我们将会从源码的层面学习和理解gRPC. 整个系列的文章的计划大概是这样的:我们会先从客户端开始,沿着调用路径逐步分析到服务端,以 ...

  5. HTTP/1.1(消息格式、连接管理、条件请求、范围请求、缓存、身份验证)

    文章目录 概述 消息格式 开始行 请求方法 请求目标 状态码 头部字段 消息体 连接管理 条件请求(Conditional Requests) 范围请求(Range Requests) 缓存(Cach ...

  6. SOFA 源码分析 — 连接管理器

    前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...

  7. 远程连接管理软件 v1.0

    简介: 远程连接管理软件,支持远程桌面.RADMIN.SSH主机的管理,双击主机即可打开连接,RADMIN主机的右键菜单中加入完全控制.仅限查看.文件传送.远程关机多种功能,而且软件无联网功能,支持软 ...

  8. 物联网平台功能解析(一):“不赚钱”的连接管理平台

    来源:物联网空间站 在万物互联阶段,海量数据得以积累,大数据.云计算.人工智能等技术将有用武之地,更多的物联网应用得以成熟并落地,最终,行业将缓慢走向万物智联的状态. 全球移动通信系统协会GSMA曾预 ...

  9. 用 subsetting 限制连接池中的连接数量

    内网使用服务发现后,服务与其它服务的实例之间使用一条 TCP 长连接进行通信.这种情况下常见的做法是按照 registry 下发的 host:port 列表来直接建连. 简单来说就是下图这样: 每一个 ...

最新文章

  1. 如何在机器学习的框架里实现隐私保护?
  2. 凭着这把AutoML利剑,这家AI公司荣登 IEEE ISI“铁王座”
  3. 如何定位cpu占用率高的java线程
  4. Luogu 3008 [USACO11JAN]道路和飞机Roads and Planes
  5. 利用STM32 的串口来发送和接收数据实验
  6. BEA WebLogic平台下J2EE调优攻略--转载
  7. webuploader结合php实现图片上传到本地和保存数据库
  8. 容斥原理应用(求1~r中有多少个数与n互素)
  9. [BZOJ4349]最小树形图
  10. 事件处理程序的执行上下文
  11. 程序员面向软件开发时,如何成功?
  12. C# async/await异步编程深入理解
  13. 我的Android进阶之旅------百度地图学习:BDLocation.getLocType ( )值分析
  14. ffplay的音视频同步分析
  15. Mybatis-代码走查问题整理
  16. openGL天空盒实现-立方体贴图
  17. 网易有道词典去广告版
  18. python unpack函数_python的struct.unpack函数
  19. Boostnote:适合程序员的笔记软件
  20. SVN Git GitHub Gitee GitLab区别

热门文章

  1. 基于Anycloud平台移植Zbar
  2. 求助:绿联USB2.0对拷线连接不上
  3. 金蝶KIS旗舰版:禁用的物料如何显示出来,进行反禁用
  4. 如何用 Siesta 编写 RESTful app
  5. 微型计算机硬件 电子器件,微型计算机的硬件组成.docx
  6. oracle日志保存时间设置,关于日志设置的详细介绍
  7. SQL学习_常用函数参考
  8. python单位根检验平稳性怎么看是否平稳_Python关于时间序列的平稳性检验
  9. 单服务台排队系统问题仿真
  10. python重量计算月球上的物体_Tensorflow.物体检测_资料(raccoon浣熊)