3-way handshaking은 TCP 연결 과정으로 늘 등장해왔다.
클라이언트가 접속 대기중인 서버 (192.168.0.20:80)에 접속을 할 때, 클라이언트는 소켓 하나 열어서 접속을 시도할 것이다. 이 때 Round Trip Time (갔다가 돌아오는 시간)이 50ms가 소요된다고 가정하자.
Syn, Ack 통신되는 단위는 세그먼트이다. 기본적인 세그먼트라면 헤더와 페이로드로 구성되어 있지만, 연결 과정에서의 세그먼트는 IP 헤더와 TCP 헤더만 존재한다. 단순 내부 연결, 즉 관리 목적의 세그먼트가 왔다갔다 한다.
1) Syn 을 할 때, 클라이언트 쪽에서 Sequence Number를 랜덤으로 생성한다.
(예를들어 1000을 생성했으면 Syn을 할 때 서버에게 1000을 보내게 된다.)
2) 서버는 Sequence Number 1000을 받았다는 의미로 1을 더한다. 동시에 서버도 Sequence Number를 랜덤으로 생성하여 Syn(4000) + Ack(1001) 값을 보낸다.
3) 클라이언트는 서버로 부터 받은 Sync(4000) 값을 받았다는 의미로 1을 더하여 Ack(4001)을 보낸다.
이때 중요한 것은 시간차가 발생한다. 클라이언트가 연결을 시도해서 Ack를 받는 순간, 클라이언트는 서버와 연결이 되었다고 판단한다. (ESTABLISHED)
하지만 서버는 연결이 완료되었다고 판단하지 않는다. 서버는 최종 Ack가 와야지만 연결되었다고 판단을 한다.
..
TCP 연결의 실체는 결국 정책을 교환하는 것이다.
1) Sequence Number 교환
- 이것이 연결 과정중 제일 중
2) MSS 사이즈, Maximum Segment Size 교환
- 클라이언트는 접속 시도시 MSS 사이즈를 서버에 맞춘다.
'네트워크' 카테고리의 다른 글
TCP, UDP 헤더 형식 그리고 게임서버 특징 (0) | 2024.10.31 |
---|---|
TCP 연결종료와 상태변화 (0) | 2024.10.29 |
TCP, UDP란 (0) | 2024.10.24 |
Proxy Server (Forward Proxy, Reverse Proxy) (0) | 2024.10.24 |
Ping과 RTT란 (0) | 2024.10.23 |