만남과 이별에는 항상 "악수"가 따른다

H43RO·2021년 10월 11일
23

CS 뿌셔먹기

목록 보기
11/17
post-thumbnail

필자는 이전에 TCP 에 대해서 잠시나마 언급한 적이 있다. TCP는 연결지향적이고 패킷의 정확한 전달을 위해 사용되는 프로토콜인 만큼, 통신의 연결과 종료에 있어서도 지켜져야 할 시퀀스가 있다. 그렇지 않으면 막무가내로 통신을 연결하고, 막무가내로 통신을 종료하여 패킷들이 언제부터 들이닥칠지, 언제부터 패킷이 끊겨버릴지 모르기 때문이다. 이번 포스팅에선 TCP 통신에 있어 연결을 성립하고 해제하는 과정을 통칭하는 3-way Handshake 와 4-way Handshake 에 대해 알아보고자 한다.

해당 포스팅에 사용된 이미지는 필자가 직접 제작한 것이므로 자유롭게 퍼가셔도 됩니다


3-way Handshake

TCP 의 연결 성립 과정을 칭하는 용어이다.

만나서 반갑습니다 ㅎㅎ 하고 악수 3번 조지는 것이다. 마냥 반가워서 악수하는 건 아니고, 악수 한 번 한 번에 의미가 담겨있다. 이에 대해 살펴보자.

  1. 클라이언트가 서버에게 SYN 패킷 전송 (SEQ = X)

  2. 서버가 SYN(X) 를 수신하고, 클라이언트에게 SYN 을 잘 받았다는 의미로 ACK 과 SYN 패킷 전송
    (SEQ : Y, ACK : X + 1)

  3. 클라이언트는 서버로부터 온 ACK(X + 1) 과 SYN(Y) 패킷을 수신하고, ACK(Y + 1) 을 서버로 전송

위처럼 3번의 통신을 끝마치면, 종단 간의 연결이 성립되는 것이다. 이 때부터 실제 패킷을 주고받게 된다.


4-way Handshake

TCP 의 연결 해제 과정을 칭하는 용어이다.

아쉽네요 다음에 또 봐요 ㅠㅠ 하고 아쉬운만큼 악수 4번 조지는 것이다. 마찬가지로 악수 각각에 의미가 있다.

  1. 클라이언트는 서버에게 '저 이제 끊을게요' 하는 의미로 FIN 플래그를 전송

  2. 서버는 FIN 을 수신하고, '알겠어용' 하는 의미로 클라이언트에게 ACK 으로 답장
    남은 데이터를 마저 보내기 위해 CLOST_WAIT 상태로 전환

  3. 이후 데이터를 모두 보냈다면, 연결이 종료됐다는 FIN 플래그를 클라이언트에게 전송

  4. 클라이언트는 해당 FIN 을 수신하고 확인했다는 의미로 ACK 을 서버로 전송
    → 혹시나 아직 안 온 데이터가 있을 수 있기 때문에 이를 대기하기 위해 TIME_WAIT 상태로 전환

서버가 클라이언트로부터 ACK 을 수신했다면, 소켓을 닫게 된다. 그리고 TIME_WAIT 시간이 끝나면 클라이언트도 소켓을 닫게 된다. 이로써 통신이 완벽히 해제되는 것이다.

통신이 총 4번 이루어지기 때문에 4-way Handshake 라는 용어를 사용한다.


이렇듯 통신의 연결과 해제에 있어 데이터의 신뢰성을 확보해줄 수 있지만, 당연하게도 이 작업들도 오버헤드가 있기 때문에 TCP 통신은 실시간성 서비스에 부적합하다. 따라서 위와 같은 Handshake 과정이 필요없는 UDP 프로토콜의 경우 실시간성 서비스에 적합하게 되는 것이다.

다음 포스팅에선 TCP 통신 의 흐름 제어 기법에 대해 알아보고자 한다.

profile
어려울수록 기본에 미치고 열광하라

5개의 댓글

comment-user-thumbnail
2021년 10월 14일

ㅋㅋㅋㅋ이미지 정말 귀엽네요ㅠㅠ 좋은 글 감사합니다!

답글 달기
comment-user-thumbnail
2021년 10월 14일

ㅋㅋㅋㅋ이미지 정말 귀엽네요ㅠㅠ 좋은 글 감사합니다!

1개의 답글
comment-user-thumbnail
2024년 2월 26일

사진이 너무 귀엽네요
https://tunnel-rush.io

답글 달기
comment-user-thumbnail
2024년 12월 9일

Every meeting and parting comes with a handshake. It’s like in Friday Night Funkin—every rhythm of connection has its ups and downs. Just as players navigate each challenging battle, we navigate life's encounters, learning to embrace both the joyous greetings and the bittersweet farewells. https://fridaynightfunkingame.io

답글 달기