TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방과 사전에 세션을 수립하는 과정(연결이 잘 되었는지 확인하는 과정)
TCP가 연결지향적인 특성을 갖게 해준다.
1) Client -> Server
2) Server -> Client
3) Client -> Server
1) Client -> Server
2) Server -> Client
3) Server -> Client
4) Client -> Server
Q. TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?
A. Client가 전송할 데이터가 없다고해도 Server에서 보내야하는 데이터가 아직 남아있을 수 있기때문에 우선 FIN에 대한 ACK를 먼저 보내고 남은 데이터 전송 후에 FIN을 보낸다.
Q. 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?
A. Client에서 세션을 종료시킨 후 늦게 도착하는 패킷은 drop되고 데이터는 유실된다. 이런 상황에 대비하여 Client는 Server로부터 FIN을 수신하고 일정시간(default 240sec)동안 세션을 남겨두고 잉여 패킷을 기다린다. (TIME_WAIT 과정)
Q. 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?
초기 Sequence Number를 ISN(Initial Sequence Number)이라고 한다.
A1. Connection을 맺을 때 사용하는 Port는 유효한 범위 내에서 사용하고 시간이 지남에 따라 재사용
-> 두 통신 호스트가 과거에 사용된 Port 번호 쌍을 사용하는 가능성 존재
Server에서는 SYN을 보고 패킷을 구분, 난수가 아닌 순차적 Number가 전송된다면 이전 Connection으로부터 오는 패킷으로 인식할 수 있다. 이런 문제 가능성을 줄이기 위해 난수로 ISN 설정
A2. 0에서 시작하는 ISN은 이어지는 Seq를 쉽게 예측하게 만들어 공격에 취약해진다.