TCP 특징 중
신뢰성보장
,연결지향
이 있다. 그 때문에 나온 것이 handshake이다.
TCP는 신뢰성 있는 연겳을 보장하기 때문에 이를 위해 연결을 생성하고 종료하는 순간에도 handshake
라는 특병한 과정을 거치게 되는것이다.
여기서 "연결"은 논리적인 연결을 의미한다.
논리적인 연결을 지향하는 이유는 연속적인 데이터 전송의 신뢰성
을 위함이다. (전화기 생각. 하나의 전화선에 여러전화가능)
누가 몇번째로 보낸 패킷
이라는 정보가 필요하다. 그게 없으면 뒤죽박죽이 됨TCP는 상대방과 연결상태를 만들거나(3) 종료할 떄(4) 특별한 과정을 거치게 되는데 이것이 TCP handshake
인 것이다.
편의상 왼쪽을 A, 오른쪽을 B... A가 client, B가 server가 될 수 있다.
시퀀스 번호
를 생성해 SYN 패킷에 담아 전송=> 이 과정이 끝나면 신뢰성 있는 연결이 생성괴었다 판단하고 통신시작
사실 연결의 생성보다 연결의 종료가 중요한데, 그이유는 생성이 안된것은 다시 또 생성하면 그만이지만, 만일 일방적으로 한쪽에서 연결을 종료해버리면 상대방은 연결이 종료된지 아닌지 모르고 계속 대기하는 상태가 될 수 있다. 그러면
데드락
발생 가능성 있다.
=> 연결 종료