几种tcp连接中出现rst的情况( 比较详细)

几种tcp连接中出现rst的情况( 比较详细)

ID:13618279

大小:268.84 KB

页数:13页

时间:2018-07-23

几种tcp连接中出现rst的情况( 比较详细)_第1页
几种tcp连接中出现rst的情况( 比较详细)_第2页
几种tcp连接中出现rst的情况( 比较详细)_第3页
几种tcp连接中出现rst的情况( 比较详细)_第4页
几种tcp连接中出现rst的情况( 比较详细)_第5页
资源描述:

《几种tcp连接中出现rst的情况( 比较详细)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、几种TCP连接中出现RST的情况(比较详细)收藏人:hh37552013-07-02 

2、 阅:4725  转:16   

3、   来源  

4、  分享  几种TCP连接中出现RST的情况17人收藏此文章, 我要收藏发表于1个月前(2013-05-0411:40),已有314次阅读,共0个评论目录:[ - ]·1端口未打开·2请求超时·3提前关闭·4在一个已关闭的socket上收到数据·总结·参考文献:应该没有人会质疑,现在是一个网络时代了。应该不少程序员在编程中需要考虑多机、局域网、广域网的各种问题。所以网络知识也是避免不了学习的。而且笔者一直觉得TCP/IP网络知识在一个程序员知识体系

5、中必需占有一席之地的。在TCP协议中RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。其实在网络编程过程中,各种RST错误其实是比较难排查和找到原因的。下面我列出几种会出现RST的情况。1端口未打开服务器程序端口未打开而客户端来连接。这种情况是最为常见和好理解的一种了。去telnet一个未打开的TCP的端口可能会出现这种错误。这个和操作系统的实现有关。在某些情况下,操作系统也会完全不理会这些发到未打开端口请求。比如在下面这种情况下,主

6、机241向主机114发送一个SYN请求,表示想要连接主机114的40000端口,但是主机114上根本没有打开40000这个端口,于是就向主机241发送了一个RST。这种情况很常见。特别是服务器程序coredump之后重启之前连续出现RST的情况会经常发生。当然在某些操作系统的主机上,未必是这样的表现。比如向一台WINDOWS7的主机发送一个连接不存在的端口的请求,这台主机就不会回应。2请求超时曾经遇到过这样一个情况:一个客户端连接服务器,connect返回-1并且error=EINPROGRESS。直接telnet发现网络连接没有问题。ping没有出现丢包。用抓包工具查看,客户端是在

7、收到服务器发出的SYN之后就莫名其妙的发送了RST。比如像下面这样:有89、27两台主机。主机89向主机27发送了一个SYN,表示希望连接8888端口,主机27回应了主机89一个SYN表示可以连接。但是主机27却很不友好,莫名其妙的发送了一个RST表示我不想连接你了。后来经过排查发现,在主机89上的程序在建立了socket之后,用setsockopt的SO_RCVTIMEO选项设置了recv的超时时间为100ms。而我们看上面的抓包结果表示,从主机89发出SYN到接收SYN的时间多达110ms。(从15:01:27.799961到15:01:27.961886,小数点之后的单位是微秒

8、)。因此主机89上的程序认为接收超时,所以发送了RST拒绝进一步发送数据。3提前关闭关于TCP,我想我们在教科书里都读到过一句话,'TCP是一种可靠的连接'。而这可靠有这样一种含义,那就是操作系统接收到的来自TCP连接中的每一个字节,我都会让应用程序接收到。如果应用程序不接收怎么办?你猜对了,RST。看两段程序:01//server.c0203int main(int argc, char**argv) 04{ 05    int listen_fd,real_fd; 06    struct sockaddr_inlisten_addr,client_addr; 07    soc

9、klen_tlen= sizeof(struct sockaddr_in); 08    listen_fd=socket(AF_INET,SOCK_STREAM,0); 09    if(listen_fd==-1) 10    { 11        perror("socketfailed  "); 12        return -1; 13    } 14    bzero(&listen_addr,sizeof(listen_addr)); 15    listen_addr.sin_family=AF_INET; 16    listen_addr.sin_addr.

10、s_addr=htonl(INADDR_ANY); 17    listen_addr.sin_port=htons(SERV_PORT); 18    bind(listen_fd,(struct sockaddr*)&listen_addr,len); 19    listen(listen_fd,WAIT_COUNT); 20    while(1) 21    { 22        real_fd=accept(listen_fd,(struct

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。