TCP网络编程中RST分节总结
来源:互联网 发布:plc模拟仿真软件 编辑:程序博客网 时间:2024/06/01 09:32
RST为“复位”,它是TCP在某些错误情况下所发出的一种TCP分节。
有三个条件可以产生RST:
1), SYN到达某端口但此端口上没有正在监听的服务器。
2), TCP想取消一个已有连接
3), TCP接收了一个根本不存在的连接上的分节。
1. connect
函数返回错误ECONNREFUSED:
如果对客户的SYN的响应是RST,则表明该服务器主机在我们指定的端口上没有进程在等待与之连接(例如服务器进程也许没有启动),这称为硬错(hard error),客户一接收到RST,马上就返回错误ECONNREFUSED.
TCP为监听套接口维护两个队列。两个队列之和不超过listen函数第二个参数backlog。
当一个客户SYN到达时,若两个队列都是满的,TCP就忽略此分节,且不发送RST.这个因为:这种情况是暂时的,客户TCP将重发SYN,期望不久就能在队列中找到空闲条目。要是TCP服务器发送了一个RST,客户connect函数将立即发送一个错误,强制应用进程处理这种情况,而不是让TCP正常的重传机制来处理。还有,客户区别不了这两种情况:作为SYN的响应,意为“此端口上没有服务器”的RST和意为“有服务器在此端口上但其队列满”的RST.
有以下两种处理方法:忽略新的SYN,或为此SYN响应一个RST。
2.往一个对端已经关闭的套接字上写入数据会收到一个RST信号。
如果此时不判断read , write函数的返回值,就不知道服务器是否响应了RST, 此时客户端如果向接收了RST的套接口进行写操作时,内核给该进程发一个SIGPIPE信号。此信号的缺省行为就是终止进程,所以,进程必须捕获它以免被终止。
3. 服务器主机崩溃后重启
如果服务器主机与客户端建立连接后崩溃,如果此时,客户端向服务器发送数据,而服务器已经崩溃不能响应客户端ACK,客户TCP将持续重传数据分节,试图从服务器上接收一个ACK,如果服务器一直崩溃客户端会发现服务器已经崩溃或目的地不可达,但可能需要比较长的时间; 如果服务器在客户端发现崩溃前重启,服务器的TCP丢失了崩溃前的所有连接信息,所以服务器TCP对接收的客户数据分节以RST响应。
- TCP网络编程中RST分节总结
- UNIX网络编程中RST分节总结
- UNIX网络编程中RST分节
- TCP的RST分节解析
- TCP 发送RST分节的情况,关闭时 recv buffer 不为空,则发送RST分节
- tcp rst
- TCP RST
- TCP连接中出现RST的情况
- UNIX网络编程——产生RST
- UNIX网络编程——产生RST
- 网络编程Socket之RST详解
- 网络编程总结TCP、UDP、URL编程
- linux网络编程中tcp
- 网络编程总结以及TCP与UDP
- 网络编程之---TCP/IP UDP总结
- 网络编程TCP&UDP基础总结
- 基于TCP,UDP的网络编程总结
- 网络编程_网络编程、UDP、TCP总结
- 【5】Hibernate的主键生成策略
- JavaScript实用的代码段
- 在Ubuntu下安装搜狗输入法
- 基于DataX3.0将MySQL中的数据同步到Oracle
- python学习手册(4)
- TCP网络编程中RST分节总结
- phpcms路由模式自定义访问路径
- 纯字符串assemble和parser比较,fastjson 比 json要至少慢5倍
- 毕业5年决定人的一生
- 公司内部邮箱服务器发送邮件 java版
- POJ 2157 Maze
- 【数据挖掘案例实践】Loan Status
- 有关I/O流的一些小程序
- 学习data mining的7个步骤