问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

socket通信一般在用于哪里

发布网友 发布时间:2022-04-22 05:46

我来回答

1个回答

热心网友 时间:2023-09-03 01:35

从tcp socket通讯原理可以看到,在连接断开“四次挥手”过程中,只有被动close的一方才会出现CLOSE_WAIT和LAST_ACK,或者说如果发起close动作的看作client端,那出现CLOSE_WAIT和LAST_ACK就是server端。只要收到client端发出FIN包,server端就是CLOSE_WAIT状态,这个状态意味着可能在关闭连接之前还有许多数据要发送,如果没有数据要发送,那server就要回复一个FIN给cilent,然后server端就变成LAST_ACK,client收到server的FIN包后,正常会立即回复ACK,server只要收到ACK后连接就断开了。下面我们结合案例谈谈CLOSE_WAIT和LAST_ACK。

案例分析:
某系统的应用支持人员反馈,文件传输服务14029端口异常,业务被堵塞。我们登入系统检查,除文件传输服务交易处理缓慢,其他类型的交易均未受影响,也就是说该服务器有多个对外服务端口,只有一个端口异常。与应用开发人员沟通过后,反馈应用没有实施过变更。同时应用开发人员反映这类业务全部是从公网接入的,我们登入F5设备,将公网接入业务渐出后,交易并发请求量下降,文件传输服务端口堵塞现象逐渐缓解,但从F5重新渐入公网业务后,问题重现。
从异常时收集的数据分析,14029服务端口约有3000个连接,其中大多数连接处于CLOSE_WAIT和LAST_ACK状态。这么多的CLOSE_WAIT和LAST_ACK说明通讯阶段肯定不正常,看到这里,大家都怀疑问题出现网络层面了吧,这里先不回答,先结合上面介绍的TCP原理中的CLOSE_WAIT和LAST_ACK思考一下,现在问题仅反映出大量CLOSE_WAIT和LAST_ACK,连接建立阶段未出现异常,说明什么呢?继续查看网络通讯报文。异常时段的网络报文如下:

从网络报文看,连接释放前大致正常,为什么说大致正常,client和server有来有往,也无重传等异常现象,但是,交互一次经常有20多秒,所以只能说大致正常。在一笔交易完成后,开始断开连接,问题出现了,client端发出了FIN包,server立刻回复ACK,然后经过20多秒的等待后,又发送了长度为7的数据,再回复了FIN包,然后出现网络重传FIN包。
对于网络重传,乍一看以为是网络通讯丢包,但仔细一推敲,其他时间不丢包,为什么只在连接释放阶段丢包,没有道理啊。就此,我们和网络技术专家进行了沟通,得到的答复是:在通讯阶段,大量客户端超时发出连接关闭请求,也就是client发出了FIN包,server端服务进程处理超时未能及时响应关闭连接请求,超过10秒触发防火墙安全保护机制,连接关闭应答包(FIN)被防火墙抛弃,以至于出现大量FIN包重传的现象。答复就是说网络没问题,是应用程序超时了。
网络丢包问题排除了,那么问题可能就出在了应用程序上了,但应用程序的问题在哪里呢?我们回顾了前面的整个分析过程,有两个疑点和应用相关,一是通讯报文中客户端和服务端两端交互延时很大,经常出现20多秒时差;二是大量客户端发出断链请求。带着疑问,我们和应用开发人员进行沟通,进一步了解了交易的整个流程,很快第二个疑点就明确了,正常情况下,交易都是由农行端关闭,不会由公网客户端关闭,除非交易超时,从现象上看肯定出现了大量的客户端交易超时。同时从应用开发人员提供的交易流程分析,每一笔交易,分8次输出日志,也就是说一笔交易记录8次日志,对日志文件操作了8次。既然应用分步记录日志,那日志肯定能反映交易每一步的时间差,也就是说交易超时应用日志中能直接看出来。打开日志文件,发现日志文件中几乎很难看一笔完整的、顺序的日志,这是由于应用进程池多个进程并行写日志所致。这么重要的线索,怎么能随便放弃。为此我们根据日志中的时间戳以及进程号的规律专门编写了一个脚本负责遍历和排序近一周的应用日志,几个小时后,令人振奋的结果出来了,排序后的日志对每一笔交易时间记录很详细,大多数时间,每一笔交易都在一秒内完成,一到交易高峰,交易时间开始延迟,短的延迟2~3秒,长的延迟几十秒甚至上百秒,从日志可以推断出这个问题一直存在,只是反映出来程度轻重不同而已。
分析到这一步,应该是明确了应用程序存在问题,但应用程序的问题究竟是什么呢?有了方向,我们在业务高峰针对应用进程开启了truss跟踪,truss对交易的过程和底层调用非常详细记录如下:
交易*有8次对于该日志的写入,以其中一次日志文件操作过程(kopen-kwrite-close)为例,其耗时达到1.1s以上。一笔交易完成,时间基本耗费都在10多秒。同时段,还有其他多个14029端口相关进程对于此日志并发操作,引起整笔中绝大多数都在进行该日志文件操作。从Truss信息中可以看到交易打开日志还是采用同步方式。

35782920: 48955803: 0.1007: kfork() = 18874542
18874542: kfork() (returning as child ...) = 0
18874542: 31785117: 0.1086: _getpid() = 18874542
35782920: 48955803: 0.1088: semget(1674622889, 1, 0)18874542: 31785117: 0.1088: thread_setmystate(0x00000000, 0x2FF21920) = 300942464 = 0
18874542: 31785117: 0.1091: _thread_self() = 31785117
18874542: 31785117: 0.1094: thread_setmystate(0x2FF21608, 0x2FF21910) = 0
18874542: 31785117: 0.1096: thread_setmymask_fast(0x00000000, 0x00000000, 0x00000000, 0xD051C880, 0x00000000, 0x11E5009D, 0x11E5009D, 0xF0256118) = 0x0000
0000
18874542: 31785117: 0.1104: thread_unlock(0x2003F750) = 0
18874542: 31785117: 8.0003: kopen("/ho22938062: 44761355: 8.0009: kopen("/home/beics/log/Fil = 83997862: 75104323: 8.0018: kopen
= 0 = 8 = 917170888: 63897901: 8.0034: close(9)16849568808: 53805667: 8.0037: kopen("/home/beics/log/FileSvr.20140604", O_RDWR|O_SYNC|O_APPE
= 0 = 9 = 932965182: 51970655: 8.0039: kopen("/home/beics/log/FileSvr.20140604", O_RDWR|O_SYNC|O_APPEND)35521118: 45220353: 8.0065: kopen("/home/b
eics/log/FileSvr.20140604", O_RDWR|O_SYNC|O_APPEND) = 8 = 98454202: 21954581: 8.0049: kopen("/home/beics/log/FileSvr.20140604", O_RDWR|O_SYNC|O_APPEND) = 91
5991212: 14877101: 8.0080: _erecv(7, 0x2FF21630, 7, 256, 0x00000000) = 76488658: 81134209: kwrite(8, 0x2FF208C4, 56) = 56
18874542: 31785117: kwrite(8, 0x2FF20B14, 53) = 53
18874542: [ 1 6 : 2 3 : 0 4 | 0 0 1 8 8 7 4 5 4 2 | ] ????[ 1 0 . *
18874542: . *. * ] ??????: Q U I T\n

分析到这里,相信大家知道怎么回事了,truss中多个线程并行操作,时间延迟了,信息都是乱的。所以,经过最终分析结论如下:由于交易过于频繁的、且使用同步方式对一个日志文件进行打开和写入操作,而这些文件操作都是串行操作,交易之间相互竞争记录日志,导致交易处理时间延长、处理效率下降。至于异常时系统层面看到的大量CLOSE_WAIT 和LAST_ACK,应该比较好理解,由于交易进程处理变慢,服务端接收到客户端发出的FIN包仍然在发送数据(响应前面的请求)所致,所以能看到很多CLOSE_WAIT;而LAST_ACK状态,是由于交易超时情况下,触发了防火墙安全机制,服务端回复的FIN被丢弃所致。

解决方案及建议:
应用开发人员在我们的建议下,对应用程序进行了优化,将打开文件方式改成异步方式,并改进了日志记录方法,每笔交易分步记入日志改成先缓冲、交易完成后一次性记入日志文件方式,降低操作日志文件的频率,减少文件操作竞争。优化完成后,该问题彻底解决。
socket通讯异常问题排查和处置难度大,系统层和应用层都也难以快速进行应急处置。建议架构上尽量采用集群模式,实现应用负载均衡,有效地规避应用"单点"风险,提升应用的高可用性。
对于自行开发的socket通讯系统,应用与TCP通讯关联紧密,异常处理机制都依赖应用实现,要详尽考虑外部环境的各种复杂异常情况,确实是非常困难的事情,就如一些业内经验丰富开发人员所说的,标准的socket通讯程序,3分功能代码,7分异常处置,如果缺乏这份决心,建议还是采用比较成熟的通讯中间件产品来实现通讯处理。
socket是什么

Socket通信可以使用不同的协议,如TCP、UDP等。其中,TCP协议是一种可靠的协议,保证数据传输的完整性和可靠性,通常用于重要数据的传输。而UDP协议则是一种不可靠的协议,传输速度更快,但可能会存在数据丢失或冗余。Socket技术被广泛应用于各种网络应用程序的开发和实现,如Web服务器、聊天软件、网络游戏...

如何对光传输设备进行调试和维护?

对光传输设备进行调试和维护,需要掌握以下关键点:1. **熟悉设备性能**:深入了解OTN/DWDM等光传输产品的性能特点,确保能够熟练使用设备。2. **按规范操作**:依据产品说明书和维护手册进行调试和维护,确保操作步骤正确无误。3. **故障排查**:掌握常见故障现象及处理方法,能够迅速定位问题并进行修复。4. **性能监测**:定期监测设备性能指标,确保设备运行状态良好,及时发现并解决潜在问题。5. **专业培训**:参与相关培训,不断提升自身技能水平,以更好地应对各种挑战。通过以上措施,可以确保光传输设备的稳定运行,提升网络可靠性和智能…对光传输设备进行调试和维护需要掌握一定的专业知识和技术,包括光功率计、光谱分析仪等测试仪器的使用,以及对光传输系统的工作原理和性能指标的深入理解。深圳市光派通信技术有限公司提供专业的技术支持和服务,可为客户提供全面的光传输设备...

socket是什么

Socket是一种网络通信的接口。以下是详细的解释:1. Socket的基本定义 Socket,常被翻译为“套接字”,是计算机网络中用于实现进程间通信的一种机制。它提供了一个通信的端点,使得不同设备或同一设备上的不同进程可以进行数据交换。在网络编程中,Socket常被用来实现诸如TCP/IP协议等网络通信协议。2. S...

socket是什么

Socket是一种网络通信协议的接口。以下是详细的解释:1. Socket的基本定义 Socket,通常被称作“套接字”,是计算机网络中用于实现进程间通信的一种机制。它提供了一个通信的端点,使得不同设备或同一设备上的不同进程能够进行数据交换。在网络编程中,Socket被广泛用于实现如TCP/IP等网络通信协议。2. So...

socket是什么

socket是用于在两个基于TCP/IP协议的应用程序之间相互通信。最早出现在UNIX系统中,是UNIX系统主要的信息传递方式。在WINDOWS系统中,SOCKET称为WINSOCK。socket(也叫套接字)最初是在Unix系统上开发的网络通信的接口。后来微软等公司将它移植到了windows下,当然原来unix系统下的还是好用的。对于socket可以这...

socket通信一般在用于哪里

从tcp socket通讯原理可以看到,在连接断开“四次挥手”过程中,只有被动close的一方才会出现CLOSE_WAIT和LAST_ACK,或者说如果发起close动作的看作client端,那出现CLOSE_WAIT和LAST_ACK就是server端。只要收到client端发出FIN包,server端就是CLOSE_WAIT状态,这个状态意味着可能在关闭连接之前还有许多数据要发送,如果没有数...

socket和http区别

Socket和HTTP是两种不同的网络通信协议,它们在以下方面存在明显的区别:1. 通信方式:Socket是一种基于客户端-服务器模式的底层通信协议,而HTTP则是一种基于传输层协议的互联网协议。2. 数据传输:Socket主要用于数据的直接传输,适用于高速实时通信场景,而HTTP则基于TCP/IP协议,通过代理服务器进行数据...

socket 到底是个啥

深入解析socket的真正含义,揭开其神秘面纱。在面试中,socket通常被解读为套接字,用于连接不同主机程序间的网络通信。其实,我们可以用更加直观的方式来理解socket。想象一下给手机充电的情景,充电插头插入电源插座,插座与插头建立了连接。在计算机世界中,socket连接的是两台电脑中的进程,如微信进程之间...

socket是什么

在网络通信中,每一台计算机都有一个IP地址,这是网络中的唯一标识。而Socket则提供了一个具体的地址和端口号,用于标识这台计算机上的某个特定应用程序。这样,当两台计算机的应用程序需要进行通信时,它们可以通过各自的Socket来交换数据。这些Socket之间通过TCP或UDP等协议进行连接,实现数据的可靠传输或...

Linux编程socket通信疑问

在Linux编程中,socket通信是一种非常重要的机制,用于在不同进程之间或者不同主机之间传输数据。Socket可以被看作是一个端点,它允许程序通过网络通信协议(如TCP/IP、UDP等)进行数据传输。在socket通信中,通常涉及两个主要的步骤:建立连接和数据传输。首先,客户端和服务器端都需要创建一个socket对象,...

c语言socket

答案:在C语言中,Socket是一种用于网络通信的编程接口。它允许应用程序通过网络进行数据传输和通信。通过Socket,可以创建服务器和客户端应用程序,实现服务器与客户端之间的数据交换。详细解释:1. Socket的基本概念:Socket是计算机网络中的一个关键概念,它为应用程序之间的通信提供了一个接口。在C语言中...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
乐视突然耗电很多,这个怎么处理 如果我给买家差评,那么在买家没有评价的情况下,是否会到时系统默认给我... ...大家,淘宝,买家给卖家差评,而卖家还没回评之前能看到买家给的... 如何判断女孩子是否同意你的追求? 怎么样才能知道女孩子是否喜欢我? 我在义乌QQ登录电脑上和别人的聊天记录。别人把我的Q在广东用手机登录... 为什么微信聊天记录会被人知道? ...一个地方用手机或电脑登录,能看到我的聊天记录吗? 魅族mx2新固件3.5.1顶栏最后一个图标是什么意思 魅族2相机前置打不开 观舞记PPT (MFC)WM_SOCKET到底在哪里的啊??? 三大构成课程的包括什么?三大构成的学习重点是什么... 如何构建一个符合自己科研信息需求的信息环境 素描设计是什么 怎么画 甲鱼有多少种? 《斯坦福大学人生设计课如何设计充实且快乐的人生... 乌龟的别称有多少个,分别是? 怎样拓展自己的设计思维? 《设计思维》最新txt全集下载 王八叫什么? 钟表上的数字是什么意思 王八还可以叫什么名字? 以我与互联网为主题,设计一个PPT课件,用文字论述... 设计思维怎么培养? 经常在钟表上看到古罗马的数字,请问这些数字的排... 王八的学名叫什么 怎么计算钟表度数,请给我公式 王八的几种叫法 ppt设计思路 三角函数的化简与求值的教学设计 c#里面的tcpclient 或者 socket在哪里? spring boot的socket在哪 socket编码在哪一层,其与操作系统有什么关系 乌龟为什么还叫王八 乌龟!叫王八 还有别名吗??? 为什么虐杀原形2进不去,一直显示正在进入。 socket 接收到的报文存放在哪儿,这些报文最终是如... 网络编程中的Socket缓冲区在哪儿 达龙云电脑有什么好玩的功能?真的可以游戏挂机升级么 linux下的socket编程在哪进行? 为什么玩虐杀原形2进都进不去 如何制作一个优秀的演示文稿,从前期规划,指导思想,... localserversocket创建的文件在哪 虐杀原形2进不去 乌龟有什么种类? 虐杀原形2怎么进不去 <sys/socket.h>在ubuntu中的哪个位置 虐杀原形2进不去,程序终止 我编了一个程序,用于专业学习,需要24小时挂机,...
  • 焦点

最新推荐

猜你喜欢

热门推荐