计算机网络-tcp连接常见异常
计算机网络-tcp连接常见异常
- 目标端口未在监听:(操作系统参与)
解决:TCP的服务端实际上就是从网卡的寄存器中读取数据,然后进行解析。对于TCP自然会解析出目的端口这个关键信息,然后根据这个信息查看有没有这样的套接字。这个套接字是什么呢?在用户层面是一个文件句柄,但在内核中实际是一个数据结构,里面记录了很多信息。这个数据结构存储在一个哈希表中,通过函数__inet_lookup_skb(net/inet_hashtables.h)可以实现对该数据结构的查找。对于上述情况,自然无法找到该套接字,因此TCP服务端会进行错误处理,处理的方式就是给客户端发送一个RST(通过函数tcp_v4_send_reset进行发送),告诉客户端发生错误。可以通过抓包来分析理解。
常见返回:[Errno 111] Connection refused(连接拒绝) - 目标主机不存在:(自己的超时计时器)
这也是一种比较常见的情况,当某台服务器主机宕机了,而客户端并不知道,仍然尝试去与其建立连接。这个时候由于宕机,操作系统帮不上忙,服务器处于一种完全没有响应的状态。那么此时客户端的TCP会怎么办呢?最多重传默认为6次,每一次时间间隔都不一样,而后仍未收到响应就会返回ETIMEDOUT错误。这是TCP建立连接自己的一个保护机制,但是我们要等待75s才能知道这个连接无法建立,对于我们所有服务来说都太长了。更好的做法是在代码中给connect设置一个超时时间。
- Server进程被阻塞:
由于某些情况,服务器端进程无法响应任何请求,比如所在主机的硬盘满了,导致进程处于完全阻塞,通常我们测试时会用gdb模拟这种情况。上面提到过,建立连接的过程对应用程序是不可见的,那么,这时连接可以正常建立。当然,客户端进程也可以通过这个连接给服务器端发送请求,服务器端TCP会应答ACK表示已经收到这个分节(这里的收到指的是数据已经在内核的缓冲区里准备好,由于进程被阻塞,无法将数据从内核的缓冲区复制到应用程序的缓冲区),但永远不会返回结果。
- Server进程暂时关闭:
这是线上最常见的操作,当一个模块上线时,OP同学总是会先把旧的进程杀死,然后再启动新的进程。那么在这个过程中TCP连接发生了什么呢。在进程正常退出时会自动调用close函数来关闭它所打开的文件描述符,这相当于服务器端来主动关闭连接——会发送一个FIN分节给客户端TCP;客户端要做的就是配合对端关闭连接,TCP会自动响应一个ACK,然后再由客户端应用程序调用close函数,也就是我们上面所描述的关闭连接的4次挥手过程。接下来,客户端还需要定时去重连,以便当服务器端进程重新启动好时客户端能够继续与之通信。
- 通信的过程中服务器端宕机:
客户端向服务器端发送分节,由于服务器端宕机,不会有任何响应,客户端持续重传,然而服务器始终不能应答,重传数次之后,大约4~10分钟才停止,之后返回一个ETIMEDOUT错误。
计算机网络-tcp连接常见异常相关推荐
- 计算机网络知识详解之:TCP连接原理详解
网络知识详解之:TCP连接原理详解 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名 ...
- python如何判断tcp异常断开_如何判断TCP连接已经中断?
用Python写网络应用是很常见的,因此一个常见的问题就是,如何在Python代码中判断TCP链接已经中断? TCP有连接,如果通讯的某一方中断的连接,另外一方在socket层面如何感知?这个问题我也 ...
- 【计算机网络】传输层 : TCP 连接管理 ( TCP 连接建立 | 三次握手 | TCP 连接释放 | 四次挥手 )
文章目录 一.TCP 连接管理 二.TCP 连接建立 三.TCP 连接建立 相关报文段 字段 四.SYN 洪泛攻击 五.TCP 连接释放 一.TCP 连接管理 TCP 传输数据过程 : 建立连接 -& ...
- TCP连接中的异常情况
TCP 保活机制( keepalive)可以在双方没有数据交互的情况,通过探测报文,来确定对方的 TCP 连接是否存活. 无数据交互的情况下的异常[主机崩溃|进程崩溃]: 1在没有开启 TCP kee ...
- 记一次TCP连接异常故障解决
为什么80%的码农都做不了架构师?>>> 一.情况表现为 1.在公司内网对站点的http访问: linux主机出现故障:curl以及抓包分析,发现服务端不响应linux客户端的 ...
- [计算机网络] - TCP半连接队列和全连接队列
转载自:https://blog.csdn.net/qq_34827674/article/details/106448326 1. 概念 在 TCP 三次握手的时候,Linux 内核会维护两个队列, ...
- java如何处理tcp异常断开_(转)TCP连接异常断开检测
TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现.某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接.下面介绍一种方法来检测这种异常断 ...
- 消息队列一直建立tcp连接_云架构那些事儿:为什么我的TCP连接建立异常?
搞IT的同学无论是做开发的.做测试的.做运维的一定都遇到过以下几种报错,导致服务调用失败: connection timeout read timeout connection reset by pe ...
- 计算机网络中TCP连接管理,计算机网络 TCP协议
TCP:面向连接的运输 TCP协议是面向连接的协议,把连接作为最基本的抽象.每一条TCP连接唯一的被通信两端的两个端点所确定.TCP协议是点对点,而不是点对多点.端点又被称为套接字,TCP协议规定,I ...
最新文章
- log4cxx第三篇----使用多个logger
- simplexmlelement类设置编码_超3.6万条!全国通用的医用耗材编码标准来了
- 【2021年度训练联盟热身训练赛第二场】Soccer Standings(python)
- RPC框架原理及从零实现系列博客(二):11个类实现简单RPC框架
- 修改wamp的apache默认端口80为8088以及www目录
- 【渝粤教育】国家开放大学2019年春季 2114人体解剖生理学 参考试题
- jq 点击事件 调用
- Python第二天(字典)
- Virtual TreeView使用示例
- Adobe DreamweaverCS4 beta+可用序列号,FireworkCS4 beta及SoundboothCS4 beta 官方下载地址...
- C#/winform 旅游管理信息系统
- matlab2010b显示激活界面_【转】Matlab2010b许可证过期问题,反复提示激活
- 云MAS中CMPP3.0协议封装与移动短信状态报告状态码说明
- 校园导航系统课程设计,#校园管理系统
- ionic的用法和作用
- 哈工程转专业计算机,2021年哈尔滨工程大学大一新生转专业及入学考试相关规定...
- 高精度反正切函数的实现
- C语言经典一百题(六)用*号输出字母C的图案。
- QColor类的使用
- 和风天气预报AndroidAPP-安卓(包含功能:天气预报-备忘录-高德地图定位-日历)