TCP lub Transmission Control Protocol to standardowy protokół warstwy transportowej, którego Internet używa do przesyłania danych. Request for Comments (RFC) 793 definiuje protokół TCP jako niezawodny i zorientowany na połączenie protokół. Ponieważ jest zorientowany na połączenie, przed przesłaniem jakichkolwiek danych należy ustanowić ścieżkę lub połączenie. TCP wykorzystuje trójstronny mechanizm uzgadniania do nawiązywania połączenia między dwoma urządzeniami. W tym przewodniku zobaczymy, jak działa mechanizm uzgadniania trójstronnego. Przyjrzyjmy się najpierw problemom z modelem dwukierunkowego uścisku dłoni.
Problemy z dwukierunkowym modelem uścisku dłoni
Dwukierunkowy model uzgadniania nie powiódł się z powodu starego problemu z duplikatem pakietu. Załóżmy, że stary zduplikowany pakiet dociera do serwera. Ten stary pakiet przybył z poprzednio zamkniętego połączenia i zawiera numer sekwencyjny „z”. W pewnym momencie nowego połączenia serwer przyjmuje pakiet o numerze sekwencyjnym 'z'. Kiedy otrzymuje ten stary pakiet o tym samym numerze sekwencyjnym „z”, nieświadomie akceptuje ten stary pakiet i odrzuca aktualny pakiet z nowego połączenia.
W powyższym przypadku, jeśli połączenie między klientem a serwerem nie jest nawiązywane, nadejście starego zduplikowanego pakietu żądania połączenia nadal powoduje problemy. Jeśli serwer otrzyma taki pakiet, odpowie pakietem SYN+ACK. Ten pakiet zostanie odrzucony przez klienta, ponieważ nie zamierza się połączyć. Ale serwer wejdzie w stan impasu, czekając, aż klient wyśle dane.
Innym problemem jest to, że jeśli host C wyśle żądanie połączenia do serwera podszywając się pod klienta, serwer odpowie klientowi ACK. Klient odrzuci ten pakiet „ACK” i powie serwerowi, aby zakończył połączenie. Podczas tego okresu zdarzeń host C może przeprowadzić atak fałszowania, wysyłając wiele pakietów.
Model trójdrożnego uścisku dłoni w TCP/IP
Bardzo ważny jest model trójstronnego uścisku dłoni. Jeśli go nie użyjemy i zaczniemy bezpośrednio wysyłać dane, aplikacja odbierająca może zacząć odbierać zduplikowane pakiety. Atakujący może mieć szansę na przeprowadzenie ataków (takich jak DDoS) pomiędzy połączeniem. Procedurę trójetapowego uzgadniania uruchamia jedna maszyna, a druga strona na nią reaguje. W celu wyjaśnienia tej procedury zastosowano następującą konwencję:
„Jeżeli strona otrzyma pakiet o numerze sekwencyjnym 'x', odpowie numerem ACK 'x+1'.”
Podsumujmy kroki wykonywane podczas trójetapowego uzgadniania między komputerem klienckim a serwerem:
Krok 1. W pierwszym uzgadnianiu klient wysyła do serwera pakiet żądania połączenia SYN z losowym początkowym numerem sekwencyjnym ('x').
Krok 2. W drugim uzgadnianiu serwer odpowiada pakietem SYN, który ma losowy numer sekwencyjny („y”) i pakietem ACK z numerem sekwencyjnym („x+1”), aby potwierdzić wysłany początkowy numer sekwencyjny („x”) przez klienta.
Krok 3. W trzecim uzgadnianiu klient wyśle pakiet ACK z numerem sekwencji ('y+1') do serwera w celu potwierdzenia pakietu SYN ('y') wysłanego przez serwer.
Krok 4. Oba końce są teraz zsynchronizowane i mogą niezależnie rozpocząć transmisję danych. [1]
Procedura trójstronnego uzgadniania TCP jest nadal ważna, jeśli obie strony jednocześnie rozpoczną proces inicjalizacji. W takiej sytuacji każda maszyna po wysłaniu pakietu „SYN” otrzyma segment „SYN” bez potwierdzenia. Jeśli stary zduplikowany pakiet „SYN” dotrze do odbiorcy, może wydawać się odbiorcy, że w tym samym czasie trwa proces inicjacji połączenia. Możemy użyć pakietów „reset”, aby usunąć tę niejednoznaczność.
Zakończenie połączenia TCP
Każda z dwóch stron może zakończyć połączenie TCP. W tym celu każda strona może przesłać segment TCP z ustawionym bitem FINFIN. Oznacza to, że strona wysyłająca nie ma już żadnych danych do wysłania. Strona odbierająca potwierdzi ten pakiet FIN, wysyłając pakiet potwierdzający. Spowoduje to zamknięcie połączenia z jednej strony (strony nadawcy). Teraz odbiorca wykona te same kroki, aby zakończyć połączenie w swoim imieniu. To całkowicie zamknie połączenie.
Problemy z modelem trójetapowego uścisku dłoni
W przypadku utraty lub zablokowania ACK z klienta do serwera w trzecim etapie uzgadniania, klient nie będzie świadomy tej sytuacji. Klient założy, że połączenie zostało nawiązane i rozpocznie wysyłanie danych. Serwer nadal czeka na ACK, które już zostało utracone, więc odrzuci dane otrzymane od klienta. [2]
Wniosek
W tym przewodniku poznaliśmy procedury połączenia TCP przy użyciu trójstronnego uzgadniania. Widzieliśmy również problem zduplikowanych pakietów związanych z procedurą dwukierunkowego uzgadniania i jak został on rozwiązany w modelu uzgadniania trójstronnego. Wielu badaczy wniosło różne artykuły badawcze dotyczące ulepszenia modelu trójstronnego uścisku dłoni i przezwyciężenia związanych z nim problemów .
Bibliografia
- Hsu, F., Hwang, Y., Tsai, C., Cai, W., Lee, C., & Chang, K. (2016). TRAP: Trójkierunkowy serwer uzgadniania do nawiązywania połączenia TCP. Nauki stosowane, 6(11), 358. https://doi.org/10.3390/aplikacja6110358
- Qin-Min Ma, Shou-Yin Liu, Xiao-jun Wen. (2016). Protokół TCP Three-Way Handshake oparty na splątaniu kwantowym. Journal of Computers, 27 (3), 33-40, doi:10.3966/199115592016102703004