TCP/IP란?
TCP/IP는 프로토콜의 일종으로 인터넷을 포함한 일반적인 네트워크 환경에서 광범위하게 사용되는 프로토콜이다. 1983년 표준 방식으로 정해졌으며 당시 NCP를 TCP/IP가 대체하게 되면서 지금 우리가 사용하게 되는 인터넷이 탄생했다. TCP/IP은 두 개의 기기 간의 데이터를 전송하기 위한 프로토콜이다. 오늘날 사용되고 있는 많은 네트워크 프로토콜이 이 TCP/IP에 의존하고 있으며, 오늘 날 가장 널리 사용되고 있는 프로토콜인 HTTP 또한 TCP/IP의 일종이다.
프로토콜이란?
복수의 컴퓨터 사이나 중앙 컴퓨터와 단말기 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신 규약
[네이버 국어사전]
서로 원격으로 떨어진 복수의 디바이스가 서로 통신하기 위해서는 정해진 규격이 필요하다. 미국에 있는 A 컴퓨터와 우리 집에 있는 B 컴퓨터가 서로 통신하려고 하는데, 사전에 약속된 규칙이 없다면 어떻게 통신할 수 있겠는가. 사람으로 비유를 했을 때, "내가 저 멀리서 왼손을 높이 들면 폭죽을 쏴달라는 의미고, 양손을 양 옆으로 넓게 뻗으면 모든 작업을 중지하라는 의미야" 라고 서로 약속을 해야 실제로 왼손을 들었을 때 상대방이 이해할 수 있지, 약속을 하지 않으면 의미가 없는 것과 마찬가지이다. 프로토콜은, 통신을 위한 이러한 규약 및 약속을 의미한다.
TCP/IP는 하나의 프로토콜이 아닌 프로토콜의 집합이다.
위에서 HTTP가 TCP/IP 중 하나라고 말했던 것처럼, 사실 TCP/IP는 하나의 단일한 프로토콜이 아니다. 인터넷과 관련된 프로토콜을 모은 것을 TCP/IP라고 부르는 것인데, TCP와 IP 프로토콜만을 가리켜 TCP/IP 프로토콜이라고 부르기도 하지만, 조금 더 광범위하게 IP 프로토콜을 사용한 모든 프로토콜을 총칭해서 TCP/IP라는 이름으로 사용되고 있다. 앞서 언급한 HTTP를 포함해 TCP, UDP, FTP, IEEE 802.3, PPPoE 등의 프로토콜 등이 TCP/IP에 해당된다.
TCP/IP 4계층
TCP/IP에서 중요한 개념 중 하나는 TCP/IP는 계층으로 이루어져 있다는 부분이다. TCP/IP라는 프로토콜을 구성하는 구성요소가 일종의 계층을 가지고 있다는 의미인데, 일반적으로 사용자와 가장 가까운 계층으로 웹 브라우저, 웹 서버등에서 사용하는 응용 계층(Application Layer), 네트워크로 접속되어 있는 수신 디바이스에 전송할 데이터를 처리하고 준비하는 전송 계층(Transport Layer), 네트워크 상에서 패킷(전송하는 데이터의 최소 단위)의 이동을 제어하는 네트워크 계층(혹은 인터넷 계층, Network Layer or Internet Layer), 마지막으로 네트워크에 접속하는 하드웨어를 다루는 링크 계층(혹은 데이터 링크 계층, 네트워크 인터페이스 계층, Link Layer, Data Link Layer or Network Interface Layer)으로 총 4개의 계층으로 이루어져 있다.
이렇게 설명하면, 조금 많이 헷갈리고 어려우니(나도 많이 어려웠다) 조금 더 풀어서 하나 하나 살펴보자.
응용 계층
보내고자 하는 수신 네트워크 디바이스에 실제로 보내고 싶은 정보를 담는다. 네트워크를 통해 데이터를 주고 받는 과정을 택배를 주고 받는 과정에 비유하자면, 응용 계층에서 수행되는 작업은 실제 택배를 준비하는 작업이다. HTTP로 예를 들어 설명해 보자면 웹 브라우저를 통해 웹 페이지를 서칭하고 있는 사람이, "특정 웹페이지를 보고 싶으니 웹 페이지 리소스를 보내주세요" 라고 편지를 쓰는 것이라고 할 수 있다. (GET /target/resource 식의 HTTP GET 메세지일 것이다.)
전송 계층
응용 계층에서 작성된 데이터(HTTP 메세지)를 보내기 쉬운 크기로 잘게 나누어 안내 번호와 포트 번호 등을 붙이는 작업을 수행한다. TCP가 이 계층에 있는데, TCP의 경우 응용 계층에서 내려온 데이터를 패킷 단위로 나누어 각각의 패킷에 인덱싱을 한 이후 데이터를 네트워크 계층으로 내려 보낸다. TCP는 이 때 안정성을 위해 수신하고자 하는 네트워크에 3 ways handshaking을 시도하여 전송하고자 하는 패킷들이 정상적으로 목적지에 도착할 수 있는지 조사하는 작업을 수행한다.
네트워크 계층
네트워크 계층에서는 전송 계층에서 내려온 데이터에 수신지의 IP와 MAC 주소를 추가하는 작업을 한다. 택배로 비유하자면 목적지 주소를 입력하는 작업이랄까. 인터넷 프로토콜(IP)이 이 계층에서 해당 작업을 수행한다.
링크 계층
네트워크 계층에서 내려온 데이터를 실제 네트워크에 흘려보낸다. 택배를 붙이는 것이다.
왜 이런 계층이 나뉘어 있을까
TCP/IP가 계층화된 이유는 설계의 유연성을 확보하기 위해서다. 논리상 분리되어 있는 구조에 각각의 계층을 만듬으로써 차후 인터넷 환경에서의 사양이 변경되었을 때 전체를 바꿔야만 하는 불상사를 피할 수 있다. 만약 각각의 논리 구조들이 각각의 계층으로 분리되어 있다면 특정 사양이 변경되더라도, 해당 사양에 해당하는 계층만 변경하면 되기 때문에 보다 유연한 설계를 가져갈 수 있기 때문이다.
또한 TCP/IP는 표준화된 규격이기는 해도 반드시 지켜야 하는 규격은 아니기 때문에 특정 환경에 맞게 프로토콜을 변경해야 하는 상황이 필요할 수도 있는데, 이렇게 계층이 분리되어 있으면 보다 용이하게 프로토콜을 조작할 수 있다. 내가 변경하고 싶은 스펙(규격)이 애플리케이션 층에서의 스펙이라면 애플리케이션 계층만 손보면 되고 다른 계층들은 고려할 필요가 없기 때문이다.
TCP/IP 통신의 흐름
TCP/IP 통신은 송신자의 네트워크에서는 애플리케이션 계층에서 시작해 링크 계층으로 올라가고 수신자의 경우는 링크 계층에서 시작에 애플리케이션 계층으로 올라온다. 택배를 보낼 때도 물건을 준비한 후 물건들을 포장하고 수신인의 주소를 적어 택배로 보내지 않는가. 마찬가지이다. 반대로 택배를 받는 입장에서는 포장을 하나하나 뜯어 마지막으로 물건을 확인하다. 네트워크 상에서의 TCP/IP 흐름도 이와 같다.
TCP/IP의 TCP와 IP
배송을 담당하는 IP
네트워크 계층에 해당되는 IP(Internet Protocol, IP 주소인 IP address와는 다른 것이다)는 인터넷을 활용하는 거의 대부분의 시스템이 이용하는 프로토콜로 TCP와 함께 중요한 프로토콜이다. IP의 역할은 TCP 등을 통해 내려온 각각의 네트워크 패킷들을 수신지로 전달하는 것으로, 이를 위해 IP 주소와 MAC 주소를 활용한다. IP 주소는 각 노드에 부여된 주소를, MAC 주소는 각각의 네트워크 카드에 할당된 고유의 주소를 가리킨다. IP 주소는 변경 가능하지만 MAC 주소는 기본적으로 변경할 수 없다.
IP 통신은 MAC 주소에 의존해 통신하게 되는데, 방대한 네트워크 환경에서 수신지의 MAC 주소를 찾아가는 과정에서는 ARP(Address Resolution Protocol)이라는 프로토콜이 사용된다. 즉, IP는 ARP를 이용해 수신지의 MAC 주소를 찾는다. ARP는 수신지의 IP 주소를 바탕으로 MAC 주소를 조사하는 프로토콜로 조금씩 세부적이고 정확한 위치를 찾기 위해 여러번의 경유지를 거쳐가는 방식을 사용한다. 인터넷 환경에서는 그 누구도 인터넷 전체를 파악할 수 없기 때문에, 마치 물어 물어 도착지를 찾아가는 과정처럼 목적지를 찾아가는 것이다.
신뢰성을 담당하는 TCP
기본적으로 IP는 데이터 전송의 안정성을 보장하지 않는다. 쉽게 말하면 데이터를 보내고 그 데이터가 목적지에 정상적으로 도착하였는지, 전송된 패킷 중 일부 혹은 전부가 네트워크 상에서 유실되지는 않았는지 판단하는 않는다는 것이다. 따라서 IP만을 사용해서 목적지로 데이터를 송신한 경우 전송 중간에 어떤 이유에서든 데이터가 유실되어 목적지에 도착하지 못했다 하더라도, 데이터를 보낸 입장에서는 데이터가 도착했는지 도착하지 못했는지 알 길이 없다.
TCP는 이러한 부분을 보완하기 위한 프로토콜로 데이터의 도착 여부를 3 ways handshake를 이용해 판단하고 데이터가 정상적으로 전송되지 못했다고 판단한다면, 데이터를 재전송한다. TCP는 데이터가 수신지로 무사히 도착했는지를 판단하는 과정 외에도, 데이터를 잘게 쪼갠 패킷들의 순서를 보장하여 송신지에서의 데이터가 수신지로 왜곡 없이 전달되도록 한다. 쉽게 IP는 "여기로 보내주세요"와 같은 프로토콜이고, TCP는 "잘 도착하게 해주세요. 잘 도착했나요?"와 같은 프로토콜이라고 생각하면 될 것 같다.
'네트워크' 카테고리의 다른 글
[외워서 끝내는 네트워크 핵심이론 - 기초] L3 수준에서 외울 것들 정리 (0) | 2023.03.23 |
---|---|
[외워서 끝내는 네트워크 핵심이론 - 기초] L2 수준에서 외울 것들 정리 (0) | 2023.03.20 |
[외워서 끝내는 네트워크 핵심이론 - 기초] Internet 기반 네트워크 입문 정리 (0) | 2023.03.17 |
HTTP 비연결성 (feat. 지속 연결) (0) | 2023.02.07 |
인터넷 네트워크 | 인터넷 통신, IP, TCP & UDP, Port, DNS (0) | 2021.10.04 |