TCP 3 way handShake
핸드셰이킹을 직역하면 주고받기라고 합니다. 정보 기술과 전기 통신 및 관련 분야에서 채널에 대한 정삭적인 통신이 시작되기 전에 두 개의 실체 간에 확립된 통신 채널의 변수를 동적으로 설정하는 자동화된 협상 과정입니다. 채널의 무리적인 확립이 잇따르며, 정상적인 정보 전송 이전에 이루어집니다.
3방향 핸드셰이크
1단계 - SYN(동기화) -> 1. X가 Y에게 Y야 내 말 잘 들리니?
프로세스는 클라이언트가 SYN 플래그가 설정된 TCP 패킷을 서버로 보내는 것으로 시작됩니다. 이 패킷은 연결을 설정하려는 클라이언트의 의도를 나타내며 데이터 새그먼트를 고유하게 식별하는 데 도움이 되는 ISN(초기 시퀀스 번호)도 포함합니다.
2단계 - SYN-ACK(동기화 승인)-> 2. Y가 X에게 응 잘 들려 X야 너도 내 말 잘 들리니?
SYN 패킷을 수신하면 서버는 SYN 및 ACK 플래그가 모두 설정된 TCP 패킷으로 응답합니다. 승인번호는 클라이언트의 ISN + 1로 설정되며 서버도 자체 ISN을 선택합니다.
3단계 - ACK(승인) -> 3. 응 잘 들려! 과 같은 방법
마지막으로 클라이언트는 ACK 플래그가 설정된 TCP 패킷을 전송하여 서버의 응답을 확인합니다. 승인번호는 서버의 ISN + 1로 설정됩니다.
2 way여도 충분하지 않나?
3-way handShake는 양방향 통신을 확립하기 위해 필요합니다. 2-way handShake는 양쪽의 호스트가 각자의 초기 시퀀스 번호를 설정하고 서로 확인하는 과정만 수행됩니다. 이 경우 한쪽 호스트가 데이터를 전송할 수 있지만, 다른 쪽 호스트는 아직 데이터를 전송할 수 없기 때문입니다. 하지만 TCP는 양방향 통신을 지원하는 프로토콜로 양쪽 호스트가 모두 데이터를 안전하게 전송할 수 있어야 합니다. 따라서 3-way handShake는 양쪽 호스트가 초기 시퀀스 번호를 설정하고 서로 확인함으로써 양방향 통신을 설정한느 과정을 보장하며 이러한 이유로 TCP handShake는 3-way로 설계되었습니다.
// 참고 tcp - 3 방향 핸드 셰이크가 필요한 이유는 무엇입니까? 왜 그냥 2-way가 아닌가요? - 네트워크 엔지니어링 스택 교환 (stackexchange.com)
TCP 4 way handShake
3 way는 TCP를 연결을 시작하고 초기화할 때 사용하지만 4-way는 handshake는 세션을 종료하기 위해 수행되는 과정입니다.
TCP 연결 종료 과정
Client가 연결 종료를 원하는 것을 나타내기 위해 FIN 플래그를 설정한 패킷을 서버에게 전송합니다. 이때, Client의 상태는 FIN-WAIT-1이 됩니다.
서버는 FIN패킷을 수신하고, 확인을 의미하는 ACK 패킷을 CLIENT에게 보내고 이때 서버의 상태는 CLOSE-WAIT가 됩니다. 이로써 서버는 더 이상 데이터를 전송하지 않겠다는 의사를 표현합니다.
클라이언트는 서버로부터 ACK를 수신하고, 서버로부터 받은 FIN에 응답하기 위해 FIN 플래그를 설정한 패킷을 전송합니다. 이때 클라이언트의 상태는 FIN-WAIT-2가 됩니다.
서버는 클라이언트로부터 FIN을 수신하고, 이에 대한 확인을 의미하는 ACK를 보냅니다. 이후 서버는 종료 준비가 끝나 상태이며, 클라이언트의 FIN에 대한 응답으로 ACK를 보내는 것으로 종료가 완료됩니다. 이때 서버의 상태는 CLOSED가 되며 클라이언트는 TIME-WAIT상태로 변경됩니다.
클라이언트는 TIME-WAIT상태에 진입하며, 일정시간 동안 로컬 보트는 새로운 연결을 수립할 수 없습니다. 이는 이전 연결이 완전히 종료되고 재사용 가능한 상태가 되는 것을 기다립니다.
TIME-WAIT 상태에서 클라이언트는 의도치 않은 에러로 인한 데드락을 방지하고 만약 에러로 인해 종료가 진여 되다가 타임아웃이 발생하면 CLOSED 상태로 변경됩니다.
'BackEnd > 인터넷' 카테고리의 다른 글
Session (0) | 2024.01.13 |
---|---|
Cookie (0) | 2024.01.11 |
DNS와 그 작동원리 (0) | 2023.08.16 |