我们先来聊一聊网络超时的概念,以及模拟网络超时对我们程序的必要性

要想了解如何模拟网络超时的情况,我们需要先了解一下

为什么会网络超时呢

简单的说:就是你向服务端发送数据请求,然尔服务器没返回数据,或返回数据太慢导致未收到返回数据。

比如,你要下载一个东东,你向服务器发送下载这个东东的请求,但等了好长时间都没有收到服务器同意你接收下载数据的请求,所以也不能一直这样等下去,你的电脑就会报告网络超时,如果不是你的网络故障,那么就是对方服务器的问题。

我们知道在TCP建立连接的时候有3次握手的规则

1.      客户端发送’SYN’给服务端

2.      服务端返回确认’SYN_ACK’给客户端

3.      客户端最终确定’ACK’

在这3次握手的时间内,每一次都有可能网络会掉包,我们分析一下每一种掉包的情况:

1.      SYN丢失第一次握手客户端发送SYN掉包的情况:这种情况下,客户端发送的SYN丢失在网络中,没有得到确认,客户端的TCP会超时重发SYN。发送7个SYN后等待一个超时时间(例如:127秒),如果在这段时间内仍然没有收到ACK,则connect返回超时。

2.      SYN-ACK丢失从客户端的角度来讲以前面一种情况类似。从服务端的角度来讲,由LISTEN状态进入SYN_REVD状态。服务端的TCP会重发SYN-ACK,直到超时。SYN攻击正是利用这一原理,攻击方伪造大量的SYN包发送到服务器,服务器对收到的SYN包不断回应SYN-ACK,直到超时。这会浪费服务器大量的资源,甚至导致奔溃。对服务端的应用层来讲,什么也没有发生。因为TCP只有在经过3次握手之后才回通知应用层,有新的连接到来。

3.      ACK丢失这对服务端来讲与2相同。对于客户端来讲,由SYN_SENT状态进入了ESTABLISED状态,即连接成功了。连接成功后客户端就可以发送数据了。

但实际上数据是发送不到服务端的(我们假设客户端收到SYN-ACK之后,客户端与服务端之间的网络就断开了),客户端发送出去的数据得不到确认,一般重发3次左右就会处于等待ACK的状态(win7)。而ubuntu 12.10下,调用send会返回成功,直到TCP的缓冲被填满(测试环境:局域网,感觉这个不是很合理,按照书上所说:应该是使用“指数退避”进行重传 -- TCP/IP协议详解,大概是我的测试环境中有NAT所致

吧)。最终,客户端产生一个复位信号并终止连接。返回给应用程序的结果是Connection time out(errno: 110)

好,理解了3次握手掉包的情况下,我们就很容易实现模拟超时情况的发生,

我们可以在端口上控制服务端无法与客户端握手成功来让超时的情况发生

具体的实现要用到 iptables 这个命令

iptables-A OUTPUT -p tcp -m tcp --tcp-flags SYN SYN --sport 9090 -j DROP

这个命令是用来drop 掉响应SYN的返回

之前我们看到第一次客服端向服务器请求SYN的握手信息,而这个命令就是阻止服务器返回SYN_ACK的确认握手信息,这样客户端就无法收到服务端的握手确认信息了.

上面这种情况是模拟连接没有成功的情况

下面还有一种情况,就是连接已经成功了,但是在传输数据的时候,服务端没有及时返回数据,我们来看看这种情况是如何模拟的:

iptables -A OUTPUT -p tcp -m tcp --tcp-flags PSH PSH --sport 9090 -j DROP

细心的童鞋会发现,这里用到的flags 是PSH ,对,PSH的意思是控制信息是可以正常传送的,也就是说握手是正常成功的,然后传输数据的时候,我们限制了服务器无法给客户端传送数据内容,这样就模拟了连接是成功的,但是无法正常读取到服务端的数据的超时情况了

上面说的是最简单手动设置超时的方式,当然还有神器可以使用,接着就献上这款神器名叫netem,地址在

http://www.linuxfoundation.org/collaborate/workgroups/networking/netem

Network Emulation 有兴趣的童鞋可以前往研究。

Gerry

文章转自于小张网校博客

http://www.xiaozhangwx.com/blog/archives/73

阅读原文

简单几招模拟网络超时情况相关推荐

  1. 基于有限状态机在Unity3D中实现的简单搓招系统

    在诸如街霸.拳皇等格斗游戏中,搓招指的是玩家通过在短时间内连续输入特定的指令来释放角色的招式(比如右下右拳释放升龙拳) 那么如何通过状态机来实现搓招呢? 我们可以让每个招式都持有一个状态机,把这个招式 ...

  2. 安卓okhttp上传jason和图片_微信图片总是「已过期或被清理」?简单 3 招,可摆脱烦恼...

    微信图片总是「已过期或被清理」?简单 3 招可摆脱烦恼 除了文字.表格.PPT 和 PDF,大家日常办公中也常常和「图片文件」打交道. 于是,我们总碰到这样的问题: 1)图片文件太大,在线传输耗时,甲 ...

  3. 简单一招搞定公司牛人 转自 潘文富

    简单一招搞定公司牛人 潘文富 所谓公司牛人,就是在老板之下,众员工之上的人物.公司牛人,有的是凭借资历,有的是身居高位的职业经理人,有的是凭借自己在某方面的专业水平和经验,总之,有牛的资本. 这些牛人 ...

  4. 一支笔的测试点_一张纸一支笔,简单一招教你自测是否有眼底黄斑病变

    原标题:一张纸一支笔,简单一招教你自测是否有眼底黄斑病变 用眼过度.视力疲劳,紧张的工作或学习后,大多数人都容易出现眼前黑影.暗点,视力下降等情况.因为这些症状和"黄斑病"的早期症 ...

  5. 计算机如何永久删除文件无法找回,电脑文件永久性删除了怎么办?简单五招教你恢复...

    原标题:电脑文件永久性删除了怎么办?简单五招教你恢复 怎样算是将电脑中的文件彻底删除掉了?要说平常的文件删除工作,我们一般只会右键点击文件,然后选择删除,这样,在原本位置上就看不到该文件,但是说到底, ...

  6. u盘电视测试软件,智能电视安装软件无法识别U盘怎么办?简单几招教你搞定!...

    原标题:智能电视安装软件无法识别U盘怎么办?简单几招教你搞定! U盘是智能电视及网络机顶盒安装软件必备的工具,但是也经常会出现U盘插在智能设备上不识别的情况,那么针出现这类情况有哪些原因呢?又该如何解 ...

  7. 计算机桌面右键,电脑鼠标右键菜单太多了?简单几招帮你清理

    原标题:电脑鼠标右键菜单太多了?简单几招帮你清理 随着电脑中所安装的程序越来越多,右键菜单中的选项也都随着多了起来.这虽然说对我们使用电脑没有什么太大的影响,但是看着如此多的没用的右键菜单也是烦烦的, ...

  8. 智能电视老是无服务器,只需简单几招,轻松解决智能电视无法连接WIFI问题

    原标题:只需简单几招,轻松解决智能电视无法连接WIFI问题 看电视的时候,最痛苦的时候莫过于看到精彩情节的时候,网络不好,电视卡着不能播放,长时间无法恢复!如果网络很久没有恢复的话,也别太着急,小编这 ...

  9. 安卓手机反应慢又卡怎么办_手机变卡怎么办?简单一招叫教你解决!

    原标题:手机变卡怎么办?简单一招叫教你解决! 有很多人的手机永久了都会变得卡顿,有什么方法可以减少手机卡顿的问题呢,小编就来教你几招,让你可以在关键时刻轻松应对. 不常用的软件不仅会占用内存,还会拖慢 ...

最新文章

  1. MPU6050开发 -- Linux下测试
  2. OAF_开发系列19_实现OAF对话框提示dialogPage(案例)
  3. Gps经纬度转化关系
  4. 福昕高级PDF编辑器Mac版PDF编辑器注册机激活下载版
  5. 设计原则Python
  6. Git:版本控制控制软件
  7. 关于员工的选用任留,我们谈谈留人
  8. python 比对匹配_用Python从头实现Needleman-Wunsch序列比对算法
  9. python爬虫批量下载“简谱”
  10. 【转载】网络基础-华山论剑
  11. Unity 雨水滴到屏幕效果
  12. 6.28(HTML2)
  13. 清理软件CClearner
  14. 【人工智能实验】运用贝叶斯决策理论实现手写数字识别
  15. CSS: text-decoration
  16. 架构三要素:职责明确的模块或者组件、关联关系、约束和指导原则
  17. UILabel的使用
  18. android瀑布流布局源码,GitHub - dodola/android_waterfall: Android版的瀑布流布局
  19. Android TV开发 开源项目收集
  20. Android go app 安装包,GO谷歌安装器下载

热门文章

  1. 宝尊2018年第二季度GMV同比大幅增长69% 下半年GMV预期超200亿
  2. MATLAB 自然样条函数(Spline,非MATLAB内置函数)
  3. 频谱分析仪的来龙去脉
  4. 浙江大学计算机学院转博要求,关于2016年春季硕博连读(硕转博)有关事项的通知...
  5. Win10彻底禁用安全中心
  6. 2020CCPC威海 J.Steins;Game
  7. [Android Studio]Android 数据存储-文件存储学习笔记-结合保存QQ账户与密码存储到指定文件中的演练
  8. 程序员表情包来袭,已收藏! | 每日趣闻
  9. 4.有霍尔BLDC电机启动及堵转检测
  10. java接口自动化实战一(登录接口实现)