이 두가지는 전송계층에서 2계층에서 동작하는 IP와 4계층에서 동작하는 애플리케이션을 중개하는 역할을 한다.
통신 신뢰성을 높이는 실현하는 기능을 구현되어있다.
일반적으로 TCP와 IP가 함께 사용되고, IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리 하게 된다.
연결 지향형인 TCP는 3-way handshake 이라는 과정을 통해 연결 후 통신을 시작하며, 흐름 제어와 혼잡 제어를 지원해 데이터의 순서를 보장한다.
-> 데이터의 신뢰성을 필요로 하는 애플리케이션은 TCP를 쓴다.
흐름제어 : 보내는 측과 받는 측의 데이터 처리속도 차이를 조절하는것
혼잡 제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지한다.
TCP는 데이터 송수신 전에 커넥션 연결 부터 한다. 이 커넥션을 맺는 과정을 3-way handshake이라고 부른다.
맺어지면 데이터를 보낼수 있는 상태가 되고, 끝나면 이 커넥션을 끊습니다.
이때 끊는 과정이 4-way handshake이다.
출처: https://m.blog.naver.com/good_ray/221984839492
클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보냅니다. 이때 클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 된다.
서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다립니다. 이때 서버는 SYN_RECEIVED 상태가 된다.
클라이언트는 서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는 것입니다. 이때의 서버 상태가 ESTABLISHED입니다.
4-Way handshake는서버와 클라이언트 연결을 끊는 과정입니다.
출처 :https://m.blog.naver.com/good_ray/221984839492
클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
서버는 일단 확인메세지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 CLOSE_WAIT상태이다.
서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
클라이언트는 확인했다는 메세지를 보낸다.
비연결형 프로토콜이며, 일방적으로 데이터를 전달하는 통신 프로토콜이다.
연결 설정이 없고, 혼잡 제어를 안하기 때문에 TCP보다 속도가 빠르지만, 데이터 전송에 대한 보장을 안하기에 패킷 손실이 발생할수도 있다.
출처 : https://www.privateinternetaccess.com/blog/tcp-vs-udp-understanding-the-difference/
TCP는 연속성보다 신뢰성 있는 전송이 중요할때 쓰는 프로토콜이다.
UDP는 TCP보다 빠르고 네트워크 부하가 적지만, 신뢰성보다는 연속성이 중료한 실시간 스트리밍과 같은 서비스에 자주 쓴다.