TCP 3 way handshake & 4 way handshake

Onni·2022년 2월 1일
0

📌 TCP 3 way handshake

✔ 개념

TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방과 사전에 세션을 수립하는 과정(연결이 잘 되었는지 확인하는 과정)
TCP가 연결지향적인 특성을 갖게 해준다.

✔ 역할

  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장
  • 양쪽 모두 상대방에 대한 초기 순차 일련번호를 얻을 수 있도록 한다.
  • 3번의 신호를 주고 받아서 3-way-handshaking

✔ 과정

1) Client -> Server

  • 서버에 접속을 요청하는 SYN 패킷 전송
  • 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정, SYN 플래그 비트를 1로 설정한 세그먼트 전송
  • 클라이언트는 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.

2) Server -> Client

  • 서버는 클라이언트에게 요청을 수락(ACK)했으며 접속 요청 프로세스인 클 라이언트도 포트를 열어달라(SYN)는 메세지 전송
  • 서버는 SYN_RECEIVED 상태가 된다.

3) Client -> Server

  • 클라이언트는 서버에게 ACK를 보내고 이후에는 연결 완료
  • 전송할 데이터가 있으면 전송 가능
  • ESTABLISHED 상태가 된다.

📌 4 way handshake

✔ 개념

  • 세션을 종료하기 위해 수행되는 과정

✔ 과정

1) Client -> Server

  • 클라이언트가 연결을 종료하겠다는 FIN 플래그 전송
  • 서버가 FIN 플래그로 응답하기 전까지 연결 유지

2) Server -> Client

  • 서버는 일단 확인 메세지(ACK)를 보내고 자신의 통신이 끝날 때까지 대기

3) Server -> Client

  • 서버가 통신이 끝났으면 연결 종료되었다고 클라이언트에게 FIN 플래그 전송

4) Client -> Server

  • 클라이언트는 확인했다는 메세지 전송
  • 서버 연결 CLOSED

❗ Q&A

Q. TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?
A. Client가 전송할 데이터가 없다고해도 Server에서 보내야하는 데이터가 아직 남아있을 수 있기때문에 우선 FIN에 대한 ACK를 먼저 보내고 남은 데이터 전송 후에 FIN을 보낸다.

Q. 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?
A. Client에서 세션을 종료시킨 후 늦게 도착하는 패킷은 drop되고 데이터는 유실된다. 이런 상황에 대비하여 Client는 Server로부터 FIN을 수신하고 일정시간(default 240sec)동안 세션을 남겨두고 잉여 패킷을 기다린다. (TIME_WAIT 과정)

Q. 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?
초기 Sequence Number를 ISN(Initial Sequence Number)이라고 한다.
A1. Connection을 맺을 때 사용하는 Port는 유효한 범위 내에서 사용하고 시간이 지남에 따라 재사용
-> 두 통신 호스트가 과거에 사용된 Port 번호 쌍을 사용하는 가능성 존재
Server에서는 SYN을 보고 패킷을 구분, 난수가 아닌 순차적 Number가 전송된다면 이전 Connection으로부터 오는 패킷으로 인식할 수 있다. 이런 문제 가능성을 줄이기 위해 난수로 ISN 설정

A2. 0에서 시작하는 ISN은 이어지는 Seq를 쉽게 예측하게 만들어 공격에 취약해진다.

🧩 Reference

profile
꿈꿈

0개의 댓글