Network - TCP 3 Way-Handshaking
3 Way - Handshaking
TCP통신은 UDP 통신과는 달리 신뢰성 있는 통신을 하기위해 3번의 패킷 교환을 한다. 이를 3 Way -Handshaking
이라고 하며 데이터의 동기화라고도 한다. 이러한 동기화 과정은 TCP 프로토콜을 이용해서 통신을 하는 응용
프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터에 사전에 세션을 수립하는
과정을 의미하고 이러한 과정을 통해 서로의 통신을 위한 포트( PORT )를 확인하고 연결한다.
# UDP 통신은 상대방이 받을 준비여부에 관계없이 데이터를 전송한다. 신뢰↓
3 Way - Handshaking 과정
↑3 Way Handshake 과정
# 클라이언트( Client ) → 서버( Server ) : SYN
서버( Server ) → 클라이언트( Client ) : SYN + ACK
클라이언트( Client ) → 서버( Server ) : ACK
# SYN : Synchronize sequence numbers
ACK : Acknowledgment
# 클라이언트와 서버 모두 데이터를 전송할 준비가 되어 있다는 것을 보장하고, 실제로 데이터가 전달이 시작하기전에
서로 준비되어 있다는 것을 알 수 있도록 한다.
1. 클라이언트( Client )에서 웹 서버로 연결을 최초시도시 먼저 SYN 패킷을 보낸다.
2. SYN 패킷을 보낸 클라이언트는 SYN-SENT 상태가 된다.
3. 이때 서버( Server )는 Listen 상태로 포트 서비스가 가능한 상태여야 한다. ( Closed : 닫힌 상태 )
4. Listen상태에서 클라이언트로부터 SYN 패킷을 받으면 이에 대한 응답으로 SYN + ACK패킷을
클라이언트에게 전송 한다.
5. 서버는 클라이언트 IP에 대해 포트 SYN-Received 상태로 전환 된다.
6. 서버로부터 SYN+ACK 패킷을 받으면, 클라이언트는 Established 상태로 변하게 되면서 연결을 확인한다.
7. 클라이언트는 서버로 SYN에 대한 응답으로 ACK 패킷을 보낸다.
8. 서버는 이 ACK 패킷을 받고 해당 클라이언트 IP에 대한 포트 Established상태로 전환된다.
상태 |
|
Closed |
닫힌 상태 |
Listen |
포트가 연린 상태로 연결 요청 대기중 |
SYN-sendt |
SYN 요청을 한 상태 |
SYN-Received |
SYN 요청을 받고 상대방의 응답을 기다리는중 |
Established |
확인,확립 된 상태 즉, 연결인 확인된상태 |
Code Bit ( TCP Header )
TCP Header에는 Code Bit라는 항목이 있다. 이는 64bit로 되어 있으며 각각의 bit는 의미를 가지고 있다.
Urg - Ack - Psh - Syn - Fin 순서로 되어 있으며 해당 위치의 비트에 1이 들어가게 되면 이 패킷이 어떤
패킷인지 알려주게 된다. ( ex. 000010 라면 SYN 패킷이 된다. )
Sequence Number
Sequence Number 과 Acknowledgment Number이 있다. 이는 TCP 패킷을 주고 받을 때 순서,Data와 관련있다.
최초 TCP 3-Way Handshaking 과정을 Sequence number와 Acknowledgment number로 나타 낼 수 있다.
1. 클라이언트에서 SYN 패킷을 보낼 때 sequence Number(1번)에 랜덤으로 숫자( ex. 100 )를 넣어서 보낸다.
2. 서버가 이 SYN패킷을 받게 되면 응답으로 SYN+ACK 패킷을 보내게 된다.
# 서버에서 보내는 SequenceNumber(2번)의 경우 또 랜덤의 숫자( ex. 200 )를 넣어서 보낸다.
3. Acknowledgment Number의 경우, 앞 클라이언트에서 보내온 SYN 패킷의 Sequence Number +1을
해서 보낸다. ( 100 + 1) # 여기서 Sequence Number가 101이 된다.
4. 서버로부터 SYN + ACK를 받은 클라이언트는 응답으로 ACK 패킷을 보낸다.
# 이때 ACK 패킷은 서버로부터 받은 Sequence Number에 +1을 하여 보낸다. ( 200 + 1 )
Acknowledgment Number 201을 보낸다.
3 Way-Handshaking 실습
- TCP통신에 사용한 환경은 리눅스( linuxt_centOS-5.1.1 )내 파이썬( Python3.6.0 ) 사용
- 클라이언트측 파일과 서버측 파일을 파이썬 코드로 구성
- 간단한 TCP 통신으로 3 Way-Handshaking이 이뤄지는지 확인
↑3 Way- Handshaking이 이루어 지는 것을 확인할 수 있었다.
# 클라이언트 측에서 서버측에 연결을 시도하자 위와같은 결과를 얻을 수 있었다.
# TCP 통신은 랜덤으로 정해진 Sequence Number로 SYN, SYN+ACK, ACK를 통해 클라이언트와 서버는 통신에 앞서
동기화과정을 통해 신뢰성 있는 통신을 시도한다.
참고 ========================
http://mintnlatte.tistory.com/552
DHCP 프로토콜 통신과정 및 기본 원리 (0) | 2017.04.24 |
---|---|
Network - ICMP ( 인터넷 제어 메시지 프로토콜) (0) | 2017.04.14 |
Network - OSI Layer 7 (0) | 2017.04.07 |
Network - LAN 과 WAN (0) | 2017.04.07 |
Network - 인터넷, 인트라넷, 엑스트라넷 (0) | 2017.04.06 |
좀 알려주세요 현기증 난단 말이에요..