(1) TCP의 신뢰성 있는 통신이란?
= 3 Way – Handshaking
신뢰성 있는 연결을 체결하기 전에 패킷을 3번 교환하여 확인을 하는 과정입니다.

(2) 3 Way-Handshaking
 


- Client 에서 웹 서버로 연결을 최초시도시 먼저 SYN 패킷를 보냅니다.
- SYN 패킷를 보낸 Client 는 SYN-SENT 상태가 됩니다.
-
 Server에서 CLOSED는 Port가 닫혀있는 상태를 뜻하고, 포트가 서비스 가능한 상태인 LISTEN 상태로 만들어 주어야 합니다.
-
LINTEN상태에서 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 과정을 마치게 됩니다.


 

(2) Code Bit (TCP Header)
TCP Header에는 Code Bit 라는 항목이 있습니다. 
이는 6bit로 되어있으며 각각의 bit는 의미를 가지고 있습니다.

Urg-Ack-Psh-Rst-Syn-Fin 순서로 되어 있으며 해당 위치의 비트에 1이 들어가게 되면 이 패킷의 어떤 패킷인가를 알려주게 됩니다. 즉 000010 이라고 하면 SYN 패킷이 되는 겁니다.

 
 

(3) Sequence Number
Sequence Number 과 Acknowledgment Number 이 있는데 이는 TCP가 패킷을 
주고받을 때 순서와 Date와 관련됩니다. 여기서는 간략하게 알아보도록 하겠습니다. 최초 TCP 3-way handshaking 과정을 Sequence Number과 Acknowledgment Number로 나타내겠습니다.


처음 클라이언트에서 SYN 패킷을 보낼 때 Sequence Number(A)에 랜덤으로 숫자를 넣어서 보냅니다. 여기서는 1이라고 하겠습니다. 서버가 이 SYN 패킷을 받게 되면 응답으로 SYN+ACK패킷을 보내게 되는데, 서버에서 보내는 Sequence Number(B)의 경우 또 랜덤의 숫자를 보내게 됩니다. 여기서는 편의상 70이라고 하겠습니다. Acknowledgment 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

by 민트앤라떼 2013. 10. 23. 00:44