TCP Three-way HandShaking 이란?
클라이언트와 서버가 통신하기 전 세 번의 패킷 교환을 통해 확인하는 과정을 말합니다.
TCP Three-way HandShaking의 과정
- CLIENT에서 웹 서버로 연결을 최초시도시 먼저 SYN 패킷을 보냅니다.
- SYN 패킷을 보낸 CLIENT는 SYN-SENT 상태가 됩니다.
- SERVER에서 CLOSED는 PORT가 닫혀있는 상태를 뜻하고, 포트가 서비스 가능한 상태인 LISTEN상태로 만들어주어야 합니다.
- LISTEN상태에서 CLIENT로부터 SYN패킷을 받으면 이에 대한 응답으로 SYN + ACK 패킷을 CLIENT로 보냅니다.
- SERVER는 CLIENT IP에 대해 포트 SYN-RECEIVED 상태로 전환됩니다.
- SERVER로부터 SYN+ACK 패킷을 받으면, CLIENT는 ESTABLISHED상태로 변하게 되면서 연결을 확인합니다.
- CLIENT는 SERVER로 SYN에 대한 응답으로 ACK패킷을 보냅니다.
- SERVER는 이 ACK 패킷을 받고 해당 CLIENT IP에 대한 포트 ESTABLISHED상태로 전환됩니다.
- 이로써 SERVER와 CLIENT의 TCP 3-WAY HandShaking 과정을 마치게 됩니다.
Code Bit(TCP Header)
TCP Header에는 Code Bit라는 항목이 있습니다. 이는 6bit로 되어있으며 각각의 bit는 의미를 가지고 있습니다.
URG - ACK - PSH - RST - SYN - FIN 순서로 되어 있으며 해당 위치의 비트에 1이 들어가게 되면 이 패킷의 어떤 패킷인가를 알려주게 됩니다. 즉 000010이라고 하면 SYN 패킷이 되는 겁니다.
Sequence Number
Sequence Number과 Acknowledgemnet Number이 있는데 TCP가 패킷을 주고 받을 때 순서와 Date와 관련됩니다.
여기서 간단하게 설명하자면, 최초 TCP 3-way HandShaking과정을 Sequence Number과 Acknowledgement Number로 나타내겠습니다.
처음 클라이언트에서 SYN패킷을 보낼 때 Sequence Number(A)에 랜덤으로 숫자를 넣어서 보냅니다.
여기서는 1이라고 하겠습니다. 서버가 이 SYN패킷을 받게 되면 응답으로 SYN+ACK패킷을 보내게 되는데,
서버에서 보내는 Sequence Number(B)의 경우 또 랜덤의 숫자를 보내게 됩니다.
여기서는 편의상 70이라고 하겠습니다. Acknowledgement Number의 경우, 앞 클라이언트에서 보내온
SYN패킷의 Sequence Number에다 +1을 하여 보내게 됩니다.(A+1).
즉 여기서는 Sequence Number가 2가 됩니다. 마지막으로 클라이언트에서 서버로부터 오는
SYN + ACK를 받고 응답으로 ACK 패킷을 보내게 되는데 이때 서버에서 받은 Sequence Number에다 + 1을
하여 보냅니다.
(B+1) 즉 71이라는 숫자를 Sequence Number로 보내게 됩니다.
참조 : http://cafe.naver.com/nsis/41903
'네트워크' 카테고리의 다른 글
동기 vs 비동기 (0) | 2015.10.06 |
---|---|
빅 엔디안(Big Endian) vs 리틀 엔티안(Little Endian) (0) | 2015.09.14 |
GET방식 과 POST방식 (0) | 2015.08.08 |
HTTP 와 HTTPS (0) | 2015.08.08 |
HTTP 프로토콜 (0) | 2015.08.08 |