글
(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로 보내게 됩니다.
'P rogramming > Socket' 카테고리의 다른 글
서버 소켓의 주소설정 중 INADDR_ANY의 의미 (0) | 2013.11.12 |
---|---|
스트림 소켓(TCP)과 데이터그램 소켓(UDP) (0) | 2013.10.12 |
리눅스 특정 포트 열기 / 닫기 (0) | 2013.10.12 |
9. 다중입출력 - select() (1) | 2012.03.12 |
UDP통신의 connect() 함수의 활용 (0) | 2012.03.08 |
RECENT COMMENT