TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
클라이언트와 서버 간의 연결이 설립되므로, 대상 서버는 새 연결을 승인하고 시작할 수 있는 열린 포트를 가지고 있어야 한다. 클라이언트 노드는 IP 네트워크를 통해 동일한 서버 네트워크나 외부 네트워크에 SYN 패킷을 보낸다.
SYN는 클라이언트가 통신에 사용하고자 하는 랜덤 시퀀스 번호이다. 이 패킷의 목적은 서버가 새 연결을 열지 안열지 묻거나 추론하는 것이다.
서버가 클라이언트로부터 SYN을 받으면 SYN/ACK을 응답한다. 이 패킷은 두 시퀀스 넘버를 포함한다. 첫 번째는 ACK인데, 서버가 클라이언트로부터 받은 시퀀스 번호보다 하나 이상으로 설정한다. 두 번째는 서버에 의해 전송되는 SYN인데 또 다른 랜덤 시퀀스 번호이다. 이 시퀀스는 서버가 클라이언트 패킷을 올바르게 승인했고, 이 패킷도 승인되도록 전송하고 있음을 나타낸다.
각 측은 수신된 시퀀스 번호를 하나씩 증가하면서 승인해야한다. 이제 시퀀스 넘버에 하나를 추가하여 서버의 패킷을 승인하고 서버에 재전송을 할 차례이다.
이 과정이 완료됨에 따라, 연결은 만들어지고 호스트와 서버는 통신할 수 있다.
이러한 모든 단계는 양쪽에서 발생한 일련번호를 확인하고 연결의 안정성을 보장하는데 필요한다.
두 호스트는 다른 쪽의 연결 파라미터를 인식해야 하기때문에, 실제 데이터 전송 과정이 초기화 되기 전에 누락과 순서 외의 세그먼트가 빨리 감지될 수 있다.
세션을 종료하기 위해 수행되는 절차
A : 이 패킷은 Drop되고 데이터는 유실된다.
A : 연결을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용한다. 따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재한다.
서버 측에서는 패킷의 SYN을 보고 패킷을 구분하는데 난수가 아닌 순차적인 Number가 전송된다면 이전의 연결로부터 오는 패킷으로 인식한다.
따라서 이런 문제가 발생할 가능성을 줄이기 위해서 난수로 ISN을 설정한다.
출처
https://www.techopedia.com/definition/10339/three-way-handshake
http://asfirstalways.tistory.com/356