TCP连接的几种异常情况

  • TIME_WAIT作用:
    1、若是LAST_ACK丢失(丢失的周期1个TTL),需要重新发送FIN;
    2、防止同ip和port过早复用连接,导致收到上一个连接的数据。

  • EINTR
    accept、read等慢系统调用,在挂起的过程中,若是进程收到信号,则此挂起系统调用可能返回 EINTR

  • tcp建立连接中涉及2个队列:一个已经完成连接队列(ESTABLISHED),一个未完成连接队列(SYN_RCVD)

  • 服务端accept返回前中止,三次握手刚刚完成,服务端阻塞于accept,此时客户却发送了一个RST,此时accept会返回错误ECONNECTABORT或EPROTO

  • 服务进程中止,
    服务进程中止,内核会关闭其sock,则会向客户端发送一个FIN,并收到客户端的ACK。此时再向客户端sock发送数据,数据到达服务端时,内核发现其接收进程已经不存在,故返回客户进程一个RST。一般客户调用write后,立即调用read。若read在收到RST之前返回,则read返回值为EOF;若read在收到RST之后返回,则read返回错误ECONNREST

  • SIGPIPE,
    若向已经接收到RST的sock继续写入数据,则内核会向该进程发送一个SIGPIPE信号,该信号默认为中止进程。且写操作返回错误EPIPE

  • 服务器主机崩溃
    若是到达主机,所在局域网,则12min后read返回ETIMEOUT,若在中间路由器不可达,则read返回EHOSTUNREACH或ENETUNREACH

  • 服务器主机崩溃后重启
    客户端在服务器奔溃后重启后再发送数据时,会收到一个RST,则read返回ECONNREST

  • 服务器主机主动关机
    linux关机时,init首先会给所有进程发送 SIGTERM(可捕捉)信号,等待一段时间后,然后向仍在运行的进程发送SIGKILL(不可捕捉),则收到信号的进程都会关闭sock。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP是一种面向连接的可靠传输协议,通常在客户端和服务器之间建立一条持久的连接。然而,由于网络环境的不稳定性或服务器故障等原因,客户端有时可能会断开与服务器的连接。为保持通信的连续性,客户端需要进行断线重连。 在TCP客户端断线后,重连的步骤如下: 1. 检测断线:客户端首先需要检测与服务器的连接是否断开。一旦检测到断线,客户端将无法通过连接发送或接收数据。 2. 关闭旧连接:客户端需要主动关闭旧的、断开的连接。这样可以释放资源并准备建立新的连接。 3. 重新建立连接:客户端会尝试重新建立连接。它会根据服务器地址和端口号,使用TCP握手协议与服务器建立连接。 4. 连接超时处理:如果客户端无法在一定时间内重新建立连接,可能是服务器未启动、网络故障或网络拥塞等原因。客户端需要进行连接超时处理,可以选择等待一段时间再重新尝试连接。 5. 连接成功后的处理:一旦客户端成功重新建立连接,它可以恢复之前的通信或重新发送之前未发送成功的数据。这样可以保证数据的完整性和连续性。 在进行断线重连时,需要注意以下几点: 1. 定时重连:客户端可以定期尝试重连,避免频繁的连接尝试对服务器造成负载过大的影响。 2. 连接优化:客户端可以在重连时优化连接参数,例如调整超时时间、重试次数等。这样可以提高连接的成功率和重连的效率。 3. 异常处理:客户端在进行断线重连时,需要处理可能出现的异常情况。例如,当网络不稳定导致重连失败时,客户端需要进行错误处理,并通知用户或记录日志。 通过断线重连机制,TCP客户端可以在意外断开连接的情况下,及时恢复与服务器的连接,确保数据的正常传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值