没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
TCP 连接断连问题剖析
郑 勇 (zhengyzy@cn.ibm.com), 软件工程师, Systems Documentation, Inc. (SDI)
冯 锐 (fengrui@cn.ibm.com), 软件工程师, Systems Documentation, Inc. (SDI)
简介: TCP 连接的保持并不需要任何额外的操作,但在实际应用中,要长时间保持一个
TCP 连接则会受到诸多因素的影响。本文介绍了几种常见的导致 TCP 连接断连的原因,
并在此基础上,以 AIX 系统上 TCP 连接的异常断连为例,借助相应的网络分析工具,逐
步揭开 AIX 上 TCP 断连的原因,并给出两种可行的解决方案。
发布日期: 2008 年 8 月 21 日
访问情况 : 14843 次浏览
评论: 0&(查看 |&添加评论 - 登录)
平均分 (28 个评分)
为本文评分
引言
在官方的正式文档中,TCP/IP 协议簇也称为国际互联网协议簇。TCP/IP 协议簇是目前使
用最为广泛的全球互联网技术,其分层结构如图 1 所示:
图 1. TCP/IP 协议簇分层结构
如图 1 所示,数据链路层主要负责处理传输媒介等众多的物理接口细节;网络层负责处理
数据分组在网络中的活动,包括上层数据报文的分割、选路 phost2008-08-21T00:00:00
等;传输层则负责为两台主机提供端到端的通信;应用层将负责处理应用程序的特定细节。
其中,IP 协议是网络层的核心协议,用来提供不可靠、无连接的数据传递服务;而 TCP
协议则处于传输层,其基于不可靠无连接的 IP 协议能够为两台主机提供面向连接的、可靠
的通信。UDP?
由于 TCP 是面向连接的协议,因此在两台主机通信之前,需要首先建立起一条连接。下面
我们将简要介绍 TCP 连接的建立以及通信双方是如何保持已建立的 TCP 连接的。
TCP 连接的建立及保持
一个 TCP 连接的建立需要通过著名的“三次握手”来完成。下面的例子将直观给出一个 TCP
连接的建立过程。
在本文的下述描述中,客户端主机均为 testClient.cn.ibm.com(Linux),服务器主机均为
testServer.cn.ibm.com(AIX)。在 testClient 主机的一终端上执行 tcpdump –i eth0 host
testServer 命令,启动 tcpdump 监听网络数据(其中,eth0 是客户主机与外部网络进行通
信所使用的网卡);与此同时,在客户主机的另一个终端上执行下述命令:
(root@testClient /)>telnet testServer。此时客户主机上 tcpdump 的输出如清单 1 所示。
清单 1. 创建一个 TCP 连接的三次握手
# tcpdump –S -i en0 host testServer
1 14:02:38.384918 IP
testClient.cn.ibm.com.43370 >
testServer.cn.ibm.com.telnet: S
3392458353:3392458353(0) …
2 14:02:38.629578 IP
testServer.cn.ibm.com.telnet >
testClient.cn.ibm.com.43370: S
881279296:881279296(0) ack 3392458354 …
3 14:02:38.629592 IP
testClient.cn.ibm.com.43370 >
testServer.cn.ibm.com.telnet: . ack 881279297
…
注意:我们删除了 tcpdump 输出结果中的部分无关信息。为了便于理解,我们将上述输出
转换为实际序列图 2。
图 2. TCP 建立创建三次握手的实际序列
从图 2 中我们可以清楚地看到,在 testClient 与 testServer 之间建立连接时,要经过以下
三次握手过程:
testClient 向 testServer 主动发送握手协议,报文序列号为 3392458353,大小为
1 个字节。
testServer 向 testClient 主动发送握手协议,报文序列号为 881279296,大小为 1
个字节;同时返回 ACK 3392458354,作为对 testClient 发来的 3392458354 包的
应答。
testClient 向 testServer 返回 ACK 881279297,作为对 testServer 发来的
881279296 包的应答。
一个 TCP 连接在完成上述的三次握手之后便建立完毕;此后,连接的两端即可进行信息的
相互传递。因此,TCP 连接可以认为是以两端 IP 地址和端口进行标识的一个通信信道,
而 TCP 连接的建立就是向通信双方进行上述通信信道注册的过程。TCP 连接一旦建立,
只要通信双方之间的中间结点(包括网关和交换机、路由器等网络设备)工作正常,那么
在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
TCP 连接的这种特性,使得一个长期不交换任何信息的空闲连接可以长期保持数小时、数
天甚至数月。中间路由器可以崩溃、重启,网线可以被挂断再连通,只要两端的主机没有
被重启,TCP 连接就可以被一直保持下来。
回页首
导致 TCP 连接断连的因素
理想状态下,一个 TCP 连接可以被长期保持。然而,在实际应用中,客户端或服务器端上
维持的一个看似正常的 TCP 连接可能已经断连。TCP 连接主要受到两个方面的影响而导
致断连:网络中间节点和客户端 / 服务器节点参与通信的两方节点?
在实际网络应用中,两个主机之间的通信往往需要穿越多个中间节点,例如路由器、网关、
防火墙等。因此,两个主机之间 TCP 连接的保持同样会受到中间节点的影响,尤其是会受
到防火墙(软件或硬件防火墙)的限制。防火墙是一种装置,有多种不同的实现方式(软
件实现、硬件设备实现或是软硬件相结合实现),它需要依据一系列规则对进出的信息流
进行扫描,并允许安全(符合规则)的信息交互、阻止不安全(违反规则)的信息交互。
防火墙的工作特性决定了要维护一个网络连接就需要耗费较多的资源,并且企业防火墙常
常位于企业网络的出入口,长时间维护非活跃的 TCP 连接必将导致网络性能的下降。因此,
大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 TCP 连接断连。类似的,如
果中间节点异常导致来自客户端关闭连接的请求无法传递到服务器端,也将导致服务器端
的相应连接发生断连。
另一方面,对于一个 TCP 连接两端的主机而言,创建 TCP 连接需要耗费一定的系统资源。
如果不再使用某个连接,那么我们总是希望进行通信的两个主机能够主动关闭相应的连接,
以便释放所占用的系统资源。然而,如果由于客户端出现异常 ( 例如崩溃或异常重启 ) 而
导致连接未能正常关闭,这将导致服务器端的连接断连。
无论是客户端节点或是服务器端节点,断连的 TCP 连接已经不能传递任何信息,因此,维
护大量断连的 TCP 连接将导致系统资源的浪费。这种系统资源的浪费可能并不会对客户端
节点带来太大问题;然而,对于服务器主机而言,这可能会导致系统资源(尤指内存资源
和 socket 资源)被耗尽而拒绝为新的用户请求提供服务。因此在实际应用中,服务器端需
要采取相应的方法来探测 TCP 连接是否已经断连。
回页首
剩余10页未读,继续阅读
资源评论
zhaoyp817
- 粉丝: 0
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功