TCP Üçlü El Sıkışma – TCP Three Way Handshake

Ağ üzerinde TCP bağlantısı kurulmasından sonra oturum işlemleri gerçekleşir. İstemci tarafından başlatılan bu TCP süreci üçlü el sıkışma (Three Way Handshake) olarak adlandırılır. Bu yazıda, TCP üçlü el sıkışma sürecinin adımları incelenecektir.

TCP üçlü el sıkışma adından da anlaşılacağı üzere, 3 adımdan oluşur. Hem son adım, hem de ilk adım hizmeti almak isteyen istemci tarafından gerçekleştirilir. Bu 3 adım gerçekleştikten sonra, sunucu taraf, hizmet vermeye başlar. TCP üçlü el sıkışmayı betimleyen bir şekil aşağıdaki gibidir. Bu şekilde, A istemci tarafı, B ise sunucu tarafı temsil eder.

three-way-handshake-01

TCP üçlü el sıkışmanın adımları yukarıdaki şekile göre şu şekilde özetlenebilir:

  • İlk adım istemci tarafından gerçekleştirilir. İstemci işletim sistemi rastgele bir sıra numarası (Sequence Number) ile sunucuya, SYN (Synchronize) biti / bayrağı “1” olarak ayarlanmış bir paket gönderir. Şekilde sıra numarasının 711 olduğu görülmektedir. Bu sıra numarası sayesinde, paketler TCP iletişimi gerçekleşirken sıralı gelmese bile, alıcı taraf bu paketleri sıraya koymasını sağlar. Özetle; istemci sunucuya SYN bayrağı aktif edilmiş ve sıra numarası 711 olan paketi yollar.
  • İkinci adım sunucu tarafından gerçekleştirilir. İstemcinin gönderdiği paketi alan sunucu, istemciye sonraki paketi hazırlar. Göndereceği paketin SYN (Synchronize) ve ACK (Acknowledgement) bayraklarını “1” olarak ayarlar. Ayrıca, istemciden gelen paketin sıra numarasına bakar ve istemcinin gönderdiği sıra numarasını 1 arttırarak göndereceği paketin ACK numarasını (Acknowledgement Number) 712 olarak ayarlar. Böylece, sunucu taraf (B tarafı), hem gönderdiği paketin, istemci tarafından doğru sıraya koymasını sağlamış olur; hem de istemci tarafın bir sonraki göndereceği ve sunucu tarafından kabul edilecek olan sıra numarası belirtilmiş olur. Diğer bir deyişle, sunucu “sıra numarası 712 olan paketi bekliyorum” diye belirtmiş olur. Benzer şekilde, sunucu işletim sistemi, rastgele bir sıra numarası (Sequence Number) üretir. Şekilde sıra numarasının 641 olduğu görülmektedir. Bu sıra numarası, gönderdiği paketin cevabını doğru sıraya koymak için kullanılacaktır. Özetle; sunucu istemciye SYN ve ACK bayrakları aktif edilmiş ve sıra numarası 641, ACK numarası 712 olan paketi yollar.
  • Son adım istemci tarafından gerçekleştirilir. Sunucunun gönderdiği paketi alan istemci, sunucuya sonraki paketi hazırlar. Göndereceği paketin ACK (Acknowledgement) bayrağını “1” olarak ayarlar. Ayrıca, sunucudan gelen paketin sıra numarasına bakar ve sunucunun gönderdiği sıra numarasını 1 arttırarak göndereceği paketin ACK numarasını (Acknowledgement Number) 642 olarak ayarlar. Bir önceki adımda sunucu tarafından gönderilen ACK numarası (Acknowledgement Number), istemcinin göndereceği paketin sıra numarasına (Sequence Number) eşit olacak şekilde ayarlanır. Şekilde sıra numarasının 712 olduğu görülmektedir. Özetle; istemci sunucuya ACK bayrağı aktif edilmiş ve sıra numarası 712, ACK numarası 642 olan paketi yollar.

Üçlü el sıkışmayı daha iyi anlamak için TCP başlığını (TCP Header) incelemek gerekebilir. TCP başlığı ise şu şekildedir:

three-way-handshake-02

TCP üçlü el sıkışma sürecinin adımlarını uygulamalı olarak görmek için Wireshark aracı kullanılabilir. 10.68.35.150 IP adresli istemci, 10.68.35.250 IP adresli web sunucusundan hizmet alması sırasında gerçekleşen TCP üçlü el sıkışma adımlarına ait Wireshark ekran görüntüleri aşağıdaki gibidir.

ip.addr==10.68.35.250 and tcp

three-way-handshake-03

Not: Sıra numaraları, anlaşılırlığı arttırmak ve sadeleştirme yapmak için, Wireshark varsayılan olarak 0’dan başlatılır. Bu sıra numaralarının orijinal değerleri için “Wireshark > Edit > Preferences… > Protokols > TCP” ekranında “Relative sequence numbers:” seçeneği devre dışı bırakılmalıdır.

three-way-handshake-04

TCP üçlü el sıkışmanın adımları Wireshark üzerinde aşağıdaki gibi izlenebilir.

  • İstemci tarafından hazırlanan ilk pakette, SYN bayrağının aktif edildiği ve rastgele bir sıra numarasının oluşturulduğu görülmektedir.

three-way-handshake-05

  • Sunucu tarafından hazırlanan ikinci pakette, SYN ve ACK bayraklarının aktif edildiği ve ACK numarasının, istemciye ait paketin sıra numarasının bir fazlası; sıra numarasının ise rastgele oluşturulduğu görülmektedir.

three-way-handshake-06

  • İstemci tarafından hazırlanan son pakette, ACK bayrağının aktif edildiği ve ACK numarasının, sunucuya ait paketin sıra numarasının bir fazlası; sıra numarasının ise sunucuya ait paketin ACK numarasına eşit olduğu görülmektedir.

three-way-handshake-07

Aynı iletişime ait sunucu tarafındaki trafik “tcpdump” komut satırı aracı ile izlendiğinde benzer adımların gerçekleştiği görülmektedir.

tcpdump -i eth0 -ttt -vv host 10.68.35.150 and tcp

three-way-handshake-08

Not: Tcpdump aracının çıktısında, bayraklardaki “.” ifadesi ACK bayrağının aktif olduğunu belirtir.

 

Yazarın Bilgileri

Ertuğrul BAŞARANOĞLU
Ertuğrul BAŞARANOĞLU

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kullanabileceğiniz HTLM etiketleri ve özellikleri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Bu sayfada incelenen konulardan doğacak sorunlar kişinin kendi sorumluluğundadır.