TCP/IP aracılığıyla üç yönlü el sıkışmasının açıklaması

Bu makalede, TCP bağlantısı başlatılırken veya sonlandırılırken istemci ve sunucu arasında İletim Denetimi Protokolü (TCP) üç yönlü el sıkışma işlemi açıklanır.

Şunlar için geçerlidir: Windows Server 2012 R2
Özgün KB numarası: 172983

Özet

Bu makale, İletim Denetimi Protokolü/İnternet Protokolü (TCP/IP) hakkında bilgi sahibi olan hedef kitlelere yöneliktir. Tcp bağlantısını başlatırken veya sonlandırırken istemci ile sunucu arasında TCP üç yönlü el sıkışması işlemini açıklar.

Daha fazla bilgi

TCP/IP aktarım protokolünün TCP düzeyi bağlantı odaklıdır. Bağlantı odaklı, herhangi bir verinin iletilenemeden önce güvenilir bir bağlantı elde edilmesi ve kabul edilmesi gerektiği anlamına gelir. TCP düzeyinde veri iletimleri, bağlantı kurma ve bağlantı sonlandırma sürecin tamamını yöneten belirli denetim parametrelerini korur. Denetim bitleri aşağıdaki gibi listelenir:

ÜRG: Acil İşaretçi alanı önemli
ACK: Bildirim alanı önemli
PSH: Gönderme İşlevi
RST: Bağlantıyı sıfırlama
SYN: Sıra numaralarını eşitleme
FIN: Gönderenden başka veri yok

Üç yönlü el sıkışmanın gerçekleşeceği iki senaryo vardır:

  • Bağlantı kurma (etkin bir açık)

  • Bağlantıyı sonlandırma (etkin kapatma)

Aşağıdaki örnek bilgiler bir Ağ İzleyicisi yakalamasından alınmıştı. Ağ İzleyicisi, Microsoft Systems Management Server'dan edinilebilen bir protokol çözümleyicisidir.

Bağlantı kurma

Aşağıdaki sıra, bir TCP bağlantısının kurulma işlemini gösterir:

Çerçeve 1:

İlk çerçevede gördüğünüz gibi, NTW3 istemcisi bir SYN kesimi (TCP ....S.) gönderir. Bu, sunucuya sıra numaralarını eşitleme isteğidir. İlk sıra numarasını (ISN) belirtir. ISN değeri 1 (8221821+1=8221822) artırılır ve sunucuya gönderilir. Bağlantı başlatmak için istemci ve sunucunun birbirinin sıra numaralarını eşitlemesi gerekir. Uzunluk (uzunluk: 4) ile tanımlanan Maksimum Segment Boyutu (MSS) için de bir seçenek vardır. Bu seçenek, gönderenin almak istediği MSS'yi iletir. Onay alanı (ack: 0), üç yönlü el sıkışmasının ilk bölümü olduğundan sıfır olarak ayarlanır.


1 2.0785 NTW3 --> BDC3 TCP ....S., len: 4, seq: 8221822-8221825, ack: 0,
win: 8192, src: 1037 dst: 139 (NBT Session) NTW3 --> BDC3 IP

TCP: ....S., len: 4, seq: 8221822-8221825, ack: 0, win: 8192, src: 1037
dst: 139 (NBT Session)

TCP: Source Port = 0x040D
 TCP: Destination Port = NETBIOS Session Service
 TCP: Sequence Number = 8221822 (0x7D747E)
 TCP: Acknowledgement Number = 0 (0x0)
 TCP: Data Offset = 24 (0x18)
 TCP: Reserved = 0 (0x0000)
 TCP: Flags = 0x02 : ....S.

TCP: ..0..... = No urgent data
 TCP: ...0.... = Acknowledgement field not significant
 TCP: ....0... = No Push function
 TCP: .....0.. = No Reset
 TCP: ......1. = Synchronize sequence numbers
 TCP: .......0 = No Fin

TCP: Window = 8192 (0x2000)
 TCP: Checksum = 0xF213
 TCP: Urgent Pointer = 0 (0x0)
 TCP: Options

TCP: Option Kind (Maximum Segment Size) = 2 (0x2)
 TCP: Option Length = 4 (0x4)
 TCP: Option Value = 1460 (0x5B4)

TCP: Frame Padding

00000: 02 60 8C 9E 18 8B 02 60 8C 3B 85 C1 08 00 45 00 .`.....`.;....E.
00010: 00 2C 0D 01 40 00 80 06 E1 4B 83 6B 02 D6 83 6B .,..@....K.k...k
00020: 02 D3 04 0D 00 8B 00 7D 74 7E 00 00 00 00 60 02 .......}t~....`.
00030: 20 00 F2 13 00 00 02 04 05 B4 20 20 .........

Çerçeve 2:

İkinci çerçevede gördüğünüz gibi, BDC3 sunucusu bir ACK ve SYN kesimi (TCP .A..S.) gönderir. Bu kesimde sunucu, istemcinin eşitleme isteğini onaylar. Bu arada sunucu, sıra numaralarını eşitlemek için istemciye isteğini de gönderiyor. Bu segmentte önemli bir fark var. Sunucu, istemciye bir onay numarası (8221823) iletir. Onay, istemciye ACK'nin istemcinin başlattığı SYN'ye özgü olduğunun kanıtıdır. İstemcinin isteğini kabul etme işlemi, sunucunun istemcinin sıra numarasını bir artırmasına olanak tanır ve bunu onay numarası olarak kullanır.


2 2.0786 BDC3 --> NTW3 TCP .A..S., len: 4, seq: 1109645-1109648, ack:
8221823, win: 8760, src: 139 (NBT Session) dst: 1037 BDC3 --> NTW3 IP

TCP: .A..S., len: 4, seq: 1109645-1109648, ack: 8221823, win: 8760,
src: 139 (NBT Session) dst: 1037

TCP: Source Port = NETBIOS Session Service
 TCP: Destination Port = 0x040D
 TCP: Sequence Number = 1109645 (0x10EE8D)
 TCP: Acknowledgement Number = 8221823 (0x7D747F)
 TCP: Data Offset = 24 (0x18)
 TCP: Reserved = 0 (0x0000)
 TCP: Flags = 0x12 : .A..S.

TCP: ..0..... = No urgent data
 TCP: ...1.... = Acknowledgement field significant
 TCP: ....0... = No Push function
 TCP: .....0.. = No Reset
 TCP: ......1. = Synchronize sequence numbers
 TCP: .......0 = No Fin

TCP: Window = 8760 (0x2238)
 TCP: Checksum = 0x012D
 TCP: Urgent Pointer = 0 (0x0)
 TCP: Options

TCP: Option Kind (Maximum Segment Size) = 2 (0x2)
 TCP: Option Length = 4 (0x4)
 TCP: Option Value = 1460 (0x5B4)

TCP: Frame Padding

00000: 02 60 8C 3B 85 C1 02 60 8C 9E 18 8B 08 00 45 00 .`.;...`......E.
00010: 00 2C 5B 00 40 00 80 06 93 4C 83 6B 02 D3 83 6B .,[.@....L.k...k
00020: 02 D6 00 8B 04 0D 00 10 EE 8D 00 7D 74 7F 60 12 ...........}t`.
00030: 22 38 01 2D 00 00 02 04 05 B4 20 20 "8.-......

Çerçeve 3:

Üçüncü çerçevede gördüğünüz gibi istemci bir ACK kesimi (TCP .A....) gönderir. Bu kesimde istemci, eşitleme için sunucudan gelen isteği onaylar. İstemci, bir onay numarası sağlamak için sunucunun uyguladığı algoritmayı kullanır. İstemcinin sunucunun eşitleme isteğini kabul etme işlemi, güvenilir bir bağlantı kurma ve üç yönlü el sıkışma işlemini tamamlar.


3 2.787 NTW3 --> BDC3 TCP .A...., len: 0, seq: 8221823-8221823, ack:
1109646, win: 8760, src: 1037 dst: 139 (NBT Session) NTW3 --> BDC3 IP

TCP: .A...., len: 0, seq: 8221823-8221823, ack: 1109646, win: 8760,
src: 1037 dst: 139 (NBT Session)

TCP: Source Port = 0x040D
 TCP: Destination Port = NETBIOS Session Service
 TCP: Sequence Number = 8221823 (0x7D747F)
 TCP: Acknowledgement Number = 1109646 (0x10EE8E)
 TCP: Data Offset = 20 (0x14)
 TCP: Reserved = 0 (0x0000)
 TCP: Flags = 0x10 : .A....

TCP: ..0..... = No urgent data
 TCP: ...1.... = Acknowledgement field significant
 TCP: ....0... = No Push function
 TCP: .....0.. = No Reset
 TCP: ......0. = No Synchronize
 TCP: .......0 = No Fin

TCP: Window = 8760 (0x2238)
 TCP: Checksum = 0x18EA
 TCP: Urgent Pointer = 0 (0x0)
 TCP: Frame Padding

00000: 02 60 8C 9E 18 8B 02 60 8C 3B 85 C1 08 00 45 00 .`.....`.;....E.
00010: 00 28 0E 01 40 00 80 06 E0 4F 83 6B 02 D6 83 6B .(..@....O.k...k
00020: 02 D3 04 0D 00 8B 00 7D 74 7F 00 10 EE 8E 50 10 .......}t....P.
00030: 22 38 18 EA 00 00 20 20 20 20 20 20 "8....

Bağlantıyı sonlandırma

Üç yönlü el sıkışması yalnızca üç paketin ağ medyamız üzerinden iletilmesini gerektirse de, bu güvenilir bağlantının sonlandırılması için dört paket iletilmesi gerekir. TCP bağlantısı tam çift yönlü olduğundan (veriler birbirinden bağımsız olarak her yönde akabilir), her yönün bağımsız olarak sonlandırılması gerekir.

Çerçeve 4:

Çerçevelerin bu oturumunda, istemcinin ACK (TCP .A...F) ile birlikte bir FIN gönderdiğini görürsünüz. Bu segmentin iki temel işlevi vardır. İlk olarak, FIN parametresi ayarlandığında, sunucuya gönderilecek başka veri olmadığını bildirir. İkincisi, ACK, kurdukları belirli bağlantıyı belirlemede çok önemlidir.


4 16.0279 NTW3 --> BDC3 TCP .A...F, len: 0, seq: 8221823-8221823,
ack:3462835714, win: 8760, src: 2337 dst: 139 (NBT Session) NTW3 --> BDC3
IP

TCP: .A...F, len: 0, seq: 8221823-8221823, ack: 1109646, win: 8760, src:
1037 dst: 139 (NBT Session)

TCP: Source Port = 0x040D
 TCP: Destination Port = NETBIOS Session Service
 TCP: Sequence Number = 8221823 (0x7D747F)
 TCP: Acknowledgement Number = 1109646 (0x10EE8E)
 TCP: Data Offset = 20 (0x14)
 TCP: Reserved = 0 (0x0000)
 TCP: Flags = 0x11 : .A...F

TCP: ..0..... = No urgent data
 TCP: ...1.... = Acknowledgement field significant
 TCP: ....0... = No Push function
 TCP: .....0.. = No Reset
 TCP: ......0. = No Synchronize
 TCP: .......1 = No more data from sender

TCP: Window = 8760 (0x2238)
 TCP: Checksum = 0x236C
 TCP: Urgent Pointer = 0 (0x0)

00000: 00 20 AF 47 93 58 00 A0 C9 22 F5 39 08 00 45 00 . .G.X...".9..E.
00010: 00 28 9B F5 40 00 80 06 21 4A C0 5E DE 7B C0 5E .(..@...!J.^.{.^
00020: DE 57 09 21 05 48 0B 20 96 AC CE 66 AE 02 50 11 .W.!.H. ...f..P.
00030: 22 38 23 6C 00 00 "8#l..

Çerçeve 5:

Bu çerçevede, istemciden iletilen FIN'i onaylayan sunucu dışında özel bir şey görmezsiniz.


5 16.0281 BDC3 --> NTW3 TCP .A...., len: 0, seq: 1109646-1109646,
ack: 8221824, win:28672, src: 139 dst: 2337 (NBT Session) BDC3 --> NTW3
IP

TCP: .A...., len: 0, seq: 1109646-1109646, ack: 8221824, win:28672, src:
139 dst: 2337 (NBT Session)

TCP: Source Port = 0x040D
 TCP: Destination Port = NETBIOS Session Service
 TCP: Sequence Number = 1109646 (0x10EE8E)
 TCP: Acknowledgement Number = 8221824 (0x7D7480)
 TCP: Data Offset = 20 (0x14)
 TCP: Reserved = 0 (0x0000)
 TCP: Flags = 0x10 : .A....

TCP: ..0..... = No urgent data
 TCP: ...1.... = Acknowledgement field significant
 TCP: ....0... = No Push function
 TCP: .....0.. = No Reset
 TCP: ......0. = No Synchronize
 TCP: .......0 = No Fin

TCP: Window = 28672 (0x7000)
 TCP: Checksum = 0xD5A3
 TCP: Urgent Pointer = 0 (0x0)
 TCP: Frame Padding

00000: 00 A0 C9 22 F5 39 08 00 02 03 BA 84 08 00 45 00 ...".9........E.
00010: 00 28 D2 82 00 00 3F 06 6B BD C0 5E DE 57 C0 5E .(....?.k..^.W.^
00020: DE 7B 05 48 09 21 CE 66 AE 02 0B 20 96 AD 50 10 .{.H.!.f... ..P.
00030: 70 00 D5 A3 00 00 90 00 01 00 86 00 p...........

Çerçeve 6:

İstemci bilgisayardan FIN'i aldıktan sonra sunucu ACK yapacaktır. TCP iki bilgisayar arasında bağlantı kurmuş olsa da, bağlantılar birbirinden bağımsızdır. Bu nedenle sunucunun istemciye bir FIN (TCP .A...F) iletmesi gerekir.


6 17.0085 BDC3 --> NTW3 TCP .A...F, len: 0, seq: 1109646-1109646, ack:
8221824, win:28672, src: 139 dst: 2337 (NBT Session) BDC3 --> NTW3 IP

TCP: .A...F, len: 0, seq: 1109646-1109646, ack: 8221824, win:28672, src:
139 dst: 2337 (NBT Session)

TCP: Source Port = 0x0548
 TCP: Destination Port = 0x0921
 TCP: Sequence Number = 1109646 (0x10EE8E)
 TCP: Acknowledgement Number = 8221824 (0x7D7480)
 TCP: Data Offset = 20 (0x14)
 TCP: Reserved = 0 (0x0000)
 TCP: Flags = 0x11 : .A...F

TCP: ..0..... = No urgent data
 TCP: ...1.... = Acknowledgement field significant
 TCP: ....0... = No Push function
 TCP: .....0.. = No Reset
 TCP: ......0. = No Synchronize
 TCP: .......1 = No more data from sender

TCP: Window = 28672 (0x7000)
 TCP: Checksum = 0xD5A2
 TCP: Urgent Pointer = 0 (0x0)
 TCP: Frame Padding

00000: 00 A0 C9 22 F5 39 08 00 02 03 BA 84 08 00 45 00 ...".9........E.
00010: 00 28 D2 94 00 00 3F 06 6B AB C0 5E DE 57 C0 5E .(....?.k..^.W.^
00020: DE 7B 05 48 09 21 CE 66 AE 02 0B 20 96 AD 50 11 .{.H.!.f... ..P.
00030: 70 00 D5 A2 00 00 02 04 05 B4 86 00 p...........

Çerçeve 7:

İstemci, sunucunun FIN değerini aklayıp sıra numarasını 1 artırarak sunucuyla aynı biçimde yanıt verir.


7 17.0085 NTW3 --> BDC3 TCP .A...., len: 0, seq: 8221824-8221824, ack:
1109647, win: 8760, src: 2337 dst: 139 (NBT Session) NTW3 --> BDC3 IP

TCP: .A...., len: 0, seq: 8221824-8221824, ack: 1109647, win: 8760, src:
2337 dst: 139 (NBT Session)

TCP: Source Port = 0x0921
 TCP: Destination Port = 0x0548
 TCP: Sequence Number = 8221824 (0x7D7480)
 TCP: Acknowledgement Number = 1109647 (0x10EE8F)
 TCP: Data Offset = 20 (0x14)
 TCP: Reserved = 0 (0x0000)
 TCP: Flags = 0x10 : .A....

TCP: ..0..... = No urgent data
 TCP: ...1.... = Acknowledgement field significant
 TCP: ....0... = No Push function
 TCP: .....0.. = No Reset
 TCP: ......0. = No Synchronize
 TCP: .......0 = No Fin

TCP: Window = 8760 (0x2238)
 TCP: Checksum = 0x236B
 TCP: Urgent Pointer = 0 (0x0)

00000: 00 20 AF 47 93 58 00 A0 C9 22 F5 39 08 00 45 00 . .G.X...".9..E.
00010: 00 28 BA F5 40 00 80 06 02 4A C0 5E DE 7B C0 5E .(..@....J.^.{.^
00020: DE 57 09 21 05 48 0B 20 96 AD CE 66 AE 03 50 10 .W.!.H. ...f..P.
00030: 22 38 23 6B 00 00 "8#k..

Sunucudan FIN bildirimini alan istemci, TCP bağlantısının düzgün bir şekilde kapatılacağını tanımlar.

Başvurular

RFC 793'i edinin.

RFC'ler İnternet üzerinden aşağıdaki gibi elde edilebilir:

Tüm RFC'lerin kağıt kopyaları tek tek veya abonelik temelinde NIC'den edinilebilir (daha fazla bilgi için iletişim ).NIC@NIC.DDN.MIL Çevrimiçi kopyalar FTP veya Kermit aracılığıyla NIC.DDN.MIL rfc/rfc####.txt veya rfc/rfc####.PS (#### başında sıfır olmayan RFC numarasıdır) olarak kullanılabilir.