본문 바로가기

개발 이야기/network

[네트워크 상식#1] 프로토콜 스택 'TCP/IP' 4계층

"TCP/IP"

 

예전 네트워크에서는 어떤 업체에서 제조됐는지, 또 어떤 회사에서 사용하는지에 따라 다양한 프로토콜(통신 규약)이 존재했다. 이제는 여러 프로토콜들이 TCP/IP 프로토콜을 기반으로 하고 있다. TCP/IP는 프로토콜 자체가 아니라 프로토콜이 단계적으로 쌓인 묶음을 의미한다. TCP/IP 프로토콜 스택이라고도 한다.

 

각 계층은 병렬로 동작하지 않는다. 데이터를 전송할 때는 4계층에서 1계층으로 내려가고, 데이터를 수신할 때는 1계층에서 4계층으로 데이터를 올려보낸다. 각 계층에는 물리적으로 연결된 머신들이 전기신호를 데이터로, 데이터를 전기신호로 변환하는 데 필요한 프로토콜들이 있다.

 

TCP/IP 스택은 4계층으로 나뉜다. 

 

계층 계층명 예시 프로토콜, 장비
4계층 애플리케이션 계층 FTP, SSH, DNS, TELNET, HTTP
3계층 트랜스포트 계층 TCP, UDP, 로드밸런서
2계층 네트워크 계층 ICMP, IP, ARP, 라우터
1계층 데이터링크 계층 스위치, 허브
1계층 물리 계층 LAN, MAN, WAN 

 

 

 

"1계층: 물리, 데이터링크 계층"

 

1계층은 이더넷(LAN, WAN으로 연결된 네트워크 기술, 프로토콜) 프로토콜을 사용한다. 물리계층은 전기신호를 받으면 허브 또는 스위치에 신호를 전달한다. 데이터링크 계층에서의 허브, 스위치는 포트에 전기 신호를 보낸다.

 

물리 계층에서는 전기신호를 보내는 것 자체가 목적이다. 하지만, 데이터링크 계층에서는 전기신호를 목적지에 정확히 전달하는 게 목적이다. 허브는 전기신호가 들어온 포트 외 모든 포트에 신호를 보내므로 의의가 적지만, 스위치 같은 경우는 기기의 *MAC 주소를 알고 있기 때문에 정확한 주소에 신호를 보낼 수 있다. 

 

*MAC: 하드웨어의 물리적 주소. 총 48비트로 구성되어 있고 앞 24비트는 IEEE에서 제조사에 할당하는 제조사 코드, 뒤 24비트는 제조사에서 네트워크 장비에 할당하는 코드이다. NIC(네트워크 인터페이스 카드 or 컨트롤러)가 MAC 주소를 갖고 있다. 

 

 

 

"2계층: 네트워크 계층"

 

1계층에서 물리적인 주소인 MAC 주소가 쓰인다면, 2계층에서는 논리적 주소인 IP가 쓰인다. 논리적 주소라는 말이 와닿지 않는다. 네트워크 상에서 컴퓨터가 갖는 주소라고 생각하면 될 것 같다. IP는 네트워크 주소+호스트 주소로 되어있다. 기존에는 *클래스 방식으로 IP 주소를 할당했는데, 커버할 수 있는 범위가 약 40억 수준이다보니 지구상의 70억 인구를 감당하기엔 모자랐다. 더군다나 성장을 확신했던 기업들이 호스트 주소 범위가 가장 많은 A클래스를 사용하면서 할당 받을 수 있는 IP는 더 줄어들었다. 그래서 요즘은 *클래스리스 방식을 사용한다. 

 

라우터는 네트워크 간에 데이터를 전송할 수 있도록 하는 기기이다. IP는 네트워크 주소를 포함한다. 라우터는 IP 주소를 사용해 데이터를 전송할 최적의 네트워크 경로를 찾고, 데이터를 전송한다. 

 

*클래스: A, B, C 클래스 별로 할당받을 수 있는 네트워크, 호스트 주소 범위가 다르다. A클래스가 네트워크는 적고 호스트가 가장 많다. C클래스는 반대로 네트워크가 많고 호스트가 적다.

*클래스리스: 서브넷마스크로 네트워크와 호스트 주소를 구분한다.

 

 

 

"3계층: 트랜스포트 계층"

 

현재의 네트워크는 '패킷'이라는 데이터를 전송한다. 패킷은 데이터를 잘게 쪼갠 것이다. 때문에 패킷을 주고 받는 네트워크에서는 패킷 순서가 바뀌면 원본 데이터를 알아볼 수 없게 된다거나 패킷을 잃어버리는 경우가 생긴다. 3계층은 이런 일을 막기 위해 패킷을 분할할 때 패킷 헤더에 보내는 순서(시퀀스 번호), 받는 순서(ACK 번호)를 적어 통신한다. 또한, 장치 내에서 애플리케이션을 구분할 수 있도록 포트 번호를 사용한다. 트랜스포트 계층에서 보낸 데이터가 애플리케이션 계층으로 전송되어야 하므로, 어떤 애플리케이션에 전송되어야할 지 미리 적어놓는 것이다. 3계층 장비로는 로드밸런서와 방화벽이 있다. 

 

 

 

"4계층: 애플리케이션 계층"

 

애플리케이션 계층은 앱이나 웹 등 실제 서비스에서 데이터를 주고 받을 때 사용되는 프로토콜들이 있다. 사용자의 요청에 따라 데이터 송수신이 일어나기 때문에 사용자 인터페이스와 가장 가까운 부분이라고 할 수 있다. 가장 많이 사용되는 프로토콜의 예로는 http가 있다.