# TCP/IP 4계층 모델
네트워크의 TCP/IP 4계층에 대해서 많이 들어봤을 것이라 생각한다. 기억해야 할 핵심적인 주요 프로토콜에는 응용계층의 HTTP, 전송계층의 TCP UDP, 인터넷 계층의 IP가 있다.
전송계층에 속하는 TCP와 UDP는 2계층에서 동작하는 IP 와 4계층에서 동작하는 애플리케이션(http 등)을 중개하는 역할을 합니다.
TCP와 UDP는 중개하는 역할을 하는점에서는 동일하지만, 각각이 다른 아래와 같은 특징을 가지고 있습니다.
TCP는 통신 신뢰성을 높이는 실현하는 기능이 구현되어 있다. 반대로 UDP에는 신뢰성을 높이는 기능이 없는 대신 보다 높은 속도와 효율성을 제공합니다.
이러한 이유로, 데이터의 신뢰성을 필요로하는 애플리케이션은 TCP로, 빠른 속도나 실시간 통신이 중요한 애플리케이션의 경우 UDP로 구분해서 사용한다.
특히 웹애플리케이션에서 많이 사용하는 HTTP의 경우 모든 데이터를 제대로 송수신이 가능해야 하는 특성상, TCP를 사용한다.
# TCP 3-way handshake
TCP 3-way handshake 는 양 끝단 기기의 신뢰성 있는 데이터 통신을 위해, TCP 방식이 연결을 설정하는 방식이다.
마치 전화를 거는 것 같이 연결을 설정하는 이 방식은 세단계를 통해 연결 설정을 한다.
1) (SYN): 처음으로, sender는 receiver와 연결 설정을 위해, SYN(Synchronize Sequence Number)을 보낸다. 이 요청은 receiver에게 sender가 통신을 시작하고 싶다고 알린다.
2) (SYN / ACK): receiver 는 받은 요청을 바탕으로 SYN/ACK 신호 세트를 응답한다. Acknowledgement(ACK) 응답으로 보내는 segment가 유효한 SYN요청을 받았는지를 의미한다.
3) (ACK): 마지막 단계에서, sender는 받은 ACK를 receiver에게 전송을 하면서, 신뢰성 있는 연결이 성립되었다는 사실을 sender와 receiver 양쪽에서 알 수 있고, 실제 데이터 전송이 시작되게 된다.
# UDP
TCP 처럼 가상의 회선을 설정해 신뢰성을 보장하면 당연히 좋은데 왜 UDP를 사용할까? 모든 상황에서 TCP가 UDP보다 우수할까?
당연히 답은 ‘No’
- 온라인 게임 LOL 을 플레이하는 중입니다. 결정적 순간에 기술을 사용해야 하는데 항상 조금 지연시간이 있습니다. 근데 지연시간이 매번 조금씩 달라서 타이밍을 잡기가 힘듭니다.
- 카카오톡으로 보이스 톡을 하는데, 내가 말하고 상대방이 말 할 때마다 지연시간이 조금씩 발생하면서 싱크가 맞지가 않습니다.
위와 같이 자신이 수행하게 될 애플리케이션 마다 효율적인 프로토콜은 다를 수 있다!!