`
zhangyou1010
  • 浏览: 303759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

TCP连接及断连

    博客分类:
  • tcp
 
阅读更多

三次握手Three-wayHandshake

                                    --转自liucaixia


一个虚拟连接的建立是通过三次握手来实现的

 


1. (Client) –> [SYN] –> (Server)
假如Client和Server通讯. 当Client要和Server通信时,Client首先向Server发一个SYN(Synchronize) 标记的包,告诉Server请求建立连接.
注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当Server收到Client发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不 能让外部任何主机主动建立连接。

如下图红框,三次握手的首次SYN,Source为我的教学平台所在的IP:192.168.102.64 Destination为平台的IP:192.168.102.241



 

2. (Client) <– [SYN/ACK] <–(Server)
接着,Server收到来自Client发来的SYN包后,会发一个对SYN包的确认包(SYN/ACK)给Client,表示对第一个SYN包的确认,并继续握手操作.
注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.

如下图红框,三次握手的服务端给客户端的响应SYN,ACK,Source为平台的IP:192.168.102.241,Destination为我的教学平台所在的IP:192.168.102.64



 

3. (Client) –> [ACK] –> (Server)
Client收到来自Server的SYN/ACK 包,Client会再向Server发一个确认包(ACK),通知Server连接已建立。至此,三次握手完成,一个TCP连接完成。
Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。

如下图红框,三次握手的最后确认ACK,Source为我的教学平台所在的IP:192.168.102.64 Destination为平台的IP:192.168.102.241



 

到此为止,客户端完成了与服务端进行数据传输的准备工作,类似人们见面后先进行握手后,接下来就进行正题交流了。

四次握手Four-way Handshake
四次握手用来关闭已建立的TCP连接,当客户端和服务端完成了数据包的传输后,又客户端或者服务端主动发起握手。来进行连接的断开。

1. (Client) –> ACK/FIN –>(Server)
2. (Client) <– ACK <–(Server)
3. (Client) <– ACK/FIN <–(Server)
4. (Client) –> ACK –>(Server)

如下图蓝框为四次握手,首先的发起放时为平台,IP:192.168.102.241,Destination为我的教学平台所在的IP:192.168.102.64。接下来客户端进行了ACK响应 ,紧接着自己也发了一个结束包。服务端对结束包进行响应。



 

 



注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包.然而, 由于连接还没有关闭, FIN包总是打上ACK标记. 没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的。

连接复位Resetting a connection
四次握手不是关闭TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送. 注意在,由于RST包不是TCP连接中的必须部分, 可以只发送RST包(即不带ACK标记). 但在正常的TCP连接中RST包可以带ACK确认标记

到目前为止,你已经看到了 SYN, ACK, FIN, 和RST 标记. 另外,还有PSH (Push) 和URG(Urgent)标记.

最常见的非法组合是SYN/FIN 包. 注意:由于 SYN包是用来初始化连接的, 它不可能和 FIN和RST标记一起出现. 这也是一个恶意攻击.

由于现在大多数防火墙已知 SYN/FIN 包, 别的一些组合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明显,当网络中出现这种包时,你的网络肯定受到攻击了。

别的已知的非法包有FIN (无ACK标记)和”NULL”包。如同早先讨论的,由于ACK/FIN包的出现是为了关闭一个TCP连接,那么正常的FIN包总是带有ACK 标记。”NULL”包就是没有任何TCP标记的包(URG,ACK,PSH,RST,SYN,FIN都为0)。

到目前为止,正常的网络活动下,TCP协议栈不可能产生带有上面提到的任何一种标记组合的TCP包。当你发现这些不正常的包时,肯定有人对你的网络不怀好意。

抓报分析问题实例:
问题:梦幻西游在网维大师无盘上容易掉线的问题

当时捕捉到梦幻西游掉线时的数据包是这样的。注意下图中的红色数据,123.58.184.241是梦幻西游的服务器,而192.168.1.41是玩梦幻西游的客户机,在掉线时,发现是先有梦幻西游的服务器向客户机发送一个[FIN,ACK]数据包,根据上面的解释,FIN标记的数据包是代表要断开连接的意思,而接着客户机又回给服务器一个确认断开链接包。当看到这个抓包数据时,就意识到,大家说的在网维大师系统虚拟盘上梦幻爱掉线的问题,并非普通的网络问题,因为通过数据包的信息来看,是梦幻服务器主动要求断开链接,产生这个情况无非是以下几个原因:
1、服务器发现客户端非法,比如有外挂什么的,踢掉了客户机;
2、服务器压力大,踢掉了客户机;
3、总之不是客户端问题导致的掉线;



 

 

那么既然结论是如此,为什么会有在网维大师系统虚拟盘上容易出现梦幻掉线问题呢?原因是由于网维大师系统虚拟盘是模拟真实硬盘方式来实现的,而在模拟过程中,将硬盘的序列号设置为固定过的OSDIY888了,而梦幻西游刚好后识别客户机硬盘信息,发现大量客户端的硬盘序列号都是一样的,就认为是作-bi或者使用挂机外-挂了,结果就导致随机被服务器踢下线的情况发生,后来我们将硬盘序列号设置为空,则没再出现该问题。这个问题在未来的新版本中会解决掉。

  • 大小: 92.1 KB
  • 大小: 91.5 KB
  • 大小: 94.2 KB
  • 大小: 91.7 KB
  • 大小: 73 KB
分享到:
评论

相关推荐

    TCP连接断连剖析

    本文介绍了几种常见的导致 TCP 连接断连的原因,并在此基础上,以 AIX 系统为例,借助相应的网络分析工具,解开TCP 断连的原因,并给出两种可行的解决方案。

    LabVIEW TCP 通讯 自动连接 掉线自动重连

    - **重连机制**:一旦检测到连接断开,会调用`Close TCP Connection`关闭当前连接,然后再次尝试`Open TCP Connection`进行自动重连。 2. **TCP服务器(TCP Server.vi)**:服务器等待客户端的连接请求,接受连接...

    怎样及时检测出非正常断开的TCP连接.DOC

    TCP 连接非正常断开检测 在网络通信中,TCP 连接的非正常断开是指在非优雅的方式下断开连接,例如网线故障、物理链路中断、主机断电等原因引起的连接断开。如何及时检测出这种非正常断开的 TCP 连接是非常重要的。 ...

    SOCKET断了后重连,TCP断了重连

    实现SOCKET TCP断开连接后,重新连接 比如TCP通信过程中,网断了或者拨了网线,如何在代码中自动重新连接TCP服务器.这是常见需求

    Android socket实现Tcp长连接,断开自动重连

    手写简化版tcp长链接的socket实现,主要功能有断开重连,以及收发读取解码解析,适用于需要用到长链接的原生开发。

    TCP异步传输断线重连

    在TCP连接中,由于网络环境的不稳定,可能会出现连接中断的情况,这时就需要实现断线重连机制。这个机制通常包括以下几个步骤: 1. **检测连接状态**:在接收数据或发送数据的过程中,我们需要持续检查连接是否仍然...

    [Qt] TCP服务器客户端(可连接多个客户端,断线重联,指定格式解析))

    在本文中,我们将深入探讨如何使用Qt框架实现一个TCP服务器客户端系统,该系统具备多客户端连接、断线重连和自定义数据解析功能。首先,我们来看一下标题和描述所涉及的关键技术点。 1. **TCP服务器客户端**:TCP...

    TCP连接,Socket通信,前后断通信

    本文将深入探讨TCP连接、Socket通信以及前后端通信的相关知识点。 首先,TCP连接是基于TCP协议的两台主机之间建立的一种双向通信链路。在TCP连接的建立过程中,通常会经历三次握手,即SYN(同步序列编号)、SYN+ACK...

    QT TCP服务端如何判断客户端已断开连接 - 北冥有鱼的博客 - CSDN博客1

    在使用QT进行TCP服务器开发时,一个常见的需求是检测客户端是否已经断开了连接。这篇文章将介绍如何在QT中实现这一功能,特别是在C++环境中。QT提供了丰富的网络编程接口,其中包括`QAbstractSocket`类,该类包含了...

    网络实验5 RAW_TCP服务器实验_lwiprawtcpserver_LWIPTCP_client_RAW_TCPServer

    在TCP连接建立后,数据将以字节流的形式双向传输。服务器和客户端之间的通信需要经历三次握手来建立连接,然后可以进行数据传输,最后通过四次挥手来断开连接。在实验中,你需要理解这些步骤,并在代码中实现它们。 ...

    c#心跳连接实时检测网络通断情况

    本文将深入探讨如何使用C#进行心跳连接来实时检测网络的通断情况,并实现网络的无缝重连。 心跳连接是一种在网络通信中维持连接状态的技术,通过定期发送小型数据包(心跳包)来确认双方的通信通道是否畅通。在C#中...

    socket实现了tcp的服务器断和客户端

    TCP(传输控制协议)是一种面向连接、可靠的、基于字节流的传输层通信协议,它确保了数据的正确顺序传输和无丢失。本示例中的"socket实现了tcp的服务器端和客户端"是一个实用的Socket编程实践,包含了服务器端和...

    wincc modbus tcp通讯中断问题解决方案.pdf

    - 检查RS485电缆是否正确连接了脱硫脱硝塔的高频电源控制器至PLC控制柜,并确保网关已接入脱硫脱硝PLC系统。 2. Modbus通信地址表的应用: - 明确Modbus通信地址表中各地址的用途,确认哪些地址用于上位机监控。 ...

    Mina TCP长连接服务与UDP服务

    1.请检查端口服务类型(服务端端口是TCP/UDP)。 2.检查网络环境。 3.默认回车换行断包。所以注意发送内容后面一定要添加回车换行。 注:由于时间问题,加了心跳机制,但是没加客户端回应,也没加服务端接收到心跳...

    tcp 粘包 拆包解决思路以代码

    在TCP协议中,由于其流式传输的特性,可能会出现“粘包”和“拆包”的问题。这两个术语是网络编程中的常见概念,主要涉及到数据在网络传输过程中的封装与解析。 **TCP粘包**:当发送方连续发送多个数据包时,接收方...

    TCP.rar_TCP 调试_tcp调试_tcp调试工具_visual c_调试工具

    若出现异常断连,可能是FIN或FIN/ACK包未正确传递,需要检查网络状况和程序逻辑。 4. **TCP疑难问题**:常见的TCP问题有TCP慢启动、TIME_WAIT状态过多、RST包的发送等。理解这些问题的原因及解决方法是调试的关键。...

    C# TCP服务器 客户端 两个源码 通信稳定

    服务器启动时会监听一个指定的端口,一旦有客户端请求连接,`AcceptTcpClient()`方法会被阻塞,直到一个新的TCP连接建立。 客户端则是发起连接请求的一方,它使用`TcpClient`类来连接到服务器,并通过`GetStream()`...

    c#socket断开重连

    重连方法通常包括关闭当前Socket、等待一段时间(防止立即重连导致的拒绝服务)和再次尝试连接: ```csharp private static void Reconnect(Socket socket, IPEndPoint serverEndPoint) { socket.Close(); Thread...

    Vpp tcp层代码解析.pdf

    ### VPP TCP层代码解析 ...文档中详细解析了服务端如何通过一系列函数调用来实现TCP连接监听,并通过状态机图来展示TCP的处理逻辑。理解这些流程对于深入掌握VPP以及网络协议栈内部工作机制至关重要。

    c# 实现海康威视网络摄像头断连提示

    在本文中,我们将深入探讨如何使用C#来实现海康威视网络摄像头的断连提示功能,以及在重新连接后如何恢复实时视频播放。在WPF(Windows Presentation Foundation)环境中,我们将利用网络编程和多媒体处理技术来达到...

Global site tag (gtag.js) - Google Analytics