netmon工作原理

简介:

参考文献:

netmon中解析非1433端口的TDS协议

TDS的解析

在前面一篇博客netmon中解析非1433端口的TDS协议中我们提到了netmon如何去解析非1433端口的TDS。我们是通过在tcp.npl这个文件中添加命名实例的tcp端口号,让该端口的tcp包跳转到tds.npl中去解析。下面我们来看一下tds.npl中有哪些内容呢?首先我看到在tds.npl中定义了一个 TDSPacketTypeTable:

View Code

这里面的这些值是不是很熟悉?是的,这些就是我们TDS包的名字,比如我们会见到TDS:SQLBatch、TDS:Response等等。这些名词都是有netmon中的tds.npl这个parser解析出来,其实网络包中传输过来的就是一些二进制数据,通过这个value netmon解析出其中的内容。

OSI七层网络协议

Network Protocols and TDS Endpoints中提到:

"When the SQL Server Database Engine communicates with an application, it formats the communication in a Microsoft communication format called a tabular data stream (TDS) packet. The network SQL Server Network Interface (SNI) protocol layer, which replaces the Net-Libraries for SQL Server 2000 and Microsoft Data Access Components (MDAC), encapsulates the TDS packet inside a standard communication protocol, such as TCP/IP or named pipes.

上面提到了TDS packet会被tcp协议封装。这就涉及到了OSI七层网络协议的内容。OSI将网络通信工作分为七层,由高到低依次为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

各层的作用和应用

1.物理层。物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。物理层为上层协议提供了一个传输数据的物理媒体。属于物理层定义的典型规范包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

2.数据链路层。数据链路层在不可靠的物理介质上提供可靠的传输。数据链路层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。

3.网络层。网络层负责对子网间的数据包进行路由选择。网络层还可以实现拥塞控制、网际互连等功能。网络层协议的代表包括:IP、IPX、RIP、OSPF等。

4.传输层。传输层是第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。

传输层协议的代表包括:TCP、UDP、SPX等。

5.会话层。会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

6.表示层。表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。

7、应用层。应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。

在各层之间,数据是以什么单位进行传输的?

这个问题比较有意思,数据在各层之间的单位都是不一样的,在物理层数据的单位称为比特(bit);在数据链路层,数据的单位称为帧(frame);在网络层,数据的单位称为数据包(packet);传输层,数据的单位称为数据段(segment)。在netmon中有一个frame number这个列。应该就是数据链路层的传输单位。

netmon trace解析

netmon会解析出许多内容,下面分析一些主要的内容,如下表格所示:

Phase What How Why
Intial connection TCP:Flags=......S., SrcPort=60201, DstPort=37937,  TCP handshake Initial connection
TCP:Flags=...A..S., SrcPort=37937, DstPort=60201, mapping tcp session to socket
TCP:Flags=...A...., SrcPort=60201, DstPort=37937,  Sync starting sequence
  Sync  sliding window
Prelogin TDS:Prelogin, Version = 7.3 (0x730b0003),  Version, Encryption, SQL allocate worker and thread for new connection setting up contexts (encryption and MARS)
TDS:Response, Version = 7.3 (0x730b0003),  ThreadID, MARS
  InstanceName
Login   TLS handshake  
TLS:TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Hello Done.  
TLS:TLS Rec Layer-1 HandShake: Client Key Exchange.; TLS Rec Layer-2 Cipher Change Spec; TLS Rec Layer-3 HandShake: Encrypted Handshake Message. authentication and identification
TLS:TLS Rec Layer-1 Cipher Change Spec; TLS Rec Layer-2 HandShake: Encrypted Handshake Message. channel encryption negotiation,
TLS:TLS Rec Layer-1 SSL Application Data  
TDS Batch/ response TDS:SQLBatch, Version = 7.3 (0x730b0003),   TDS command /response Process SQL request
TDS:Response, Version = 7.3 (0x730b0003), 
Keepalive TCP:[Keep alive]Flags=...A...., SrcPort=60201, DstPort=37937,  maintain idled session reduce connection overhead.
TCP:[Keep alive ack]Flags=...A...., SrcPort=37937, DstPort=60201,  Deal with idle time before connection.close
Disconnect TCP:Flags=...A...F, SrcPort=61543, DstPort=37937, TCP session finish  
TCP:Flags=...A...., SrcPort=37937, DstPort=61543, Close c/s session, delete port pair
TCP:Flags=...A...F, SrcPort=37937, DstPort=61543, Recycle the worker, SPID etc.
TCP:Flags=...A...., SrcPort=61543, DstPort=37937,  Release TCP session memory.

 

 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/08/23/2652169.html,如需转载请自行联系原作者

目录
相关文章
|
自然语言处理 数据管理 vr&ar
清华等团队研究员推出卷积重建模型CRM
【2月更文挑战第24天】清华等团队研究员推出卷积重建模型CRM
209 1
清华等团队研究员推出卷积重建模型CRM
|
并行计算 安全 调度
C++ 11新特性之并发
C++ 11新特性之并发
175 0
|
Kubernetes API 数据库
容器服务 Pod 处于 CrashLoopBackOff的原因及解决方法
"CrashLoopBackOff" 是 Kubernetes 中 Pod 进入的一种错误状态,通常是由于容器不断崩溃(失败)而触发的重启策略所导致的。以下是 Pod 处于 CrashLoopBackOff 状态的原因及相应的解决方法: ### 原因: 1. **应用错误:** - 容器内部的应用程序崩溃,导致容器退出。 - 应用程序可能因为异常、未捕获的错误、配置问题、依赖缺失等原因导致崩溃。 2. **错误的启动命令:** - Pod 的启动命令或入口点设置错误,导致容器无法正确启动。 3. **资源限制:** - Pod 可能受到内存或 CPU 资源限制,
4090 0
|
SQL 关系型数据库 数据库
异地远程访问本地SQL Server数据库【无公网IP内网穿透】(上)
异地远程访问本地SQL Server数据库【无公网IP内网穿透】
422 0
|
移动开发 安全 Java
Spring Security 配置多WebSecurityConfigurerAdapter
Spring Security 配置多WebSecurityConfigurerAdapter
2751 0
|
JavaScript API
Node第三方包 【node-xlsx】
Node第三方包 【node-xlsx】
524 0
|
前端开发
【React工作记录六十四】ant design中rowKey的作用
【React工作记录六十四】ant design中rowKey的作用
347 0
|
人工智能 自然语言处理 机器人
【Bard】来自谷歌的“吟游诗人”
【Bard】来自谷歌的“吟游诗人”
246 0
|
Kubernetes API 调度
kubernetes 中 Evicted pod 是如何产生的
最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些实例并没有被自动清理,平台的大部分用户在操作时看到服务下面出现 Evicted 实例时会以为服务有问题或者平台有问题的错觉,影响了用户的体验。而这部分 Evicted 状态的 Pod 在底层关联的容器其实已经被销毁了,对用户的服务也不会产生什么影响,也就是说只有一个 Pod 空壳在 k8s 中保存着,但需要人为手动清理。本文会分析为什么为产生 Evicted 实例、为什么 Evicted 实例没有被自动清理以及如何进行自动清理。
1241 0