Spring, CS 공부 내용 12

김정용·2025년 2월 11일

기술면접 공부

목록 보기
12/15
post-thumbnail

TCP 3-way handshake?

필자는 정보통신공학과를 나오면서 통신과 관련된 과목들을 수강했다.

그 중 많이 나오는 내용이 네트워크에서 통신과 관련된 내용인데 여기서 3-way handshake 의 개념을 접해봤다.

그래서 무엇인가?

TCP/IP 네트워크에서 안정적이고 연결 지향적인 통신을 위해 사용되는 절차이다.

클라이언트와 서버 간에 여러 데이터들을 주고받으며 통신이 되는데 이때 신뢰할 수 있는 연결이 설정되어야 한다.

이때 세그먼트라고 하는 메시지를 교환하며 연결을 체크한다.

SYN 세그먼트

처음으로 클라이언트는 서버와의 연결을 위해 연결을 요청하는 메시지인 SYN 세그먼트를 보낸다.

synchronize의 약자이며, 세그먼트 안에는 순서 번호와 윈드우 크기의 정보가 포함되어있다.

SYN + ACK

요청을 받은 서버는 클라이언트의 요청을 수락하고 SYN과 ACK(acknowledgment) 플래그가 설정된 세그먼트를 클라이언트에 다시 보낸다.

이는 요청을 잘 받았다라는 의미의 답장이라고 생각하면 편하다.

세그먼트에는 서버의 초기 순서번호와 클라이언트의 초기 순서번호에 대한 응답을 포함한다.

클라이언트에서 보낸 순서에 + 1된 값을 답장에 포함하면서 내가 받은 내용이 맞는지를 다시 확인하는 과정이다.

ACK

다시 클라이언트로 돌아와서 클라이언트는 서버에서 받은 답장을 확인하고, ACK 플래그가 설정된 세그먼트를 다시 서버에 보낸다.

서버단에서 보낸 초기번호를 확인하고 마찬가지로 +1 한 값을 ACK에 포함해보내게 된다.

3-handshake 끝

3-handshake 과정이 끝나게 되면 다음과 같은 내용을 얻을 수 있다.
1. 양쪽다 데이터 전송에 필요한 준비가 완료되었다.
2. 서버는 클라이언트의 초기번호, 클라이언트는 서버의 초기번호를 알 수 있다.

이렇게 3방향의 악수(hand-shake)가 끝나면 클라이언트와 서버는 신뢰할 수 있는 연결이 설정되고 데이터 전송을 시작할 수 있다.


연결 종료(4-way handshake)

연결을 할때 3-handshake를 통해 서로를 확인했다면 연결을 끝낼때는 어떻게 할까?

연결이 된 클라이언트와 서버는 데이터를 보내면서 통신을 한다.

데이터 전송이 끝나고 연결이 불필요하면 어떻게 할까? 계속 연결을 할 수 는 없으니까...

연결을 종료 할때는 4-way handshake 과정을 거친다.

  1. 클라이언트가 연결을 끝내고자 할때 서버에게 FIN 플래그를 전송한다.
  2. 서버는 FIN 플래그를 잘 받았다는 답장을 보내고 마지막 데이터가 올때까지 기다린다.
  3. 데이터를 모두 받았으면 나도 끝난것같다는 FIN 플래그를 이번에는 서버-> 클라이언트 방향으로 전송한다.
  4. 마지막으로 FIN 플래그를 받고 클라이언트도 연결 종료에 대한 답장인 ACK를 서버에 보내준다.

마치며

다음과 같은 메시지들을 던지며 연결과 종료를 하게 되는데, 필자가 설명한 부분은 원활하게 연결 및 종료가 된 경우이다.

와야할 응답 메시지가 오지 않는다면 통신 중 문제가 발생했다는 것을 인지할 수 있고 좋은 약속의 형태가 된다.


# 참고 면접 질문 내용과 답변의 일부는 [기술 면접 구독 서비스 - 매일메일](https://www.maeil-mail.kr/) 에 있다. 흥미로웠다면 구독해보는 것도 추천한다!

MDN - TCP 핸드셰이크

profile
누군가의 롤모델이 될 때까지😇

0개의 댓글