Backend/Network

TCP Handshake

petitCoding 2012. 4. 12. 11:09

전에 TLS 핸드셰이킹에 대해서 포스팅을 했었는데..

TLS가 기반을 두고있는 TCP에 대한 포스팅은 정작 하지 않았다는것을...

방금 깨달았다.

 

우선 TCP 개념부터 간단히 정리하자면,

 

TCP, (Transmission Control Protocol) 전송 제어 프로토콜

인터넷에서 데이터를 보내기 위해서 IP와 함께 사용되는 프로토콜이다. TCP는 UDP와 같은 계층에 존재하며, UDP와 다른 것은 보다 정확한 데이터 송수신이 이루어 진다는 점이다.  "신뢰성" 프로토콜 이라고 할 수 있다.

위키 백과 참조 > 바로가기

 

계층 구조도는 다음과 같다.

 

 Higher Level

 Telnet, FTP, HTTP, SIP ......

 TCP

 TCP, UDP, ,,,,,,

 Internet Protocol

 IP & ICMP

 Communition Network

 Local Network Protocol

 

 

TCP Handshake

 

TCP Handshake 를 설명하기 전에, 아래 그림을 보면 전반적인 TCP 연결 상태를 확인할 수 있다.

(RFC 793 참조)

 

 

 

TCP의 Handshake는 3-Way Handshake라고도 한다.

먼저, 보내는 쪽에서 SYN 을 전송하고,

상대방이 알았다고 SYN-ACK를 보내면,

ACK를 보냄으로써 연결이 맺어지는것이다.

참으로 간단하다!! >_ <

 

 

 

 

아 참고로 여기서 보안에 관한 얘기를 좀 하자면,

흔히 듣는 공격 중에 TCP SYN FLOODING 이라는 공격이 있다는 것은 보안 공부를 해본 사람이라면 누구나 알 것이다.

이 공격이 바로 이 TCP 3 way Handshake 를 악용하여 이루어 진다.

 

상대방에게 SYN을 보내고 SYN + ACK를 받은 뒤에 ACK를 응답하지 않는 것이다.

 

상대방은 ACK가 올 때까지 세션을 열지도 못하고 닫지도 못하고 -_-;; 기다리기 때문에

이러한 이벤트가 늘어나면 나중에는 소켓을 생성할 수 없는 상태에 이르게 된다.

(netstat -nap 명령을 치면 이러한 상태에 있는 소켓이 무진장 많은 것을 확인할 수 있다. )

 

더 자세한 TCP연결에 대해서는 RFC를 참고하길 (첨부파일)

 

 

RFC793.txt

반응형

'Backend > Network' 카테고리의 다른 글

NAT  (0) 2012.04.12
서브넷  (0) 2012.04.12
FTP - 두 번째.  (0) 2012.04.12
FTP  (0) 2012.04.12
SNMP Trap  (0) 2011.05.20