728x90
반응형
TCP (Transmission Control Protocol) 란?
- TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜이다.
- TCP는 애플리케이션에게 신뢰적이고 연결지향성 서비스를 제공한다.
- TCP는 연결형 서비스로, 신뢰적인 전송을 보장하기에 hanshaking하고 데이터의 흐름제어와 혼잡제어를 수행한다.
- 하지만 이러한 기능으로 인해 TCP의 속도는 느리다.
- 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용한다.
- IP는 배달을, TCP는 패킷의 추적 및 관리를 하게 된다.
TCP의 3 way handshake & 4 way handshake 란?
- 연결을 성립하고 해제하는 과정을 말한다.
- 3-Way Handshake 는 TCP의 접속, 4-Way Handshake는 TCP의 접속 해제 과정이다.
TCP의 3 Way Handshake 란? (연결 성립)
- 연결하고자 하는 두 장치 간의 논리적 접속을 성립하기 위해 사용하는 연결 확인 방식이다.
- 3번의 확인 과정 (통신)을 거친다고 해서 3 way handshake라고 부른다.
- TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish) 하는 과정이다.
- 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.
- 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
TCP 3 way handshake를 간단히 표현하면 다음과 같다.
- A -> B : 내 말 들려?
- B -> A : 잘 들려. 내 말은 들려?
- A -> B : 잘 들려!
3 Way Handshake의 작동 방식
1. Client → Server : SYN (내 말 잘 들려?)
: 클라이언트가 서버에게 SYN 패킷을 보낸다. (sequence : x)
- 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.
- SYN (synchronize sequence numbers): 연결 확인을 위해 보내는 무작위의 숫자값
2. Server → Client : SYN + ACK (잘 들려. 내 말은 들려?)
: 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보낸다. (sequence : y, ACK : x + 1)
- 접속요청을 받은 Q가 요청을 수락했으며, 접속 요청 프로세스인 P도 포트를 열어달라는 메세지를 전송한다. (SYN-ACK signal bits set)
- ACK Number필드를 Sequence Number + 1 로 지정하고 SYN과 ACK 플래그 비트를 1로 설정한 새그먼트 전송한다. (Seq=y, Ack=x+1, SYN, ACK)
- ACK (acknowledgements): Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK
3. Client → Server : ACK (잘 들려!)
: 클라이언트는 서버의 응답은 ACK(x+1)와 SYN(y) 패킷을 받고, ACK(y+1)를 서버로 보낸다.
- 마지막으로 접속 요청 프로세스 P가 수락 확인을 보내 연결을 맺는다. (ACK)
- 이때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.
- ISN (Initial sequence numbers): Client와 Server가 각각 처음으로 생성한 SYN
TCP의 4 way handshake 란? (연결 해제)
- 연결 성립 후, 모든 통신이 끝났다면 해제해야 한다.
- 3 way handshake와 반대로 가상 회선 연결을 해제할 때 주고 받는 확인작업이다.
- 이 역시 4번의 확인과정(통신)을 거친다고 하여 4 way handshake라고 부른다.
- 4-Way Handshake은 연결을 해제 (Connecntion Termination)하는 과정이다.
TCP 4 way handshake를 간단히 표현하면 다음과 같다.
- A -> B: 나는 다 보냈어. 이제 끊자!
- B -> A: 알겠어! 잠시만~
- B -> A: 나도 끊을게!
- A -> B: 알겠어!
4 Way Handshake 작동 방식
1. Client → Server : FIN(+ACK) (나는 다 보냈어. 이제 끊자!)
: 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.
- 보낸 후에 FIN_WAIT_1 상태로 변한다.
- FIN 패킷에는 실질적으로 ACK도 포함되어있다.
- FIN (finish) : 세션을 종료시키는데 사용되며, 더 이상 보낸 데이터가 없음을 나타낸다.
2. Server → Client : ACK (알겠어! 잠시만~)
: 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다.
- 이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다.
- Client도 마찬가지로 Server에서 종료될 준비가 됐다는 FIN을 받기위해 FIN_WAIT_2 상태가 된다.
3. Server → Client : FIN (나도 끊을게!)
: 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.
- 클라이언트에게 보낸 후에, 승인 번호를 보내줄 때까지 기다니는 LAST_ACK 상태로 들어간다.
4. Client → Server : ACK (알겠어!)
: 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다.
- 단, 아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.
- 여기서 TIME-WAIT 상태는 의도치않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지하기 위해 변경 되는 것인데, 만약 에러로 인해 종료가 지연되다가 타임이 초과되면 CLOSED 상태로 변경된다.
- 서버는 ACK를 받은 이후 소켓을 닫는다. (Closed)
- TIME_WAIT 시간이 끝나면 클라이언트도 닫는다. (Closed)
참고 자료
https://goodgid.github.io/TCP-IP-3Way-4Way/
728x90
반응형
'CS > Network' 카테고리의 다른 글
[네트워크] 대칭키와 공개키 (0) | 2023.06.26 |
---|---|
[네트워크] UDP (0) | 2023.06.23 |
[네트워크] TCP/IP (흐름 제어, 혼잡 제어) (0) | 2023.06.23 |
[네트워크] TCP/IP 4계층 (0) | 2023.06.23 |
[네트워크] OSI 7계층 (0) | 2023.06.20 |