본문 바로가기
computer science/네트워크

[네트워크] TCP/IP 4 Layer

by 박연호의 개발 블로그 2020. 12. 12.

TCP/IP 프로토콜은 명칭 그대로 TCP와 IP 두 가지의 프로토콜을 주축으로 한 프로토콜 집합입니다. 주축이라고 하지만 TCP를 반드시 사용해야 하는 것은 아니며 IP는 통신 상대 지정 시에 IP 주소를 사용하기 때문에 반드시 필요합니다. OSI 참조 모델에서는 7계층으로 분할했지만 TCP/IP에서는 반드시 이 7계층이 분명하게 나뉘어지는 것은 아닙니다. TCP/IP 4계층 모델등으로 불리며 OSI 7계층의 1~2 계층을 모아서 링크 계층, 5~7계층을 모아서 애플리케이션으로 취급합니다.

 

TCP/IP 모형은 현재의 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 통신규약(프로토콜)의 모음으로 각 계층은 담당하는 위치마다 처리 역할을 구분해 진행함으로 서로 간의 간섭을 최소화하여 사용의 편리성을 높힙니다.

 


애플리케이션 계층 : L4

애플리케이션이 없으면 통신이 시작되지 않습니다. 애플리케이션이 사용하는 프로토콜을 모두 애플리케이션 계층 프로토콜이라 부릅니다. 애플리케이션 계층 프로토콜은 자신이 통신을 하는 것이 아니라 통신 자체는 모두 OS, 즉 TCP/IP에 맡깁니다. 웹 시스템에서 가장 중요한 애플리케이션 계층 프로토콜은 HTTP입니다. 

 

HTTP는 한번 요청/응답 관계가 끝나면 세션을 종료하게 됩니다. 이 때문에 한 화면에 많은 이미지가 포함돼 있으면 몇 번이고 세션을 만들고 닫는 처리를 해야 합니다. 결국 하위 계층인 TCP에서 3way handshaking 등의 오버헤드가 발생하게 됩니다. 이 때문에 화면 하나를 표시할 정도의 세션만 유지하면 오버헤드를 줄일 수 있습니다. 이런 기능을 하는 것이 Keep-Alive이며 HTTP헤더에서 지정할 수 있습니다. 프로토콜 헤더의 Connection에 Keep-alive가 있으면 이 기능이 켜진 것이고 close로 되어 있으면 꺼진 것입니다. 


전송계층 : L3

소켓에 기록된 애플리케이션 데이터는 커널 내에서 통신 대상에게 전달하기 위한 준비를 시작합니다. 제일 먼저 임무를 수행하는 것이 전송계층 프로토콜 TCP입니다. TCP(Transmission Control Protocol)는 명칭 그대로 전송을 제어하는 프로토콜로 신뢰도가 높은 데이터 전송을 가리킵니다.  

 

TCP의 역할을 "애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 확실하기 전달하는 것"입니다. 사실 IP만으로도 통신할 수 있지만 IP는 데이터가 상대방에게 확실히 전달됐는지 확인하는 기능이나 도착한 순서를 확인하는 기능이 없습니다. TCP가 하는 기능은 많지만 중요한 기능은 다음과 같습니다.

 

  • 포트 번호를 이용해서 데이터 전송
  • 연결생성
  • 데이터 보증과 재전송제어
  • 흐름 제어와 폭주 제어

TCP는 세그먼트라고 하는 단위로 데이터를 관리하고 있습니다. 이 때문에 애플리케이션 데이터에 TCP헤더를 붙여서 TCP 세그먼트를 작성합니다. 헤더에는 도착 지점 포트 번호를 포함해서 TCP 기능을 표현하기 위한 수많은 정보가 기록됩니다. 하나의 TCP 세그먼트로 전송할 수 있는 최대 데이터 크기를 MSS(Maximum Segment Size)라고 합니다. 


네트워크 계층 : L2

TCP 세그먼트가 만들어 지면 다음은 IP 처리가 시작합니다.  IP의 역할을 간단히 말하자면, "지정한 대상 서버까지 전달받은 데이터를 전해주는 것" 이라 할 수 있습니다. 간단하지만 TCP/IP 중에서도 가장 중요한 기능이라 할 수 있습니다. 단, IP에서는 반드시 전달된다는 것을 보장하지 않습니다. IP가 담당하는 기능은 중요하지만 종류는 그다지 많지 많습니다.

  • IP주소를 이용해서 최종 목적지에 데이터 전송
  • 라우팅(routing)

IP에서는 최종 목적지 서버까지 여러 네트워크를 경유해서 데이터를 전송합니다. 이때 이용되는 것이 대상 서버를 나타내는 IP 이며 32비트로 표현된 숫자 집합니다. IP주소는 네트워크부와 호스트부로 나뉘며 네트워크부는 어떤 네트워크인지를 가리키고, 호스트부는 해당 네트워크 내에 있는 컴퓨터를 가리킵니다.

 

송식 및 수신 시에 서버 내에서만 처리되는 TCP와 달리 IP는 경로 도중에 다양한 처리가 이루어지며 라우팅(routing)도 그중 하나입니다. IP 주소를 이용해 대상 서버를 지정할 수 있지만 대상 서버가 항상 같은 네트워크 내에 있는 것은 아닙니다. 이 경우 최종 목적지에 도착할 때까지 목적지를 알고 있는 라우터에 전송을 부탁하며 각 라우터는 라우팅 테이블을 참조합니다. 

 

만약 라우팅 테이블에 오류가 있어 네트워크 상의 패킷이 계속 순회하게 되는 경우를 방지하기 위해 IP헤더에는 TTL(Time to Live)이라는 생존 시간 정보를 가지고 있습니다. 하나의 라우터를 경유할 때마다 TTL값을 하나씩 죽여 전송하며 만약 TTL값이 0이되면 라우터가 해당 패킷을 파기합니다. 


데이터 링크 계층 : L1

IP 패킷이 만들어지면 계속 해서 링크 계층의 처리가 시작합니다. 링크 계층에서 사용되는 대표적인 프로토콜은 이더넷(ethernet)입니다. "대표적"이라고 말한 것은 무선 랜 프로토콜은 이더넷이 아니기 때문입니다. 이더넷을 포함한 링크 계층 프로토콜의 역할을 간단히 말하자면, "동일 네트워크내의 네트워크 장비까지 전달받은 데이터를 운반한다"라고 할 수 있습니다. 

 

이더넷이란 링크 계층 프로토콜은 OSI 7계층 모델의 물리 계층과 밀접한 관계가 있습니다. 이더넷은 케이블 통신에서 사용되기 때문에 이더넷 프레임은 전기 신호로 전송됩니다. 이 때문에 이더넷 프로토콜에는 전기 신호의 특성과 관련된 제어 기능 등 다양한 기능이 포함돼 있습니다. 여기서는 전송 기능 중에서 아래와 같은 기능을 다루도록 하겠습니다.

  • 동일 네트워크 내(링크 내) 데이터 전송

IP는 IP 주소를 사용해서 여러 네트워크를 거쳐 데이터를 전송할 수 있지만 이더넷은 동일 네트워크 내, 즉 자신이 포함된 링크 내에서만 데이터를 전송할 수 있으며 이때 사용하는 주소가 MAC주소 입니다. 여기서 MAC주소는 네트워크 인터페이스 카드(NIC)에 할당된 고유 번호 입니다.