TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방과 사전에 세션을 수립하는 과정(연결이 잘 되었는지 확인하는 과정)
TCP가 연결지향적인 특성을 갖게 해준다.
양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장
양쪽 모두 상대방에 대한 초기 순차 일련번호를 얻을 수 있도록 한다.
3번의 신호를 주고 받아서 3-way-handshaking
SYN : synchronize sequence numbers
ACK : acknowledgements
상태 | |
---|---|
CLOSED | 닫힌 상태 |
LISTEN | 포트가 열린 상태로 연결 요청 대기중 |
SYN_SENT | SYN 요청을 한 상태 |
SYN_RECEIVED | SYN 요청을 받고 상대방의 응답을 기다리는 중 |
ESTABLISHED | 연결이 확인된 상태 |
세션을 종료하기 위해 수행되는 과정
A. Client가 전송할 데이터가 없다고해도 Server에서 보내야하는 데이터가 아직 남아있을 수 있기때문에 우선 FIN에 대한 ACK를 먼저 보내고 남은 데이터 전송 후에 FIN을 보낸다.
A. Client에서 세션을 종료시킨 후 늦게 도착하는 패킷은 drop되고 데이터는 유실된다. 이런 상황에 대비하여 Client는 Server로부터 FIN을 수신하고 일정시간(default 240sec)동안 세션을 남겨두고 잉여 패킷을 기다린다. (TIME_WAIT 과정)
초기 Sequence Number를 ISN(Initial Sequence Number)이라고 한다.
A1. Connection을 맺을 때 사용하는 Port는 유효한 범위 내에서 사용하고 시간이 지남에 따라 재사용
-> 두 통신 호스트가 과거에 사용된 Port 번호 쌍을 사용하는 가능성 존재
Server에서는 SYN을 보고 패킷을 구분, 난수가 아닌 순차적 Number가 전송된다면 이전 Connection으로부터 오는 패킷으로 인식할 수 있다. 이런 문제 가능성을 줄이기 위해 난수로 ISN 설정
A2. 0에서 시작하는 ISN은 이어지는 Seq를 쉽게 예측하게 만들어 공격에 취약해진다.