우노
[Network] TCP 의 3-Way Handshaking, 4-Way Handshaking 이란? 본문
Network & Security/Concept
[Network] TCP 의 3-Way Handshaking, 4-Way Handshaking 이란?
운호(Noah) 2022. 6. 10. 19:09들어가기 앞서,
- 3-Way Handshaking 과정은, TCP 프로토콜 통신을 ‘연결’하기 위한 과정이고
- 4-Way Handshaking 과정은, TCP 프로토콜 통신을 ‘종료’하기 위한 과정입니다.
3-Way Handshaking
패킷을 전송하기 전, TCP는 연결지향형 프로토콜이기 때문에, 송신측과 수신측이 서로 연결되는 작업이 필요합니다.
- 이러한 작업을 3 Way Handshaking 이라고 부릅니다.
- 3 Way Handshaking 을 수행하기 위해서는, TCP 헤더에 표시한 플래그들이 사용되며, 이러한 플래그들을 컨트롤 비트라고 부릅니다.
3 Way Handshaking 은 SYN(동기화) 과 ACK(승인) 로 진행됩니다.
- 먼저, 클라이언트는 서버에게, 접속을 요청하는 SYN 패킷을 보냅니다.
- 서버는 SYN 패킷을 받고, 클라이언트에게 요청을 수락한다는 ACK 와 SYN 플래그가 설정된 패킷을 보냅니다.
- 클라이언트는 다시 서버에게 ACK 패킷을 보냅니다.
- 이제 3 Way Handshaking 으로 기기 간 연결이 성립되었으니, 데이터 통신이 가능해집니다.
4-Way Handshaking
패킷 통신이 끝났다면, TCP 연결을 종료해야합니다.
- 여기서도 TCP의 컨트롤 비트가 사용되며, 해당 단계에서는 ACK(승인), FIN(종료) 플래그가 사용됩니다.
클라이언트와 서버의 연결 종료 작업을 4 Way Handshaking 이라고 부릅니다.
- 먼저, 클라이언트는 서버에게, 연결을 종료하겠다는 의미인 FIN 패킷을 전송합니다.
- 서버는 클라이언트에게 ACK 패킷을 보내고, 클라이언트가 보냈던 요청들에 대해 마저 응답을 보냅니다.
- 이후, 서버의 응답이 끝나면 클라이언트에게 FIN 패킷을 전송합니다.
- 클라이언트는 서버의 통신 종료를 확인한 뒤, 서버에게 ACK 패킷을 전송하고, 연결이 종료됩니다.
하지만, 서버가 클라이언트에게 FIN 을 보내는 과정에서 한가지 문제가 발생할 수 있습니다.
- 서버가 클라이언트에게 FIN 을 보내기 전에, 이전에 서버가 클라이언트에게 응답 했던 패킷이 FIN 보다 늦게 도착할 수도 있습니다.
- 그렇게 되면, 클라이언트가 서버의 일부 응답을 받지 못하게 됩니다.
따라서, 클라이언트는 서버로부터 FIN 패킷을 받고, ACK 패킷을 보낸 뒤에도,
일정 시간동안 혹시나 아직 도착하지 않은 잉여 패킷을 기다립니다.
- 이렇게, 4 Way handshaking 이후에도 소켓을 닫지 않고 잉여패킷을 기다리는 상태를, TIME_WAIT 이라고 합니다.
참고
- https://brunch.co.kr/@wangho/6#comment
- https://nordvpn.com/ko/blog/tcp-ip-protocol/
- https://velog.io/@rosewwross/TCPIP
- https://coding-factory.tistory.com/613
- https://data-study-clip.tistory.com/110
- https://hahahoho5915.tistory.com/15
- https://hwannny.tistory.com/117
- https://m.blog.naver.com/soojin_2604/221950485931
- https://www.youtube.com/watch?v=BEK354TRgZ8
- https://www.wisewiredbooks.com/csbooks/ch3-network-internet/tcp-ip-intro.html
- https://junu0516.github.io/posts/tcp_ip_4계층/
- https://devlopsquare.tistory.com/233
- https://velog.io/@pu1etproof/네트워크-스터디-3주차-TCP-3-way-handshake-이후
'Network & Security > Concept' 카테고리의 다른 글
[Network] OpenID Connect(OIDC), OAuth 2.0 차이 (0) | 2023.02.18 |
---|---|
[Network] HTTP 상태 코드 (0) | 2023.02.18 |
[Network] www.google.com 접속 흐름 (0) | 2022.06.10 |
[Network] TCP/IP 와 TCP/IP 4계층이란? (1) | 2022.06.10 |
[Network] 패리티 비트와 해밍 코드 (0) | 2021.12.14 |
Comments