linux tcp半开连接,3.5.3 处理半打开连接

3.5.3 处理半打开连接

考虑下面的情况:服务器(或客户端)关闭或者异常终止了连接,而对方没有接收到结束报文段(比如发生了网络故障),此时,客户端(或服务器)还维持着原来的连接,而服务器(或客户端)即使重启,也已经没有该连接的任何信息了。我们将这种状态称为半打开状态,处于这种状态的连接称为半打开连接。如果客户端(或服务器)往处于半打开状态的连接写入数据,则对方将回应一个复位报文段。

举例来说,我们在Kongming20上使用nc命令模拟一个服务器程序,使之监听12345端口,然后从ernest-laptop运行telnet命令登录到该端口上,接着拔掉ernest-laptop的网线,并在Kongming20上中断服务器程序。显然,此时ernest-laptop上运行的telnet客户端程序维持着一个半打开连接。然后接上ernest-laptop的网线,并从客户端程序往半打开连接写入1字节的数据“a”。同时,运行tcpdump程序抓取整个过程中telnet客户端和nc服务器交换的TCP报文段。具体操作过程如下:

$ nc –l 12345    #在Kongming20上运行服务器程序

$ sudo tcpdump –nt –i eth0 port 12345

$ telnet 192.168.1.109 12345  #在ernest-laptop上运行客户端程序

Trying 192.168.1.109...

Connected to 192.168.1.109.

Escape character is '^]'.   #此时断开ernest-laptop的网线,并重启服务器

a(回车)     #向半打开连接输入字符a

Connection closed by foreign host.

telnet的输出显示,连接被服务器关闭了。tcpdump抓取到的TCP报文段内容如下:

1. IP 192.168.1.108.55100>192.168.1.109.12345: Flags [S], seq 3093809365,

length 0

2. IP 192.168.1.109.12345>192.168.1.108.55100: Flags [S.], seq 1495337791,

ack 3093809366, length 0

3. IP 192.168.1.108.55100>192.168.1.109.12345: Flags [.], ack 1, length 0

4. IP 192.168.1.108.55100>192.168.1.109.12345: Flags [P.], seq 1:4, ack 1,

length 3

5. IP 192.168.1.109.12345>192.168.1.108.55100: Flags [R], seq 1495337792,

length 0

该输出内容中,前3个TCP报文段是正常建立TCP连接的3次握手的过程。第4个TCP报文段由客户端发送给服务器,它携带了3字节的应用程序数据,这3字节依次是:字母“a”、回车符“\r”和换行符“\n”。不过因为服务器程序已经被中断,所以Kongming20对客户端发送的数据回应了一个复位报文段5。

【责任编辑:book TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值