[네트워크] TCP/IP 프로토콜이란
TCP 프로토콜과 IP 프로토콜이 같이 쓰이는 경우가 많기 때문에 TCP/IP 프로토콜이라 묶어 부르는 것이지 TCP/IP 프로토콜이라는 자체 프로토콜이 있는것이 아닙니다.
자 그러면 TCP 프로토콜과 IP 프로토콜에 대해 알아보겠습니다
TCP 프로토콜
OSI 7Layer 중 4계층인 전송계층에 속하는 중요 프로토콜로 네트워크 망에 연결된 컴퓨터의 프로그램 간 데이터를 순서대로, 에러없이 교환할 수 있게 하는 역할이다.
인터넷에서 패킷은 각각 독립적으로 전송되며 네트워크의 혼잡도에 따라 송신되는 순서와 수신되는 순서가 달라질 수 있습니다. TCP 는 전송이 시작되면 모든 패킷이 순서대로 도착하도록 합니다.
이렇게 TCP는 데이터를 패킷으로 분할하여 전송하고, 패킷 전송 과정을 연결형 통신 방식으로 제어하며, 수신한 패킷들을 재조립하는 방식으로 데이터 전송의 정확성과 신뢰성을 확보하고 있습니다.
그러면 TCP는 어떻게 데이터 전송의 정확성과 신뢰성을 확보할까요??
이유는 TCP 는 Stateful 하기 때문입니다.
Stateful 은 말 그대로 상태를 유지한다는 뜻으로 서버에서 상태 정보를 저장하는 형태입니다. 즉 사용자가 연결을 한 서버는 바뀌지않고 항상 같은 서버가 유지되어야 하는 것 입니다.
그렇다면 TCP 는 Stateful 을 어떻게 유지할까요??
아래 그림을 보며 TCP 에서 클라이언트와 서버가 데이터를 주고받는 과정을 살펴보겠습니다.
1. 클라이언트는 데이터를 보내기 전 3 way-handshake 과정을 통해 서버와 연결합니다.
2. 3 way-handshake 를 통해 연결이 끝났으면 클라이언트는 서버에 데이터를 송신합니다.
3. 데이터 전송이 끝난 뒤 4 way-handshake 과정을 통해 TCP 연결을 해제합니다.
TCP 는 3 way-handshake 로 연결한 뒤 4 way-handshake 로 연결이 해제되기 전까지 상태를 유지하며 데이터 전송의 정확성과 신뢰성을 확보합니다.
IP 프로토콜
인터넷 프로토콜(IP)은 데이터 패킷이 네트워크를 통해 이동하고 올바른 대상에 도착할 수 있도록 데이터 패킷을 라우팅하고 주소를 지정하기 위한 프로토콜 또는 규칙의 집합입니다.
인터넷을 통과하는 데이터는 패킷이라고 하는 더 작은 조각으로 나뉩니다. IP 정보는 각 패킷에 첨부되며, 이 정보는 라우터가 패킷을 올바른 위치로 보내는 데 도움이 됩니다.
인터넷에 연결하는 모든 장치나 도메인에는 IP 주소가 할당되며, 패킷이 연결된 IP 주소로 전달되면 데이터가 필요한 곳에 도착합니다.
패킷이 목적지에 도착하면 IP와 함께 어떤 전송 프로토콜이 사용되는지에 따라 다르게 처리됩니다. 가장 일반적인 전송 프로토콜은 TCP와 UDP입니다.
IP 는 패킷의 전송만 담당할 뿐 각 패킷이 잘 전송되었는지, 순서가 올바르게 수신됐는지는 판단하지 않습니다.
수신자가 12345 라는 데이터를 전송했을때, 송신자는 24 라는 데이터만 받는 경우가 생길 수 있다는 것입니다.
그렇기에 데이터 전송의 정확성과 신뢰성을 확보된 TCP 프로토콜과 자주 사용되고 이를 TCP/IP 프로토콜이라 부르는 것 입니다.
그러면 우리가 사용하는 HTTP 에서는 TCP 연결을 어떻게 이용할까요??
기본적으로 HTTP는 TCP 연결을 이용하며 비지속 연결, 지속 연결 방법이 있습니다.
우리는 웹 페이지를 볼 때 순수 HTML 로 보는 경우도 있지만 이미지파일, js 등등 여러가지 다른 파일들이 혼합된 형태를 보게됩니다.
기본 HTML 과 이미지 파일 1,2,3번이 있다고 가정해보겠습니다.
지속 연결을 사용하는 HTTP 통신의 경우
1. 서버와 TCP 연결을 합니다.
2. 기본 HTML 이미지파일 1,2,3 번을 받아옵니다.
3. TCP 연결을 해제합니다.
비 지속 연결을 사용하는 HTTP 통신의 경우
1. HTML 을 받기 위해 TCP 연결을 하고 받았으면 연결을 해제합니다.
3. 이미지 파일 1번을 받기위해 TCP 연결을 하고 받았으면 연결을 해제합니다.
4. 이미지 파일 2번을 받기위해 TCP 연결을 하고 받았으면 연결을 해제합니다.
5. 이미지 파일 4번을 받기위해 TCP 연결을 하고 받았으면 연결을 해제합니다.
비 지속 연결의 경우, 화면을 보여주기 위해 TCP 연결, 해제가 네번이 수행되었습니다. 이는 3 way-handshake 와 4 way-handshake 가 각각 네번이 수행되었기 때문에 HTML 과 이미지파일 3개를 TCP 연결 한번으로 받아오는 것 보다 시간이 더 오래 소요됩니다.
그럼 여기서 시간적으로 우수한 지속 연결이 무조건 좋은것이 아닐까?? 라고 생각하실 수 있습니다.
우리는 웹 페이지를 볼 때 일반적으로 계속 새로운 페이지를 보는것이 아닌 한 페이지에서 머물러 있는 경우가 많습니다.
다른 페이지를 요청하지 않고 한 페이지에 머물러있는 경우, 요청과 응답이 필요없으므로 TCP 연결을 계속 수행할 필요가 없습니다. 하지만 지속 연결의 경우 서버측에서는 계속 연결을 유지하므로 서버 자원이 소모되는 문제를 야기합니다.
위의 문제점들을 정리해보자면
지속 연결 - 요청과 응답이 필요없는 상황에도 서버와 계속 TCP 연결을 유지하기 때문에 서버 자원을 소모한다.
비 지속 연결 - 여러 데이터를 가진 웹 페이지를 불러올 경우 TCP 연결과 해제에 소모되는 시간이 많아진다.
이러한 문제를 해결하기위해 HTTP 지속 연결(Persistent Connections)로 문제를 해결했습니다.
면접질문으로 TCP/IP 에 대해 설명해보세요. 라는 질문이 나오면 어떻게 대답할지 생각해보자.
TCP/IP 프로토콜은 두개의 핵심 프로토콜인 TCP 프로토콜과 IP 프로토콜로 구성됩니다.
IP 프로토콜은 컴퓨터 네트워크 상에서 데이터 패킷을 라우팅하고 전송하는 역할을 합니다.
IP 프로토콜만으로는 데이터 패킷이 수신자에게 정확하게 전달되었는지, 올바른 순서로 전달되었는지 알 수 없기 때문에 TCP 프로토콜을 이용해서 데이터의 정확도와 신뢰성을 보장합니다.
TCP 프로토콜은 3 way-handshake 과정을 통해 클라이언트와 서버간 TCP 연결을 수행하고 이 연결을 바탕으로 데이터의 분할, 순서화, 에러 검출 및 재전송 등을 처리하여 데이터 전송합니다.
쓰다보니 글이 너무 길어지므로 다음번엔 HTTP 지속 연결에 대해 알아보겠습니다.
** 참고
https://www.cloudflare.com/ko-kr/learning/network-layer/internet-protocol/