TCP Bağlantı Oluşturma, 3-Way Handshake ?

TCP 3-way Handshake Nedir?
 2-way Yeterli Değil mi ?


TCP doğası gereğince güvenilir (reliable) bir transfer sağlaması açısında öncelikle transferi uygulayacağı tarafla önceden bir bağlantı kurması gerekmektedir. Bu arada bu güvenli terimi “security” anlamındaki terimden uzaktır burdaki güvenli ifadesi paketin emniyetli bir şekilde ulaşması “loss” yaşanmamasıdır. Bu durum için önceden kuracağı bağlantıya terminolojide “3-way handshake” adı verilir. Bu el sıkışma olayının adımları şöyledir:
  1. İlk olarak client istekte bulunacağı server'a içerdiği ISN (Initial Sequence Number) verisini kendisini tanıtmak üzere “syn” paketini gönderir.
  2. Server aldığı “syn” paketini doğrulamak için “ack” paketini ve ayrıca kendini tanıtmak için de kendi ISN'yla birlikte “syn” paketini gönderir.
  3. Son olarak Client aldığı “syn” paketini doğrulamak için bir alındı bilgisi olarak “ack” paketini gönderir.
Client ------SYN-----> Server
Client <---ACK/SYN---- Server
Client ------ACK-----> Server

Adımlar tamamlandıktan sonra aralarındaki bağlantı sağlanmış olur.


Peki neden 2-way olamaz? Neden Client bilgisini gönderip Server'dan bilgi gelince bunlar bağlantı kurmuş kabul edilmez?


TCP'de görüldüğü üzere client ve server bağlantıyı kurma aşamasında iki tarafta kendi “syn” paketlerini göndermektedir. TCP ile kurulan bağlantılar iki tarafın da eş zamanlı olarak veri transferi sağlamasına olanak sağlamalıdır (full-duplex). TCP bağlantıyı kurma aşamasında iki tarafın da “syn” bilgilerine ihtiyaç duyar. Çünkü 1.aşamada Client “syn” paketini gönderdikten sonra kendini Server'a tanıtmış olur ve Server artık Client'a paket gönderimi yapacaktır ve bunun üzerine 2.aşamada Client'ın bilgilerini aldığına dair “ack” paketi ile kendi “syn” paketini gönderir. Bu kısımda yapı full-duplex yapısından uzaktır ve 2 aşamalı olamamasına etkilidir. 3.aşamadaki client server'ın bilgilerini aldığına dair “ack” paketini gönderir ve full-duplex yapısı sağlanmış olup iletişim iki taraf için de imkanlı hale gelmiştir. Eğer sadece iki yönlü olsaydı client sadece server tarafına veri gönderebilecek server sadece verileri alıp geriye bir değer gönderemeyecekti. Server client'ın kendini tanıdığını bilmediğinden (geriye ack bilgisi dönmedi çünkü) client ile bağlantısını aldığı veriden sonra koparıcak. Client her göndereceği paket için bağlantı masrafına girmek zorunda kalacaktır.




Kaynakça:
https://networkengineering.stackexchange.com/questions/24068/why-do-we-need-a-3-way-handshake-why-not-just-2-way
https://www.geeksforgeeks.org/tcp-3-way-handshake-process/

Yorumlar

Yorum Gönder

Bu blogdaki popüler yayınlar

Execution failed for task ':flutter_blue:generateDebugProto'. > Could not resolve all files for configuration ':flutter_blue:protobufToolsLocator_protoc'.

Program Karmaşıklığı Nedir ? Nasıl Ölçülür ? McCabe Karmaşıklık Ölçütü Nedir ?

Algoritma Karmaşıklığı Nedir ? Zaman ve Hafıza Karmaşıklığı Nedir ? Nasıl Hesaplanır ?