TCP/IP 4계층에서 각각의 계층별 특징에 대해 알아보도록 하자.
네트워크 이론에서 흔히 접하는 OSI 7계층은 1984년 ISO에서 개발한 네트워크 통신 모델로, 네트워크 통신 구조를 크게 7개의 계층(Layer) 개념으로 나눠 설명한 것이다. TCP/IP 4계층은 오늘날 흔히 쓰이는 TCP/IP 프로토콜이 미 국방성 통신 표준으로 채택되면서, 해당 프로토콜의 통신 과정을 크게 4개의 계층 구조로 나눠 설명한 것이다.
2개 모델은 엄밀히 말하면 서로 다른 탄생 배경을 가지지만, 쉽고 간단하게 이해하고자 한다면 전반적인 네트워크 전송 표준의 전반이 OSI 7계층이고, TCP/IP 프로토콜에 이러한 계층구조 개념을 적용하여 좀 더 단순화시킨 모형이 TCP/IP 4계층이라 할 수 있다.
여기서는 오늘날 흔히 쓰이는 TCP/IP 프로토콜에 초점을 맞춰 TCP/IP 4계층에 대해 살펴보고자 한다.
1. TCP/IP의 계층구조
위에서 언급한대로 TCP/IP 프로토콜에서 네트워크 통신을 위해, 각종 기능을 계층화하고 복수의 프로토콜을 조합하여 실현시킨 것이 TCP/IP 4계층 모델이다.
네트워크 연결 계층, 인터넷 계층, 트랜스포트 계층, 어플리케이션 계층 의 총 4계층으로 구성되며, 이런 식의 구분을 통해 각 기능들의 서로 간에 간섭을 최소화 할 수 있으므로, 유지와 보수에 있어 편리하다는 이점이 있다. 특정 계층에서 문제가 생기면, 그 계층을 살펴보면 되기 때문이다.
서로 다른 계층들 끼리는 데이터의 전달 과정을 구체적으로 알 필요가 없기 때문에, 데이터의 캡슐화 와 은닉이 가능하며, 이러한 캡슐화는 계층별로 데이터가 전달되면서 특정 정보를 담고 있는 헤더의 첨부를 통해 가능해진다.
그렇다면 각 계층별로 어떤 특징을 가지고 있는 지 살펴보자
1-1. 제 4계층 : 어플리케이션 계층(Application Layer)
응용계층이라고도 하며, 사용자와 가장 가까운 계층으로 사용자-소프트웨어 간 소통을 담당하는 계층이다. 웹프로그래밍을 하면서 흔히 접하는 여러 서버나 클라이언트 관련 응용 프로그램들이 동작하는 계층이다.
어플리케이션 계층에서는 어플리케이션의 기능을 실행하기 위한 데이터의 형식 및 처리절차 등을 결정하며, 데이터는 인간이 인식할 수 있는 문자나 이미지와 같은 형식으로 표현된다. 다양한 프로토콜이 사용되는데, 대표적으로 80번 포트를 사용하는 http 프로토콜 이 여기에 속한다.
1-2. 제 3계층 : 트랜스포트 계층(Transport Layer)
전송계층이라고도 하며, 데이터의 전송 및 흐름에 있어 신뢰성 보장 을 담당한다. 이는 다시말해 데이터를 적절한 어플리케이션에 제대로 전달되도록 배분함을 의미하며 다른 말로 End-to-End의 신뢰성을 확보 한다고도 표현할 수 있다.
흔히 어플리케이션 계층에서 트랜스포트 계층까지 바르게 동작하면, 출발지와 목적지 어플리케이션 간에 제대로 된 데이터의 송수신이 가능해진다고 할 수 있는데, 이는 앞서 말한대로 신뢰성이 보장되었기 때문이다.
트랜스포트 계층에 사용되는 대표적인 프로토콜로는 TCP
와 UDP
가 있다. 크게 TCP 는 연결지향형 프로토콜로, 패킷에 하나의 오류라도 있으면 재전송을 통해 에러를 복구하는 반면, UDP 는 패킷을 중간에 잃거나 오류가 발생해도 이에 대처하지 않고 계속해서 데이터를 전송하는 TCP에 비해 간단한 구조를 가지는 프로토콜이란 차이가 있다.
TCP 프로토콜과 TCP 헤더
전송 과정에서 나오는 각각의 개념들은 TCP 헤더 부분에서 살펴보도록 하자.
앞서 언급한대로 TCP 프로토콜은 신뢰성이 보장되는 연결지향형 프로토콜이다. TCP에서는 목적지로 어플리케이션 계층에서 전달받은 데이터를 전송에 알맞게 세그먼트(Segment)
단위로 나눠 전송하기 되는데, 여기서 세그먼트들은 검사합(Checksum)
이라 불리는 일종의 중복 및 오류 검사의 수행을 거쳐 일정한 순서에 맞춰서 전송된다.
신뢰성 보장은 연결지향적 특징으로 이어지는데, 이를 위한 대표적인 것이 위의 그림에서 설명하고 있는 3 Way Handshake
과정이다. 이는 사전에 통신이 정상적으로 이루어질 수 있는 지를 확인하는 과정으로, 상태 확인을 위한 데이터 패킷을 보내고 받는 과정을 통해 이루어진다.
우선 클라이언트가 서버에 접속을 요청하는 SYN 패킷
을 보내며, 응답을 기다리는 SYN_SENT
상태가 된다. 이후 서버가 포트가 열린 상태(Listen
)에서 패킷을 받으면 SYN_RESEIVED
상태가 되며, 데이터를 송신해도 좋다는 의미로 ACK 패킷
으로 응답하고 클라이언트로부터의 응답을 기다리게 된다. 이후 클라이언트는 응답을 받으면 다시 서버로 ACK패킷
보내고, 이후부터는 TCP 커넥션이 이루어진 ESTABLISHED
상태가 되어 데이터를 주고받을 수 있게 되는 것이다.
이 외에도 흐름 제어 , 혼잡 제어 등의 역할을 수행하는데, 여기서 흐름제어는 수신 측 버퍼의 오버플로우를 방지하는 것을 의미하며 , 혼잡제어는 전송되는 패킷 데이터가 과도하게 많아져 혼잡을 초래하는 상황을 방지하는 것을 의미한다.
앞서 TCP 프로토콜에서는 데이터가 세그먼트 단위로 전송된다고 하였다. 보통 TCP 세그먼트라고 함은, 어플리케이션 계층에서 보내진 데이터에 TCP 헤더가 추가된 것을 말한다. TCP 헤더에는 출발지와 목적지 포트번호, 시퀀스 번호, ACK 번호, 검사합 등의 요소가 존재하는데 각각의 요소에 대한 설명은 아래와 같다.
- 시퀀스 번호 : 데이터 전송의 순서 보장을 위한 정보로, 데이터가 분할된 경우에는 시퀀스 번호를 통해 어떻게 분할되었는 지 알 수 있음(전송되는 바이트 수를 기준으로 점점 증가)
- 앞서 언급한
MSS
기준 세그먼트가 분할되는 것과 대응되는 내용!
- 앞서 언급한
- ACK 번호 : 응답 번호라고도 하며 수신측 프로세스에서 수신한 바이트 수를 제대로 응답하기 위해 사용됨
- Flags : SYN, ACK 등의 제어 번호가 담긴 제어 비트 영역
- Window Size : 수신 윈도우의 버퍼 크기를 지정할 때 사용되는데, 사이즈가 0일 경우에는 송신 프로세스가 전송을 중지함
- 포트 번호 : TCP 프로토콜을 통해 연결되는 송, 수신측(출발지-목적지 양 끝)에 할당되는 포트 번호
- 검사합(checksum) : 세그먼트에 포함된 헤더 및 데이터에 대한 오류 검출 용도
UDP 프로토콜
UDP 프로토콜은 TCP와 대비되는 비연결, 비신뢰적 특징 을 갖는 전송계층의 프로토콜이다. TCP와 달리 사전 연결 과정 없이 일단 데이터그램을 전송하고 보기 때문에, 빠른 전송이 가능하지만 신뢰성은 그만큼 떨어진다.
UDP가 제공하는 서비스는 최소한의 신뢰성을 위한 오류제어 메커니즘으로 검사합(checksum) 기능을 옵션으로 제공할 뿐이며, UDP 헤더는 TCP 헤더에 비해 포트번호에 검사합 관련 정보 정도가 추가된 정도로 비교적 간단한 구조를 보인다.
동일하게 데이터그램(여기서는 세그먼트가 아닌 데이터그램 단위로 데이터가 전송된다.)의 전송 순서 또한 보장되지 않으며 중간에 유실되어도 이를 재전송하지 않는다. 하지만 TCP와 달리 UDP는 데이터를 분할하는 과정을 거치지 않기 때문에, 전체 데이터의 경계가 구분될 뿐더러 1:1, 1:N, N:N 통신이 모두 가능해진다.
1-3. 제 2계층 : 인터넷 계층(Internet Layer)
네트워크 상에서 데이터의 전송(패킷의 이동)을 담당하는 계층으로 서로 다른 네트워크 간의 통신을 가능하게 하는 역할을 수행한다.
인터넷 계층에서는 네트워크 상에서의 데이터의 이동경로를 다루는데, 여기서 출발지와 목적지의 표시를 위한 논리적인 주소로 IP주소
를 할당하게 된다. IP주소는 네트워크 상에서 컴퓨터를 식별하는 번호로 기능하며, 보통은 32비트의 숫자롤 8비트씩 끊어서 표현한 IPv4
가 보편적이지만, 오늘날 이것이 포화상태이기 때문에 범위를 확장시켜 128비트의 주소 체계를 활용한 IPv6
가 사용되고 있다.
네트워크끼리 연결하고 데이터를 전송하는 기기를 라우터
라고 하며, 라우터에 의한 네트워크 간 전송을 라우팅
이라고 한다. 라우터는 내부의 라우팅 테이블(Routing Table)
을 통해 경로 정보를 등록하여 데이터 전송을 위한 최적의 경로를 찾는데, 이렇게 출발지와 목적지 간의 데이터 전송 과정을 가리켜 End-to-End 통신
이라고 부른다.
쉽게 말해, 출발지에서 목적지까지 여러 라우팅 과정을 거쳐 최종적으로 End-to-End 통신이 수행되는 셈이다.
1-4. 제 1계층 : 네트워크 연결 계층(Network Access Layer)
네트워크 연결 계층은 물리적인 데이터의 전송을 담당하는 계층으로, 여기서는 인터넷 계층과 달리 같은 네트워크 안에서 데이터가 전송된다.
제 1계층을 물리적 계층(Physical Layer)
과 데이터 링크 계층(Data Link Layer)
로 나눠서 TCP/IP 계층구조를 5개로 나누기도 하는데, 여기서 물리적 계층은 하드웨어적 측면의 기능을 담당하며, 네트워크 간의 데이터의 전송은 데이터 링크 계층이 담당하게 된다.
데이터 링크 계층(Data Link Layer)
네트워크 장비 간에 데이터를 전송하는 역할을 수행하며, 이더넷(Ethernet)
프로토콜을 사용한다. 데이터 링크 계층에서는 데이터 전송 과정에서의 오류를 감지하는 역할도 하는데, 이는 이더넷 헤더
와 함께 인터넷 계층에서 전달받은 패킷
의 반대쪽 끝에 트레일러(trailer)
을 붙임으로써 수행된다.
이더넷은 LAN과 WAN에서 사용되는 기술규격으로 MAC 패킷과 프로토콜의 형식을 정의한다. 실제로 뒤이어 언급할 물리 계층을 거쳐 들어온 데이터가 통신망 내에서 최종적으로 전송될 목적지를 식별하기 위해 MAC 주소
를 사용하는데, 이는 논리적 주소인 IP와 달리 제조사에 의해 할당된 고유 주소로 컴퓨터의 물리적인 주소를 나타내는 것이다.
LAN(Local Area Network) & WAN(Wide Area Network)
LAN은 근거리 통신망을 의미하며 특정 거점 내의 PC나 서버의 통신을 가능하게 하며, 복수의 거점에서 통신을 하기 위해 LAN끼리 연결한 것을 WAN이라고 한다.
물리 계층(Physical Layer)
물리 계층은 0과 1로 표현된 이진 데이터를 전기 신호로 변환하거나, 전기 신호를 이진 데이터로 변환하는 역할 수행한다. 여기서 전기 신호의 전달은 유, 무선의 전송매체를 통해 이루어지는데, 대표적으로 허브(hub)
라는 장비가 사용되며 전기 신호를 전형하고 증폭하는 기능을 한다.
허브에는 보통 여러 개의 포트가 있어 여러 컴퓨터와의 연결이 가능한데, 특정 포트에 연결된 컴퓨터로부터 데이터를 받았을 때 여기서 어떤 포트로 전송할 지 결정하지 않고 일단 나머지 모든 포트로 받은 데이터를 전송한다. 앞서 언급한대로 최종 목적지 컴퓨터로의 데이터 전송 판단은 이후 데이터 링크 계층에서 헤더에 나타난 MAC 주소를 보고 최종 판별하게 된다.
2. 데이터 전송의 흐름
앞서 4개 계층의 각 역할에 대해서 간단히 살펴보았다. 똑같은 데이터이지만 각 계층별로 이를 부르는 명칭이 다른데, 이는 TCP/IP의 각 계층을 거치면서 데이터에는 여러 프로토콜의 헤더가 추가됨에 따라 명칭을 달리했기 때문이다.
맨 처음 언급했지만 이런 식으로 각 계층별로 헤더를 추가하여 정보를 감싸는 것을 캡슐화(Encapsulation)
라고 한다. 반복해서 말하지만 보통 제 4계층에서 1계층으로 데이터가 전송되면서 헤더가 추가되며, 데이터를 역으로 수신할 경우에는 1계층에서 4계층으로 가면서 해당 계층별로 필요한 헤더를 확인 후 헤더를 삭제하게 된다.
데이터의 전송 과정에서 1계층에서 4계층까지 순서대로 프레임(frame)
, 패킷(packet) 혹은 데이터그램(datagram)
, 세그먼트(segment) 혹은 데이터그램
, 메시지(message)
로 데이터를 구분해서 표현한다. 웹 브라우저에서의 http 통신을 예로 들면 아래와 같이 표현할 수 있다.
- 전형적인 웹브라우저에서의 통신의 경우, 우선 데이터에
http 헤더
가 추가되면서 http 메시지가 된다. - 트랜스포트 계층을 거치면서 http 메시지에
TCP 헤더
가 추가되면서 세그먼트가 된다.- 만일 UDP 프로토콜을 사용할 경우에는 데이터를 분할하지 않았기 때문에 세그먼트 대신
데이터그램
이 될 것이다.
- 만일 UDP 프로토콜을 사용할 경우에는 데이터를 분할하지 않았기 때문에 세그먼트 대신
- 인터넷 계층을 거치면서 IP 주소 정보가 포함된
IP 헤더
가 추가되어 패킷이 된다. - 패킷에
이더넷 헤더
와 FCS가 추가되어프레임
이 된다.