탕구리's 블로그

TCP의 연결과 종료_3-way-handshake & 4-way-handshake 본문

Conception/Computer Network

TCP의 연결과 종료_3-way-handshake & 4-way-handshake

탕구리당 2019. 2. 25. 15:12
반응형


시작하기 전에

해당 블로그에 작성되는 글은 주인장의 지극히 주관적인 생각이 다수이며, 대부분의 지식은 구글링을 통해 얻고 있기 때문에 옳지않은 정보가 있습니다. 

잘못된 부분이나 수정해야 하는 부분이 있다면 과감히 덧글을 남겨주세요! 모르는게 많은 새싹입니다



오늘의 주제

오늘의 주제는 바로 전글에서 다뤘던 HTTP는 무엇인가요?에서 언급했던 3-way-handshake4-way-handshake 입니다. HTTP 요청이 발생하기 전 준비되는 과정과 HTTP 통신이 종료되는 과정에 대해서 알아보도록 하겠습니다.



HTTP? 3-way? 4-way?


http 통신이 이루어지는 과정은 아래와 같습니다.



두 노드간 세션을 확립하기 위해 3-way-handshake 과정을 통해 이루어 지고,

세션 종료를 위해 4-way-handshake 과정을 진행합니다.


언제, 어떤 행위가 이루어 지는지 간단하게 확인해봤습니다.

각각의 시점에서 이루어지는 행위에 대해서 자세하게 알아봅시다.



3-way-handshake

3-Way-Handshake는 TCP 장치들 사이에 논리적인 접속을 정립하기 위해 사용합니다.

TCP/IP 프로토콜을 이용하여 통신을 할 때, 응용프로그램과의 통신이 이루어 지기 전에 정확한 전송을 보장하기 위해 대상이 되는 컴퓨터 사전의 세션을 수립하는 과정입니다.


여기서 말하는 논리적인 정립이란, 나는 준비됐어 너는 준비됐어? OK!!! 그럼 레고~!  뭐 이런 느낌입니다.



그림을 보면서 이해를 도와봅시다.





1.  TCP client는 접속 요청을 하기 위해 TCP server에게 SYN(n) 패킷을 전송합니다.

2. SYN 메시지를 받은 TCP server는 SYN(n+1) 메시지와 함께 메시지를 확인하는 ACK(m) 패킷을 함께 전송 합니다.

3. TCP server로 부터 날아온 SYN과 ACK를 TCP client가 수락한 후 다시 응답 ACK(m+1)을 전송하면 두 노드 establish 됩니다.


*SYN(Synchronize sequence number) : 연결을 요청하고 세션을 성립하는데 이용된다.

*ACK(Acknowledgement) : 받은 시퀀스 번호에 TCP 계층의 길이 또는 양을 더한 것 과 같은 값을 ACK 담아 전송한다.


즉,  양측간의 세션이 정립되고 통신할 준비가 완료되었음을 알 수 있습니다.

위의 과정이 3-way-handshake의 전부 입니다.



4-way-handshake

3-way-handshake가 통신의 시작을 위한 작업이라면, 반대로 4-way-handshake는 통신의 종료를 위한 일련의 과정입니다. 즉, TCP간의 세션을 종료하기 위한 과정입니다.


그림은 다음과 같습니다.



1. Client에서 종료를 알리는 FIN FLAG를 서버로 전송합니다.

2. FIN 패킷을 정상적으로 받았다는 ACK를 Client에 전송해 줍니다. 그후 Server는  CLOSE-WAIT 상태로 빠져듭니다.

3. 연결을 종료한 후 Server는 Client에게 FIN FLAG를 전송해 줍니다.

4. Server로 부터 전송된 FIN FLAG를 받은 Client는 확인을 알리는 ACK를 서버로 전송한 후, 일정 시간 동안 TIME-WAIT상태에 빠지게 됩니다.

5. Client로 부터 ACK를 받은 Server는 소켓을 Close하고, 두 TCP간의 세션이 종료됩니다.

6. TIME-WAIT에 빠진 Client는 Server로 부터 FIN을 수신하더라도, 일정시간동안 세션을 유지하며 도착하지 않은 패킷을 기다린다.



* FIN(finish) : 세션의 종료를 알리며 더 이상 보낸 데이터가 없음을 표시합니다.



이렇게 HTTP 통신을 시작하며 TCP간의 세션을 연결할 때는 3-way 과정을 통해서, TCP간의 세션을 종료할 때는 4-way 과정을 통해 종료됩니다. 



TCP 통신 과정에서 오류가 발생하는 다양한 경우에 대해서는 여기를 참고하시면 좋을 것 같습니다.

반응형
Comments