TCP와 UDP 는 클라이언트와 서버가 데이터를 전달할수 있게 만들어진 프로토콜이며 3계층 전송계층 에서 사용된다.
TCP의 특징은 "신뢰성"인데 신뢰성이란, 데이터를 통신하는 동안 데이터가 손상되거나, 없어지거나 중복되지 않도록 정확하게 전달하는 것 을 말한다. TCP는 클라이언트랑 서버가 끊임없이 상호작용을 하며 데이터 수신 여부를 판단한다(연결지향형).
TCP 특징으로 3-way handshaking 과 4-way handshaking 이 있다.
TCP 3 way handshake는 응용프로그램이 데이터를 전송하기전에 정확한 전송을 위해 세션을 구성하는 과정을 뜻한다. (연결을 설정하는 과정)
3 way handshake 동작 방식
3 way handshake 는 클라이언트와 서버에서 SYN(Synchronize sequence numbers) 와 ACK (Acknowledgment, 승인)를 주고 받는다.
1) 클라이언트는 서버에 접속을 요청하기 위해서 SYN 패킷을 보내고 서버의 ACK 응답을 기다리는 상태 SYN-SENT 이다.
2)서버는 클라이언트에서 SYN 패킷을 받고 요청을 수락하는 SYN-ACK응답을 보내는 상태 SYN-RECEIVED 이다.
3) 서버로부터 SYN-ACK 응답을 받은 클라이언트는 서버로 다시 ACK 를 보내고 이 후부터는 연결이 이뤄졌으며 데이터가 오가는 단계 Established 이다.
TCP 4 way handshake 는 3 way handshake 와는 반대로 서로의 통신이 연결이 된상태를 해제하는 과정 이다. 클라이언트와 서버는 FIN (Finish) flag와 ACK(Acknowledgment, 승인)을 주고받는다
4 way handshake 동작 방식
1) 클라이언트는 서버로 통신 연결을 해제한다는 FIN flag (finish) 를 보낸다. (FIN_WAIT1 상태)
2) 서버는 클라이언트로 FIN flag 를 받고 ACK(승인) 메세지를 보낸뒤 자신의 통신이 모두 마무리 될때까지 기다린다. (CLOSE_WAIT)
3)서버로부터 ACK 받은 클라이언트는 FIN_WAIT2 상태로 변경되며 서버로부터 마지막 FIN flag를 받을때까지 기다린다.
4) 서버는 연결종료를 위해 마지막 FIN flag를 클라이언트에 전송하고 LAST_ACK 상태로 변경한다.
5)서버로부터 마지막 FIN flg를 받고 종료한다는 ACK를 다시 서버로 보낸다. (TIME_WAIT)
6)클라이언트로부터 마지막 ACK를 받은 서버는 CLOSED 상태로 변경하고 통신을 종료한다.
TCP와는 다르게 클라이언트와 서버가 상호작용 하지 않기 때문에 3-way-handshaking 와 4-way-handshaking 같은 연결절차를 거치치 않는다. 이를 비 연결지향형 이라고 한다. 클라이언트측에서 일방적으로 데이터를 보내기 때문에 데이터 전송을 보장하지 않는다. 비해 상대적으로 빠른 통신을 보여준다.
TCP는 신뢰할 수있는 데이터들을 정확하게 전달하기 위해서 연결형 통신을 사용한다.
정확한 데이터보다 빠른 전송이 필요할때는 UDP 프로토콜을 사용한다.
TCP
UDP