3-way handshaking 과정은, 패킷의 전달하기 위한 목적지와 수신지를 확실히 하여 정확한 정보의 전송을 보장하기 위해 세션을 수립하는 과정을 의미합니다. 연결 설정요청 flag인 SYN과 ACK를 주고받습니다.
- SYN : 연결 설정 요청. 양쪽이 보낸 최초 패킷에만 SYN 플래그 설정을 한다.
- ACK : 응답 유효여부 설정. 최초의 SYN 패킷 이후 모든 패킷은 ACK 플래그 설정 필요. 데이터를 잘 받았으면 긍정 응답으로 ACK(SYN+1) 전송
- FIN : 연결 종료 의사 표시
[클라이언트] - 연결요청 A ->
[서버] - 연결요청 A 확인. 수락 여부 A+1, 연결요청 B ->
[클라이언트] - 연결요청 B 확인. 수락 여부 B+1 ->
[서버]
처음 클라이언트에서 서버로 SYN 패킷을 보낼 때, Sequence Number에는 난수가 담겨집니다. 초기 Sequence Number를 ISN 이라고 합니다.
ISN이 0부터 시작하지 않고 난수를 생성하여 number를 설정하는 이유는, 클라이언트와 서버가 Connectino을 맺을때 사용하는 포트(port)는 유한한 범위 내에서 사용하고 시간이 지나 사용이 끝남에 따라 재사용됩니다. 따라서 서버측에서는 패킷의 SYN을 보고 패킷을 구분할 때 난수가 아닌 순차적 Number가 전송된다면 이전의 Connection으로부터 오는 패킷으로 인식할 수 있습니다. 이러한 문제가 발생할 가능성을 줄이기 위해 난수로 ISN을 설정합니다.
[참고문헌]
https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md
https://sjlim5092.tistory.com/35
https://asfirstalways.tistory.com/356