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:
-
İlk
olarak client istekte bulunacağı server'a içerdiği ISN (Initial
Sequence Number) verisini kendisini tanıtmak üzere “syn”
paketini gönderir.
-
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.
-
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/
İlk
olarak client istekte bulunacağı server'a içerdiği ISN (Initial
Sequence Number) verisini kendisini tanıtmak üzere “syn”
paketini gönderir.
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.
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
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.
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/
Faydalı bilgiler vermişsiniz teşekkürler :)
YanıtlaSilBöyle blog sayfasına can kurban
YanıtlaSil