分类 默认分类 下的文章

TCP reset发送时机

  1. close的时候检查接收缓冲区是否有数据未读(不包括FIN包),如果有数据未读,并且SO_LINGER 时间为0,那么会发送reset包,而不是fin包。

  2. 当进程被直接kill时,会向对端发送reset包。

  3. 当接收到一个未曾建立连接的数据包时,会直接返回reset包。

  4. 尝试连接一个不存在的端口时候

当TCP连接的对端进程已经关闭了Socket的情况下,本端进程再发送数据时,第一包可以发送成功(但会导致对端发送一个RST包过来):
之后如果再继续发送数据会失败,错误码为“10053: An established connection was aborted by the software in your host machine”(Windows下)或“32: Broken pipe,同时收到SIGPIPE信号”(Linux下)错误;
之后如果接收数据,则Windows下会报10053的错误,而Linux下则收到正常关闭消息

如果可以从源码层面讲解下,会更好
http://blog.csdn.net/justlinux2010/article/details/20913755
上面的文章有分析到close的源码,可以看下什么时候发送reset

下面两篇文章有讲到一些问题。
http://lovestblog.cn/blog/2014/05/20/tcp-broken-pipe/

http://jeffchen.sinaapp.com/?p=776

管好你的服务器之防火墙篇

要管好你的服务器,装个防火墙是必须的。所谓防火墙,其实就是网络包过滤功能,在linux中由netfilteriptables组成。netfilter是内核的一部分,由一些包过滤规则表组成。内核会通过这些规则表来对流入和流出的包进行过滤和处理。iptables运行于用户空间,可以修改netfilter的过滤规则表,从而实现对网络包的流向控制。因此,iptables就是linux防火墙的关键部分了,咱们就来看看它的使用方法。

- 阅读剩余部分 -