问题

TCP链接之间的网络物理断开了然后有连上,这个TCP链接是否断开?

回答
当TCP连接的网络物理链路发生断开,随后又重新连接,这个TCP连接本身是否被视为断开了,这是一个相当值得探究的问题。答案并非简单的“是”或“否”,而是要看我们从哪个角度去理解“断开”的含义。

从TCP协议层面来看,可以认为这个连接在物理链路中断的那一刻,实际上是非正常终止了。TCP是一个基于连接的有状态协议,它依赖于端到端之间持续的、可靠的通信路径。当物理链路断开,数据包无法在发送方和接收方之间正常传递,TCP的这些可靠性机制,比如序列号、确认应答(ACK)、超时重传等,都将失效。

发送方会尝试发送数据,但由于链路断开,这些数据包无法到达接收方。发送方的TCP栈会设定一个超时计时器,等待接收方的确认应答。当计时器超时,而没有收到ACK,发送方会认为数据丢失,并进行重传。当重传次数达到一定阈值,仍然无法成功通信时,TCP协议栈会认为连接已经失效,并最终主动关闭这个连接,将连接状态标记为 `CLOSED` 或 `ABORTED`。

同时,接收方也可能因为收不到数据而产生混乱。即使物理链路重新连接,接收方并不知道之前发送的数据是否到达,也不知道发送方是否已经放弃重传。它可能还在等待一些“已发送但未确认”的数据。

所以,即使物理链路被修复,原来的那个TCP连接,在其生命周期内,已经被TCP协议按照其内部机制判断为失效并关闭了。 尽管网络恢复了,但TCP协议并不会自动“复活”那个已经被标记为死亡的连接。它不会傻乎乎地接着之前的状态,继续传输数据。

从应用层面来看,这个TCP连接自然是断开了。对于运行在TCP之上的应用程序(比如一个网页浏览器或者一个文件传输程序),当它试图发送数据但长时间得不到响应,或者收到一个明确的错误指示时,它就会认为连接已经中断。应用程序会尝试重新建立连接,通常是发起一个新的TCP三次握手过程,创建一个全新的TCP连接。

当然,也有一些更智能的网络设备或TCP实现,可能会在物理链路恢复后,尝试进行一些“连接恢复”的动作。比如,某些路由器或者中间设备可能会缓存一些TCP状态信息,并在链路恢复后尝试“粘合”这个连接。然而,这种行为并不是TCP标准协议所强制要求的,更多的是一种优化或容错机制。即使存在这样的机制,其背后也往往是通过某种方式来模拟一个新的连接建立过程,或者重置一部分TCP状态。

总结来说,当TCP连接的网络物理链路断开再重新连接,从TCP协议本身的可靠性机制和状态管理来看,这个连接就已经被视为非正常终止并关闭了。尽管物理通路恢复了,但这个原有的TCP连接已经无法继续使用,应用程序需要重新建立一个新的TCP连接才能继续通信。所以,对于应用来说,连接是断开的,需要重新发起连接。

网友意见

user avatar

通信领域中的连接是指通信方向网络申请为确保通信质量而预留资源。

基于连接的通信过程是:

1、发起呼叫方提交呼叫申请,网络发起连接建立过程

2、这个连接建立的过程,是在整个通信路径上为本次通信预留资源

3、如果整条路径都许可本次通信,则连接建立,反向在整个通信路径上逐点确认

4、呼叫方收到确认则连接建立。

在建立了连接的通信过程, 双方并不使用各自的通信地址(只用于连接建立过程中的识别与寻址)而是使用网络分配的连接号进行路由(其实就是查一下连接号分配表,然后将数据转发到下一个节点,这个表就是连接建立过程中进行填写)。

而ip网络则是非连接的分组交换,和上述基于连接的通信有几个区别:

1、没有连接的建立过程,所以网络并不为通信预留任何资源,所以ip只提供尽力传送的服务承诺

2、网络各节点对每个ip包都要根据目的地址进行路由,比连接的方式要复杂的多

而tcp属于运输层协议,只存在于端系统中,对中间的ip中继节点是透明的。所以对tcp来说,不管你中间跨了千山万水,它就认为源目双方就是一根网线连起来的,只要源目可达即可。

所以,题主的问题首先就犯了一个概念错误:事实上并不存在图示的那个连接路径,每个ip包都是独立路由的,如果始终都使用了相同的中继节点,那也是一种巧合。tcp只知道源目可达,然后用差控流控来管理通信过程;ip连源目通不通都不管,他只看来了一个包,然后用目的ip查路由表,按最长匹配找到就转发,找不到就丢。

user avatar

我知道提问者你想象的世界里TCP连接建立后是这样的:


而实际上是这样的:


互联网上两台机器建立的TCP连接的物理链路每时每刻的都可能在断开和产生新的链路

user avatar

TCP是虚拟连接,如果低层物理链路断开,只要不引起keepalive retry timeout,TCP连接会一直健在。


有两种场景:


场景1:通信双方A/B非直连链路断


1.1 断开时间很短暂,小于TCP连接超时时间


TCP连接丝毫不受影响


1.2 断开很长时间,超过TCP连接超时时间


TCP双方会删除这个连接


场景2: 通信双方A/B物理直连链路断


如这个例子里的A或B的网线拔掉了,A/B网卡灯灭,网卡驱动程序会通知IP层:网络接口down 掉了,IP层删除所有和该接口有关联的路由表,如果该接口为唯一出口,则流量的出口即为空,所有依赖于此接口的TCP连接都应该收到通知消息,消息大意为:No route to the destination,您老人家看着办!TCP最简单的做法就是Reset现有连接,或者弹出一个消息窗口:No Route is available now! 收到用户的确认,再删除连接。

以上演绎也可以基于路由协议BGP,因为BGP也是TCP连接,唯一的不同是BGP使用了自己的keep live ,三次没有收到对方的keeplive,将reset 整个TCP连接,并释放路由表。

如果依靠BGP Hello(最小值为1秒),至少会耗费3 秒才会发现中间路径断,对于要求收敛速度…<50 ms 的场景,黄花菜都凉了,我们需要配置BFD来检测双向的连接。

对于直连链路,网络接口会第一时间通知BGP链路断,即使这样,配置BFD也可以大大缩短发现故障的时间,让快速收敛成为可能。

类似的话题

  • 回答
    当TCP连接的网络物理链路发生断开,随后又重新连接,这个TCP连接本身是否被视为断开了,这是一个相当值得探究的问题。答案并非简单的“是”或“否”,而是要看我们从哪个角度去理解“断开”的含义。从TCP协议层面来看,可以认为这个连接在物理链路中断的那一刻,实际上是非正常终止了。TCP是一个基于连接的有状.............
  • 回答
    TCP 的三次握手而不是两次或四次,是经过深思熟虑的、为了保证通信的可靠性和高效性而设计的。下面我将详细解释其中的原因:核心目标:建立一个可靠的、全双工的连接TCP 的目标是建立一个可靠的、面向连接的、全双工的通信通道。这意味着: 可靠性: 确保数据能够按顺序、不丢失、不重复地送达。 面向连.............
  • 回答
    TCP 的可靠性,简单来说,就是它能确保你发送的数据,能够准确无误地、按顺序地到达对方手中,并且中间不会丢失、不会错乱、不会重复。想象一下,你给朋友写信,希望他能收到你写的所有内容,而且每一句话的顺序都和你写的一模一样。TCP 在网络通信中扮演的就是那个尽职尽责的邮递员,只不过它的工作方式更像是一位.............
  • 回答
    TCP 之所以没有基于 UDP 实现,并非因为它“不能”,而是因为它“不应该”,或者说,它基于 UDP 来实现,会变得非常低效且失去意义。理解这一点,需要深入剖析 TCP 和 UDP 各自的设计哲学和核心功能。首先,我们得明确 TCP 和 UDP 这两个协议,它们都工作在传输层,负责在应用程序之间传.............
  • 回答
    如今,仅使用 TCP 协议来开发实时多人在线网络游戏是完全可行的,但需要付出更多的努力和权衡,并且在某些方面会存在固有的劣势。它不是一个理想的解决方案,但并非不可能。下面我将详细阐述其可行性、优势、劣势以及需要克服的挑战: TCP 协议简介及其特性在深入讨论之前,我们先回顾一下 TCP 的关键特性:.............
  • 回答
    usb协议和tcp/ip协议是两个完全不同层面的东西,它们之间并没有直接的融合关系。不过,如果一定要说“整合”,我们可以从几个角度来理解这个问题,并且尽量不让它听起来像机器生成的:首先,我们要明白它们各自是什么东西: USB(通用串行总线): 这个大家都很熟悉,就是你用来给手机充电、连接鼠标键盘.............
  • 回答
    想深入理解 TCP/IP 的底层运作机制,从源码入手无疑是最直接有效的方式。市面上的书籍不少,但要说写得透彻、讲解得详尽,并且能引导你真正看懂源码的,我觉得有几本是绕不开的经典。我最近刚好温习过几本,结合自己的理解,跟你聊聊我推荐的书,希望能帮到你。一、 《TCP/IP Network Intern.............
  • 回答
    最终的TCP传输层本质上还是一个需要顺序交付验证的管道,所以HTTP/2的管道化尝试意义有多大? 这是一个值得深入探讨的问题。简单来说,HTTP/2的管道化确实在某些场景下带来了提升,但它并没有从根本上改变TCP固有的特性,也因此在实际应用中,其带来的“革命性”意义需要被放在一个更现实的框架下去审视.............
  • 回答
    UDP 和 TCP 作为网络通信中两个最基础的传输层协议,它们的应用场景差异很大,选择哪种协议很大程度上取决于应用的需求。理解它们的区别,就像理解在城市里选择驾车还是骑自行车一样,各有优劣,适合不同的出行目的。先来聊聊 TCP:想象一下,你需要给一个非常重要的文件打包,然后通过邮局寄送。你希望这个文.............
  • 回答
    TCP 网络传输的“粘包”难题:如何做到滴水不漏在网络通信的世界里,TCP 协议扮演着至关重要的角色,它以其可靠、有序、面向连接的特性,为我们提供了稳定可靠的数据传输。然而,就像任何系统一样,TCP 并不是完美无缺的。当我们深入了解 TCP 的工作原理时,会发现一个常见的问题——“粘包”(Sausa.............
  • 回答
    你提到的TCP连接数量最大不能超过65535个,这个数字其实有几种理解方式,而且对于服务器如何应对百万千万的并发,也并非仅仅是“TCP连接数”一个数字就能概括的。我们来掰开了揉碎了聊聊这其中的门道。首先,澄清一下“65535”的含义:当你听到“65535”这个数字在TCP连接中出现时,通常指的是:1.............
  • 回答
    想象一下,你要寄一封信,或者打电话给朋友,这些日常沟通的方式,其实都离不开一些底层和上层的“规矩”和“方法”。在计算机网络里,TCP 和 UDP 就像是这两种最基本的通信方式,而 HTTP、FTP、SMTP 则是更具体的、用来做特定事情的“信件内容”或者“通话主题”。咱们先来说说 TCP。你可以把 .............
  • 回答
    .......
  • 回答
    .......
  • 回答
    .......
  • 回答
    一台主机上最多能保持多少个 TCP 连接,理论上的最大值是 65535 个,但实际情况远比这个复杂,并且受多种因素影响,很多情况下远达不到这个理论值。下面我将详细解释这个问题:1. TCP 连接的本质:端口号一个 TCP 连接在客户端和服务器端都通过一个唯一的组合来标识: 客户端标识: IP 地.............
  • 回答
    Linux Kernel 4.9 中引入的 BBR (Bottleneck Bandwidth and Roundtrip propagation time) 算法代表了 TCP 拥塞控制领域的一个重要进步。与之前广泛使用的算法(如 Cubic、Reno、NewReno)相比,BBR 具有以下显著优.............
  • 回答
    要说基于 UDP 实现的可靠传输协议(比如 uTP),和我们熟悉的 TCP 比起来,那可真是各有千秋,优缺点都很鲜明。咱们掰开了揉碎了好好聊聊。 基于 UDP 的可靠传输协议(如 uTP) vs. TCP:一场优劣势大比拼首先得明确一点:TCP 是传输层协议里的“老大哥”,大家最熟悉,也是用得最多的.............
  • 回答
    .......
  • 回答
    .......

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有