计算机网络-tcp连接常见异常

  1. 目标端口未在监听:(操作系统参与)
    解决:TCP的服务端实际上就是从网卡的寄存器中读取数据,然后进行解析。对于TCP自然会解析出目的端口这个关键信息,然后根据这个信息查看有没有这样的套接字。这个套接字是什么呢?在用户层面是一个文件句柄,但在内核中实际是一个数据结构,里面记录了很多信息。这个数据结构存储在一个哈希表中,通过函数__inet_lookup_skb(net/inet_hashtables.h)可以实现对该数据结构的查找。对于上述情况,自然无法找到该套接字,因此TCP服务端会进行错误处理,处理的方式就是给客户端发送一个RST(通过函数tcp_v4_send_reset进行发送),告诉客户端发生错误。可以通过抓包来分析理解。
    常见返回:[Errno 111] Connection refused(连接拒绝)
  2. 目标主机不存在:(自己的超时计时器)
    这也是一种比较常见的情况,当某台服务器主机宕机了,而客户端并不知道,仍然尝试去与其建立连接。这个时候由于宕机,操作系统帮不上忙,服务器处于一种完全没有响应的状态。那么此时客户端的TCP会怎么办呢?最多重传默认为6次,每一次时间间隔都不一样,而后仍未收到响应就会返回ETIMEDOUT错误。这是TCP建立连接自己的一个保护机制,但是我们要等待75s才能知道这个连接无法建立,对于我们所有服务来说都太长了。更好的做法是在代码中给connect设置一个超时时间。
  3. Server进程被阻塞:
    由于某些情况,服务器端进程无法响应任何请求,比如所在主机的硬盘满了,导致进程处于完全阻塞,通常我们测试时会用gdb模拟这种情况。上面提到过,建立连接的过程对应用程序是不可见的,那么,这时连接可以正常建立。当然,客户端进程也可以通过这个连接给服务器端发送请求,服务器端TCP会应答ACK表示已经收到这个分节(这里的收到指的是数据已经在内核的缓冲区里准备好,由于进程被阻塞,无法将数据从内核的缓冲区复制到应用程序的缓冲区),但永远不会返回结果。
  4. Server进程暂时关闭:
    这是线上最常见的操作,当一个模块上线时,OP同学总是会先把旧的进程杀死,然后再启动新的进程。那么在这个过程中TCP连接发生了什么呢。在进程正常退出时会自动调用close函数来关闭它所打开的文件描述符,这相当于服务器端来主动关闭连接——会发送一个FIN分节给客户端TCP;客户端要做的就是配合对端关闭连接,TCP会自动响应一个ACK,然后再由客户端应用程序调用close函数,也就是我们上面所描述的关闭连接的4次挥手过程。接下来,客户端还需要定时去重连,以便当服务器端进程重新启动好时客户端能够继续与之通信。
  5. 通信的过程中服务器端宕机:
    客户端向服务器端发送分节,由于服务器端宕机,不会有任何响应,客户端持续重传,然而服务器始终不能应答,重传数次之后,大约4~10分钟才停止,之后返回一个ETIMEDOUT错误。

计算机网络-tcp连接常见异常相关推荐

  1. 计算机网络知识详解之:TCP连接原理详解

    网络知识详解之:TCP连接原理详解 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名 ...

  2. python如何判断tcp异常断开_如何判断TCP连接已经中断?

    用Python写网络应用是很常见的,因此一个常见的问题就是,如何在Python代码中判断TCP链接已经中断? TCP有连接,如果通讯的某一方中断的连接,另外一方在socket层面如何感知?这个问题我也 ...

  3. 【计算机网络】传输层 : TCP 连接管理 ( TCP 连接建立 | 三次握手 | TCP 连接释放 | 四次挥手 )

    文章目录 一.TCP 连接管理 二.TCP 连接建立 三.TCP 连接建立 相关报文段 字段 四.SYN 洪泛攻击 五.TCP 连接释放 一.TCP 连接管理 TCP 传输数据过程 : 建立连接 -& ...

  4. TCP连接中的异常情况

    TCP 保活机制( keepalive)可以在双方没有数据交互的情况,通过探测报文,来确定对方的 TCP 连接是否存活. 无数据交互的情况下的异常[主机崩溃|进程崩溃]: 1在没有开启 TCP kee ...

  5. 记一次TCP连接异常故障解决

    为什么80%的码农都做不了架构师?>>>    一.情况表现为 1.在公司内网对站点的http访问: linux主机出现故障:curl以及抓包分析,发现服务端不响应linux客户端的 ...

  6. [计算机网络] - TCP半连接队列和全连接队列

    转载自:https://blog.csdn.net/qq_34827674/article/details/106448326 1. 概念 在 TCP 三次握手的时候,Linux 内核会维护两个队列, ...

  7. java如何处理tcp异常断开_(转)TCP连接异常断开检测

    TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现.某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接.下面介绍一种方法来检测这种异常断 ...

  8. 消息队列一直建立tcp连接_云架构那些事儿:为什么我的TCP连接建立异常?

    搞IT的同学无论是做开发的.做测试的.做运维的一定都遇到过以下几种报错,导致服务调用失败: connection timeout read timeout connection reset by pe ...

  9. 计算机网络中TCP连接管理,计算机网络 TCP协议

    TCP:面向连接的运输 TCP协议是面向连接的协议,把连接作为最基本的抽象.每一条TCP连接唯一的被通信两端的两个端点所确定.TCP协议是点对点,而不是点对多点.端点又被称为套接字,TCP协议规定,I ...

最新文章

  1. log4cxx第三篇----使用多个logger
  2. simplexmlelement类设置编码_超3.6万条!全国通用的医用耗材编码标准来了
  3. 【2021年度训练联盟热身训练赛第二场】Soccer Standings(python)
  4. RPC框架原理及从零实现系列博客(二):11个类实现简单RPC框架
  5. 修改wamp的apache默认端口80为8088以及www目录
  6. 【渝粤教育】国家开放大学2019年春季 2114人体解剖生理学 参考试题
  7. jq 点击事件 调用
  8. Python第二天(字典)
  9. Virtual TreeView使用示例
  10. Adobe DreamweaverCS4 beta+可用序列号,FireworkCS4 beta及SoundboothCS4 beta 官方下载地址...
  11. C#/winform 旅游管理信息系统
  12. matlab2010b显示激活界面_【转】Matlab2010b许可证过期问题,反复提示激活
  13. 云MAS中CMPP3.0协议封装与移动短信状态报告状态码说明
  14. 校园导航系统课程设计,#校园管理系统
  15. ionic的用法和作用
  16. 哈工程转专业计算机,2021年哈尔滨工程大学大一新生转专业及入学考试相关规定...
  17. 高精度反正切函数的实现
  18. C语言经典一百题(六)用*号输出字母C的图案。
  19. QColor类的使用
  20. 和风天气预报AndroidAPP-安卓(包含功能:天气预报-备忘录-高德地图定位-日历)

热门文章

  1. 扫码点餐小程序源码 多商户外卖点餐自助扫码预约源码
  2. 设计算法,在1~9这九个数之间添加任意加减乘除号,使之等于100
  3. 在 Excel 中如何对数字进行乘除
  4. 为什么我要在2018年学习Python?
  5. 基于Leaflet实现图标旋转角度的效果(附源代码下载)
  6. vuedraggable实现组件拖拽,页面生成器?
  7. 查看交换机的MAC地址
  8. CC2640之CCS编译器安装及更新
  9. CSDN APP发布富文本、MarkDown编辑器;社区动态支持快转……【2022.1.19】
  10. “非主流”的纯前端性能优化