11626|1

661

帖子

18

TA的资源

纯净的硅(初级)

楼主
 

14-TCP 协议(连接异常与RST) [复制链接]

1. RST 段

当 TCP连接出现严重的错误时,必须释放连接。通过将 TCP 首部中的 RST 标志位置 1,就可以通知对端发生错误,以终止连接。

我们在 TCP 协议(连接异常)一文中已经看到过这种错误,当时实验演示的是向一个不存在的端口建立连接,导致对端发送过来一个 RST 段。

2. 异常终止连接

正常情况下,关闭连接的方式是发送 FIN 段,即四次挥手。这种方式也称为有序释放(orderly release)。

也可以通过发送 RST 段给对端来释放连接,这种方式称为异常释放(abortive release)。

异常终止连接有两个特点:

  • 丢弃任何尚未发送的数据,立即发送 RST 报文段
  • RST 接收方会区分另一端是异常关闭还是正常关闭,从而做出不同响应
3. 实验——观察异常关闭

使用 unp/protocol/tools/winclient/tcp_client.cpp 程序,让其在关闭套接字时不发送 FIN 段,而是 RST 段给对端。

3.1 实验步骤
  • Linux 端启动 unp/protocol/tools/tcpserver/serv.c(需要编译)
$ ./serv 192.168.80.130 5000
  • 1
  • win7 上打开 OmniPeek 开始抓包(选择 VMnet8 网卡)

  • win7 启动 tcp_client.exe,指定选项 SO_LINGER,发起异常关闭请求


给套接字指定 SO_LINGER 选项,客户端在 close 的时候会发送 RST 段而不是正常的 FIN 段。




图1 启动客户端并输入以上字符

3.2 实验结果

我们在服务器端看到如下信息:




图2 服务器端打印 Connection reset by peer

抓包结果如图 3.




图3 OmniPeek 抓取的数据

可以看到,客户端 (192.168.80.2) 最后一次发送了一个 RST 段给服务器。服务器收到 RST 段后,在执行 read 的时候出错,打印 Connection reset by peer(图 2).

还有几点需要注意:

  • 服务器端并没有给这个 RST 回复 ACK(任何收到 RST 段的一方根本不会为这个 RST 进行确认)。
  • 主动发送 RST 段的一方,不会进入 TIME_WAIT 状态。
4. 总结
  • RST 的含义
  • 知道接收方对 RST 是如何响应的

最新回复

谢谢分享   详情 回复 发表于 2021-3-21 19:23
点赞 关注

回复
举报

661

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

谢谢分享

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表