[Tistory] [Network] TCP 연결 및 해제 과정 (3 way-handshake & 4 way-handshake)

원글 페이지 : 바로가기

0. TCP TCP는 전송 계층(Transport Layer)에서 사용되는 프로토콜이다. 장치들 사이에 논리적인 접속을 성립(Establish)하기 위하여 연결을 설정 높은 신뢰성을 제공하고 연결 지향성 서비스를 제공한다. 정보 전달에 있어 안정적으로, 순서대로, 에러 없이 데이터를 교환을 목적으로 한 프로토콜 위의 안정적이고 논리적인 특징을 만족하기 위해 TCP의 경우 handshake를 사용한다. 1. TCP의 3 way-handshake 1-1. TCP의 3 way-handshake 역할 3 way-handshake는 TCP 통신을 이용해 데이터 전송 전 정확한 전송을 보장하기 위해 사전에 세션을 수립하는 과정 클라이언트와 서버 모두 데이터를 전송하고 받을 준비가 되었다는 것을 보장한다. 실제로 데이터 전달이 시작되기 전에 한쪽에서 다른 쪽이 준비되었다는 것을 알 수 있다. 1-2. 플래그 정보 3 way-handshake의 플래그 정보는 SYN, ACK, FIN 3가지가 있다. SYN (Synchronize Sequence Number) 연결 설정을 나타내는 플래그 TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷 Sequence Number를 랜덤으로 설정하여 세션을 연결하는데 사용하며, 초기 Sequence Number를 전송한다. ACK (Acknowledgement) 응답 확인을 나타내는 플래그 상대방으로부터 패킷을 받았다는 것을 알려주는 패킷 Acknowledgement Number 필드가 유효한지 나타낸다. 클라이언트가 보내는 SYN 패킷 이후 전송되는 모든 패킷은 이 플래그가 설정되어야 한다. 양단 프로세스가 쉬지 않고 데이터를 주고 받는다면, 최초 연결 설정 과정에서 전송되는 첫번째 세그먼트를 제외한 모든 세그먼트의 ACK 비트는 1로 지정한다고 생각하자. FIN (Finish) 연결 해제를 나타내는 플래그 세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없음을 의미 1-3. 포트 상태 정보 3 way-handshake의 포트 상태는 CLOSED, LISTEN, SYN_SENT, SYN_RECEIVED, ESTABLISHED 5가지가 있다. CLOSED : 포트가 닫힌 상태 LISTEN : 포트가 열린 상태로 연결 요청 대기 상태 SYN_SENT : SYN 요청을 한 상태 SYN_RECEIVED : SYN 요청을 받고 상대방의 응답을 기다리는 상태 ESTABLISHED : 포트 연결 상태 1-4. TCP의 3 way-handshake 동작 과정 SYN (Client → Server) 서버에 접속을 요청하는 SYN 패킷을 전송한다. 송신자가 최초로 데이터를 전송할 때, 시퀀스 넘버를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다. 클라이언트는 SYN 패킷을 전송한 뒤, SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다. SYN/ACK (Server → Client) LISTEN 상태인 서버가 SYN 패킷을 받고 클라이언트에게 요청을 수락(ACK)하며 접속 요청 프로세스인 클라이언트의 포트를 열어달라는 메시지(SYN)를 전송한다. ACK Number 필드를 “시퀀스 넘버 + 1” 로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트 전송한다. SYN 패킷을 받은 서버는 SYN_RECEIVED 상태가 된다. ACK (Client → Server) 클라이언트는 서버의 응답을 받았다는 의미로, ACK Number 필드를 “시퀀스 넘버 + 1″로 지정하고, 서버로 ACK 플래그가 설정된 세그먼트를 전송한다. ACK 요청을 보낸 클라이언트는 ESTABLISHED 상태가 된다. ACK 요청을 받은 서버는 ESTABLISHED 상태가 된다. 1-5. 3 way-handshake 사용 이유 TCP는 연결 지향적 프로토콜로 안정적인 데이터 전송을 위해 신뢰성을 확보하는데 중점을 둠 TCP는 양방향 통신이기 때문에 양쪽 모두 상대방에게 패킷을 보낼 수 있는지 확인 클라이언트와 서버 모두 한 번씩 SYN 와 ACK를 주고받으며 데이터 수신 여부를 확인 논리적으로 총 네 단계가 필요한데, 서버의 SYN + ACK를 한 단계로 축약하여 세 단계를 가짐 2. TCP의 4 way-handshake 2-1. TCP의 4 way-handshake 역할 위의 3 way-handshake의 역할이 안정적인 세션을 수립하는 과정이었다면, 4 way-handshake는 세션을 안정적으로 종료하기 위한 과정이라고 생각할 수 있다. 즉, 4 way-handshake는 TCP 통신 연결을 단계적으로 해제하는 과정이다. 2-2. 포트 상태 정보 4 way-handshake의 포트 상태는 FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2,LAST_ACK, TIME_WAIT 5가지가 있다. FIN_WAIT1 : Close()를 호출 후 FIN 패킷을 보내고 응답을 대기하는 상태 CLOSE_WAIT : 종료 요청을 받고 진입하는 상태로 남은 데이터가 있다면 전송을 마친 후 Close() 호츨 FIN_WAIT2 : 종료를 준비한다는 응답을 받고 종료 요청이 올 때 까지 대기하는 상태 LAST_ACK : 모든 데이터를 보내고 FIN 패킷을 전송한 후 상대방의 응답을 대기하는 상태 TIME_WAIT : FIN 패킷을 받은 후 다시 ACK 응답을 한 이후의 상태로, 의도치 않은 에러로 인해 연결이 데드락에 빠지는 것을 방지한다. 2-3. TCP의 4 way-handshake 과정 FIN (Client → Server) close() 가 호출되면 연결을 종료하겠다는 FIN 패킷을 전송한다. FIN 패킷에는 ACK가 포함되어 있다. FIN 패킷을 보낸 후 클라이언트는 FIN_WAIT1 상태가 된다. ACK (Server → Client) FIN 패킷을 받은 서버는 응답 패킷 ACK를 보낸다. 아직 남은 데이터가 있다면 전송을 모두 마친 뒤 close()를 호출한다. 응답 패킷 ACK를 보낸 후 서버는 CLOSE_WAIT 상태가 된다. 응답 패킷 ACK를 받은 후 클라이언트는 FIN_WAIT2 상태가 된다. FIN (Server → Client) 2번에서 남은 데이터를 모두 보낸 뒤, 서버는 FIN 패킷을 클라이언트에게 보낸 후 클라이언트가 승인 번호를 보내줄 때 까지 기다리는 LAST_ACK 상태가 된다. ACK (Client → Server) 클라이언트는 FIN 패킷을 받고 확인이 완료되었다는 ACK 응답을 보낸다. ACK 응답을 보낸 후 클라이언트는 TIME_WAIT 상태가 된다. 이때, TIME_WAIT 상태는 의도치 않은 에러로 인해 연결이 데드락에 빠지는 것을 방지한다. 만약 에러로 인해 종료가 지연되다가 시간 초과가 발생하면 CLOSED 상태로 돌아간다. 서버는 ACK 패킷을 받은 후 소켓을 닫는다. (CLOSED) 3. TCP에서 3 way-handshake / 4 way-handshake 의미 결론적으로 3 way-handshake는 TCP의 연결 과정을 의미하고, 4 way-handshake는 TCP의 연결 해제 과정을 의미한다. 이렇게 3 way-handshake, 4 way-handshake를 통해 TCP 통신은 안정적이고 순서대로, 논리적으로 데이터를 주고 받을 수 있다. 더보기 REF https://ghs4593.tistory.com/18 TCP 3-way HandShake & 4-way HandShake TCP란? TCP는 Transport Layer에서 사용되는 프로토콜이다. TCP는 신뢰성이 높고 연결 지향성 서비스를 제공한다. 그러므로 정보 전달에 있어 안정적으로, 순서대로, 에러 없이 교환할 수 있도록 하는 ghs4593.tistory.com https://yubh1017.tistory.com/81 [Network] TCP의 연결 설정 및 해제 과정 (3-way Handshake & 4-way Handshake) TCP란? TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜 로서, 장치들 사이에 논리적인 접속을 성립(Establish) 하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스이다. TCP 3-way yubh1017.tistory.com https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake [ 네트워크 쉽게 이해하기 22편 ] TCP 3 Way-Handshake & 4 Way-Handshake 우선 TCP의 3-way Handshaking 에 대하여 알아보겠습니다. * TCP 3-way Handshake 란? TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다. TCP 3 Way Handshake는 TCP/IP프로토 mindnet.tistory.com https://velog.io/@alkwen0996/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCP-3-way-handshake-4-way-handshake [네트워크] | TCP 3 way handshake & 4 way handshake TCP(Transmission Control Protocol) > TCP는 전송계층에서 동작하는 프로토콜로 송신지와 수신지가 연결된 상태에서 데이터를 주고 받는 연결 지향적 프로토콜이다. 데이터를 전송하기 전 송신지와 수신 velog.io https://velog.io/@yeseolee/3-Way-4-Way-HandshakeTCP-%EC%97%B0%EA%B2%B0-%EC%84%A4%EC%A0%95%EA%B3%BC-%ED%95%B4%EC%A0%9C 3-Way, 4-Way Handshake(TCP 연결 설정과 해제) 3-Way, 4-Way Handshake로 알아보는 TCP 연결 설정과 해제 과정. 왜 연결 시에는 3 Step, 해제 시에는 4 step을 거치는가. TIME_WAIT 상태가 필요한 이유. 시퀀스 번호를 랜덤으로 초기화하는 이유. velog.io

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다