Delen via


Het netwerkverificatieproces traceren naar de database-engine

Dit artikel bevat verschillende voorbeelden van een netwerktracering die verschillende handshakes en verificatiereeksen vastlegt tijdens het tcp-verbindingsproces (Transmission Control Protocol) tussen een clienttoepassing en de SQL Server Database Engine (de server).

Voor meer informatie over het sluiten van verbindingen, zie Volg de afsluitingsvolgorde van de netwerkverbinding op de Database Engine.

Verificatietypen

U kunt verbinding maken met de database-engine met Windows-verificatie (met behulp van Kerberos- of NTLM-verificatie) of SQL-verificatie.

In dit artikel worden ook MARS-verbindingen (Multiple Active Result Sets) beschreven. MARS is een functie van SQL Server, geïntroduceerd met SQL Server 2005 (9.x), waarmee meerdere opdrachten kunnen worden uitgevoerd op een verbinding zonder de resultaten van de eerste opdracht op te schonen, voordat de tweede opdracht wordt uitgevoerd. MARS wordt bereikt via sessie-multiplexing (SMUX).

In dit proces wordt een normaal aanmeldingsproces beschreven met behulp van SQL-verificatie, waarbij elke stap van het gesprek tussen de client en de server wordt weergegeven via een gedetailleerde netwerktraceringsanalyse. In het voorbeeld van de netwerktracering worden de volgende stappen beschreven:

  1. TCP-handshake in drie richtingen
  2. Bestuurder handdruk
  3. SSL/TLS-handshake
  4. Aanmeldingspakketuitwisseling
  5. Aanmeldingsbevestiging
  6. Een opdracht uitvoeren en het antwoord lezen
  7. TCP vierweg-sluitingshandshake

Voorbeeld van netwerktracering

Deze transactie is 1 seconde toegewezen, ongeacht de Login Timeout instelling in de verbindingsketen.

  • Het IP-adres van de client is 10.10.10.10
  • Het IP-adres van de server is 10.10.10.120

Stap 1. TCP-handshake in drie richtingen

Alle TCP-gesprekken beginnen met een SYN pakket (S vlagset) dat van de client naar de server wordt verzonden. In Frame 6127gebruikt de client een tijdelijke poort (dynamisch toegewezen door het besturingssysteem) en maakt deze verbinding met de serverpoort, in dit geval poort 1433. De server reageert met zijn eigen SYN-pakket met de ACK-vlag die ook ingesteld staat. Ten slotte reageert de client met een ACK pakket om de server te laten weten dat het SYN pakket is ontvangen.

Met deze stap wordt een eenvoudige TCP-verbinding tot stand gebracht, op dezelfde manier als een telnet opdracht. Het besturingssysteem bemiddelt dit deel van het gesprek. Op dit moment weten de client en server niets van elkaar.

diagram van handshake in drie richtingen.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6127  116.5776698 10.10.10.10  10.10.10.120 TCP:Flags=......S., SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702293, Ack=0, Win=8192 ( Ne
6128  116.5776698 10.10.10.120 10.10.10.10  TCP:Flags=...A..S., SrcPort=1433, DstPort=60123, PayloadLen=0, Seq=4095166896, Ack=4050702294, Win=
6129  116.5786458 10.10.10.10  10.10.10.120 TCP:Flags=...A...., SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702294, Ack=4095166897, Win=

In deze stap zijn de [Bad CheckSum] waarschuwingen goedaardig en een indicator dat checksum offload is ingeschakeld. Dat wil zeggen, ze worden toegevoegd op een lager niveau in de netwerkstapel dan waar de tracering plaatsvindt. Als er geen andere informatie is, geeft deze waarschuwing aan of de netwerktracering is uitgevoerd op de client of de server. In dit geval verschijnt het op het eerste SYN-pakket, dus is de tracering op de client uitgevoerd.

Stap 2. Handshake van bestuurder

Zowel het clientstuurprogramma als SQL Server moeten iets van elkaar weten. In deze handshake verzendt het stuurprogramma enkele informatie en vereisten naar de server. Deze informatie omvat het versleutelen van gegevenspakketten, of er gebruik moet wordengemaakt van MULTIPLE Active Result Sets (MARS), het versienummer ervan, of federatieve verificatie, de verbindings-GUID enzovoort moet worden gebruikt.

De server reageert met de gegevens, zoals of verificatie is vereist. Deze volgorde vindt plaats voordat een soort beveiligingsonderhandeling wordt uitgevoerd.

diagram van de handshake van de bestuurder.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6130  116.5786458 10.10.10.10  10.10.10.120 TDS:Prelogin, Version = 7.1 (0x71000001), SPID = 0, PacketID = 0, Flags=...AP..., SrcPort=60123, Ds
6131  116.5805998 10.10.10.120 10.10.10.10  TDS:Response, Version = 7.1 (0x71000001), SPID = 0, PacketID = 1, Flags=...AP..., SrcPort=1433, Dst

Stap 3. SSL/TLS-handshake

De SSL/TLS-handshake begint met het Client Hello-pakket en vervolgens het Server Hello-pakket, plus enkele extra pakketten met betrekking tot Secure Channel. In deze stap wordt onderhandeld over de beveiligingssleutel voor het versleutelen van pakketten. Normaal gesproken is alleen het aanmeldingspakket versleuteld, maar de client of de server kan vereisen dat gegevenspakketten ook worden versleuteld. Het kiezen van de versie van TLS vindt plaats in deze fase van de aanmelding. De client of server kan de verbinding in deze fase sluiten als de TLS-versies niet overeenkomen of als ze geen coderingssuites hebben.

diagram van SSL/TLS-handshake.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6132  116.5835288 10.10.10.10  10.10.10.120 TLS:TLS Rec Layer-1 HandShake: Client Hello. {TLS:328, SSLVersionSelector:327, TDS:326, TCP:325, IP
6133  116.5845058 10.10.10.120 10.10.10.10  TLS:TLS Rec Layer-1 HandShake: Server Hello. Certificate. Server Hello Done. {TLS:328, SSLVersionSe
6134  116.5864588 10.10.10.10  10.10.10.120 TLS:TLS Rec Layer-1 HandShake: Client Key Exchange.; TLS Rec Layer-2 Cipher Change Spec; TLS Rec La
6135  116.5923178 10.10.10.120 10.10.10.10  TLS:TLS Rec Layer-1 Cipher Change Spec; TLS Rec Layer-2 HandShake: Encrypted Handshake Message. {TL

Stap 4. Aanmeldingspakket

Dit pakket is versleuteld en kan worden weergegeven als SSL Application Data of TDS:Data, afhankelijk van uw netwerkparser. Als alle pakketten na deze stap ook worden weergegeven als SSL Application Data, wordt de verbinding versleuteld.

Diagram van SQL-aanmelding.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6136  116.5932948 10.10.10.10  10.10.10.120 TLS:TLS Rec Layer-1 SSL Application Data {TLS:328, SSLVersionSelector:327, TDS:326, TCP:325, IPv4:3

Stap 5. Aanmeldingsbevestiging

Anders ziet u een antwoordpakket dat de aanmelding bevestigt (met het ACK token) of een Login Failed foutbericht naar de client retourneert.

Hier volgt een voorbeeld van wat u kunt zien in de hexadecimale pakketgegevens voor een geslaagde aanmelding:

.C.h.a.n.g.e.d. .d.a.t.a.b.a.s.e. .c.o.n.t.e.x.t. .t.o. .'.A.d.v.e.n.t.u.r.e.W.o.r.ks'

diagram van sql-aanmeldingsbevestiging.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6137  116.5962248 10.10.10.120 10.10.10.10  TDS:Response, Version = 7.1 (0x71000001), SPID = 96, PacketID = 1, Flags=...AP..., SrcPort=1433, Ds

Stap 6. Een opdracht uitvoeren en het antwoord lezen

Opdrachten worden verzonden als een TDS:SQLBatch of een TDS:RPCRequest pakket. De vorige voert gewone Transact-SQL instructies uit en de laatste voert opgeslagen procedures uit. Mogelijk ziet u TCP-vervolgpakketten als de opdracht lang is of in het antwoordpakket als er meer dan een paar rijen worden geretourneerd.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6138  116.5991538 10.10.10.10  10.10.10.120 TDS:SQLBatch, Version = 7.1 (0x71000001), SPID = 0, PacketID = 1, Flags=...AP..., SrcPort=60123, Ds
6139  116.5991538 10.10.10.120 10.10.10.10  TDS:Response, Version = 7.1 (0x71000001), SPID = 96, PacketID = 1, Flags=...AP..., SrcPort=1433, Ds
6266  116.8032558 10.10.10.10  10.10.10.120 TCP:Flags=...A...., SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702956, Ack=4095168204, Win=

Stap 7. Vierfasen-handshake voor het beëindigen van een TCP-verbinding

Microsoft-drivers gebruiken de four-way handshake om verbindingen te sluiten. Veel stuurprogramma's van derden stellen de verbinding gewoon opnieuw in om deze te sluiten, waardoor het moeilijker is om onderscheid te maken tussen een normale en abnormale sluiting.

De four-way handshake begint met de client die een FIN-pakket naar de server verzendt, waarop de server reageert met een ACK. De server verzendt vervolgens een eigen FIN pakket, dat de client bevestigt (ACK).

Als de server eerst een FIN pakket verzendt, is het een abnormale sluiting, meestal te zien in de SSL/TLS-handshake als de client en server niet kunnen onderhandelen over het beveiligde kanaal.

Diagram van viervoudige afsluitende handdruk.

Frame Time Offset Source IP    Dest IP      Description
----- ----------- ------------ ------------ ---------------------------------------------------------------------------------------------------
6362  116.9097008 10.10.10.10  10.10.10.120 TCP:Flags=...A...F, SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702956, Ack=4095168204, Win=
6363  116.9097008 10.10.10.120 10.10.10.10  TCP:Flags=...A...., SrcPort=1433, DstPort=60123, PayloadLen=0, Seq=4095168204, Ack=4050702957, Win=
6364  116.9097008 10.10.10.120 10.10.10.10  TCP:Flags=...A...F, SrcPort=1433, DstPort=60123, PayloadLen=0, Seq=4095168204, Ack=4050702957, Win=
6366  116.9106778 10.10.10.10  10.10.10.120 TCP:Flags=...A...., SrcPort=60123, DstPort=1433, PayloadLen=0, Seq=4050702957, Ack=4095168205, Win=