[TIL] 3 way handshake, 4 way handshakeCS/CS2023. 6. 8. 17:40
Table of Contents
TCP(Transmission Control Protocol) 통신이란?
📌 Transmission Control Protocol. 전송 제어 프로토콜(transport 계층).
서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜.
- 데이터를 전송하기 위한 연결을 만드는, 연결 지향 프로토콜
- 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때의 중계 역할을 수행
- 패킷 사이의 순서를 보장
- 연결 지향의 프로토콜을 사용해서 연결
- 신뢰성 구축해서 수신 여부를 확인
3 way handshake란?
📌 TCP 연결 성립 과정을 의미
SYN → SYN+ACK → ACK
- TCP의 경우 해당 과정이 있기 때문에 신뢰성이 있는 계층으로 판단됨.
- SYN 세그먼트 전송: 클라이언트는 서버에 난수인 ISN(Initial sequence number 초기 순서 번호)을 담아 SYN(Synchronize Sequence Number 동시 발생 시퀀스 넘버)을 보냄.
- ISN은 매 연결마다 난수로 생성됨(해킹 방지)
- SYN은 TCP 연결을 설정하기 위해 보내는 초대장과 같은 패킷으로, 통신을 시작하는 데 사용
- SYN + ACK(Acknowledgment) 세그먼트 전송: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN+1을 보냄.
- ACK는 TCP에서 데이터의 수신 확인을 나타내는 약어
- ACK 세그먼트 : 특정 데이터 패킷을 수신한 후에 송신 측에서 해당 패킷을 재전송하지 않아도 되는 것
- ACK 단계 : 클라이언트는 서버의 ISN+1값인 승인번호(예상)를 담아 ACK를 서버에 보냄
- 이후에는 ISN에 일정 값을 더하며 TCP연결의 순차성을 보장하는데 활용
- 세그먼트마다 데이터의 크기를 더하여 순차적인 순서 번호를 부여
- "12345678"을 ISN 값으로 사용한다면 첫 번째 패킷의 순서 번호는 "12345678 + 데이터 1의 크기"가 되고, 두 번째 패킷의 순서 번호는 "12345678 + 데이터 1의 크기 + 데이터 2의 크기"가 됨
- 세그먼트마다 데이터의 크기를 더하여 순차적인 순서 번호를 부여
4 way handshake란?
📌 TCP 연결을 종료하는 과정을 의미 FIN → ACK → FIN → ACK
- 클라이언트가 FIN으로 설정된 세그먼트를 보내고, FIN_WAIT_1상태로 들어가서 서버의 응답을 기다림.
- 서버는 클라이언트로 ACK라는 승인 세그먼트를 보내고, CLOSE_WAIT상태에 들어감. 서버의 세그먼트를 받은 클라이언트는 FIN_WAIT2 상태로 바뀜.
- ACK 세그먼트의 Acknowledgment Number는 클라이언트가 마지막으로 전송한 데이터의 시퀀스 번호(Sequence Number)에 1을 더한 값
- 서버는 ACK를 보내고 난 뒤 일정시간 후에 클라이언트에 FIN이라는 세그먼크를 보냄.
- 클라이언트는 TIME_WAIT상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED상태가 됨. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원연결이 해제됨.
- ACK : 서버의 마지막 데이터의 시퀀스 번호에 1을 더한 값
- TIME_WAIT : 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태.
- CentOS6, 우분투에는 60초. 윈도우는 4분. 즉, OS마다 조금씩 다를 수 있다.
TIME_WAIT 상태로 들어가는 이유
- TIME_WAIT 상태는 TCP 연결의 정리와 안정성을 위해 필요한 단계로서, 네트워크의 신뢰성을 향상시키는 역할
- 연결의 완전한 종료: TIME_WAIT 상태는 연결의 완전한 종료를 보장하기 위해 필요합니다. 클라이언트가 마지막 ACK 세그먼트를 보낸 후 일정 시간 동안 TIME_WAIT 상태에 머무는 것으로, 이는 네트워크 상에서 모든 세그먼트가 제대로 처리되고 연결이 확실하게 종료되었음을 보장합니다.
- 중복된 세그먼트 처리: TIME_WAIT 상태는 네트워크 상에서 중복된 세그먼트가 도착할 수 있는 경우에도 대비하기 위해 필요합니다. 이는 클라이언트가 마지막 ACK 세그먼트를 보냈음에도 불구하고 네트워크 지연 등의 이유로 중복된 세그먼트가 도착할 수 있기 때문입니다. 클라이언트가 TIME_WAIT 상태에 머무는 동안 중복된 세그먼트는 버려지고, 이후 동일한 포트를 사용하는 다른 연결과의 혼동을 방지합니다.
- 연결의 순서화: TIME_WAIT 상태는 연결의 순서화를 위해 사용됩니다. 클라이언트가 TIME_WAIT 상태에 머무는 동안, 이전에 사용한 연결의 모든 세그먼트가 네트워크 상에서 완전히 소멸될 수 있도록 합니다. 이렇게 함으로써 클라이언트는 다음 연결을 시작할 때 혼동이나 충돌을 방지하고, 안정적인 통신을 보장합니다.
참고자료
https://yanacoding.tistory.com/entry/CS-TCPIP-4계층-모델이란계층-구조-PDU
'CS > CS' 카테고리의 다른 글
[CS, WEB, HTTP] RESTful API란?(API, REST API, RESTful API) (0) | 2023.06.13 |
---|---|
[JAVA] Static (0) | 2023.06.13 |
[TIL] HTTP 멱등성 (0) | 2023.05.29 |
[TIL] HTTP 메서드 (1) | 2023.05.29 |
[CS] 프로세스(process)와 스레드 (0) | 2022.10.25 |
@Yanako :: Yana's coding story였는데요, 우당탕탕 개발일지가 맞는것같
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!