OSI (Open System Interconnection)
국제표준화 기구 ISO (International Standard Organization)에서 Open 시스템간 원할한 정보 교환을 위해 7계층을 가지는 Protocol 표준을 제시하였고 이걸 ISO 7 Layer라고 부른다. 사람과 사람이 말로 소통할때도 언어를 가지고 소통을 한다. 언어에는 발음, 뜻, 문법등과 같은 항목을 약속하고 이것을 지켜 소통을 하는데 이것들을 표준화로 정해놓았다고 생각하면 수월할 것 같다.
이렇게 계층을 분류하는 이유는 위에서 언급한 상호 호환성을 증가시키기 위함도 있지만 각 계층별 역할을 명시함으로써 복잡함을 감소시키는 이유도 있다.
OSI 7 Layer를 배우면서 계단과 같은 느낌을 많이 받았다. 예를들어 각 층마다 처리할 수 있는 업무가 정해진 회사가 있다고 가정해보자. 3층에서 처리가 가능한 업무를 하고자 한다면 3층 까지만 올라가서 업무를 처리하고 내려오면 된다.
그렇다면 회사를 설계할때, 더 원초적인 업무를 처리하는 것이 아래층에 존재해야 오르락 내리락하는 과정을 줄일 수 있을 것이다. 또한 아랫층에서 처리 가능한 업무를 최대한 진행하고 어쩔 수 없는 업무만 윗층에서 처리하는 것이 효율적일 것이다.
이런 효율적인 측면에서의 설계사항이 OSI 7Layer와 네트워크 구축 과정에서 잘 드러나게 된다.
(Layer 1) Physical Layer
Physical Layer는 이름 자체로 알 수 있듯이 물리적인 연결에 관한 계층이다. 전기적(물리적)인 연결로 인해서 활성, 관리, 비활성과 같은 작업을 한다고 생각하면 된다. 해당 계층에서는 물리적인 신호인 bit 단위로 전송이 된다. 직관적으로 설명하자면 케이블이나 무선 전파를 활용한 모스부호로 통신하는것을 연상하면 된다. 해당 계층에서의 문제점은 누군가 전기적인 신호에 케이블을 연결하거나 무선 전파를 수신하는 것과 같이 물리적으로 연결만 하면 누구든 통신에 참여하게 된다. 즉 특정 대상에게만 전달 하는 것을 보장할 수 없다.
주요 장비로는 Cable, Ethernet Hub, Repeater (Multi-port Repeater)등이 있다. 이 장비들은 데이터의 내용을 이해하거나 처리하지 않고 신호를 증폭시키거나 재생성하여 전달하는 역할을 한다.
(Layer 2) Data Link Layer
Data Link Layer는 논리적인 연결(Link)을 수행한다. 논리적인 연결이라 함은 source(송신지)가 있고, destination(수신지)가 있다는 의미이다. 해당 계층에서의 송/수신지는 MAC Address를 일반적으로 사용한다. 하지만 MAC Address는 물리적인 주소임과 동시에 평면적이여서 고유하지만 소속에 관한 정보는 알수가 없다.
평면적이다 라는 표현을 설명하자면, 한국 사람들은 누구나 주민등록번호를 고유하게 또 유일하게 가지고 있다. 하지만 주민등록번호를 우편 주소란에 적으면 우편이 제대로 발송되지 않을 것이다. 우체국에서는 해당 주민등록번호가 어디에 사는지 어딜 가르키는지 조차 모르기 때문이다.
하지만 우리집에 5명의 가족이 살고있는데 우편에 주민등록번호가 적혀있으면 찾아줄 수 있을 것이다. 해당 주민등록번호가 누군지 가족들에게 물어보고 본인 주민등록번호라고 말하는 사람에게 전달해주면 될 것이다.
이렇듯 평면적이라고 함은 물리적으로 연결되어 있는 사이에서는 어떻게든 찾아서 전달해줄 수 있지만, 이것을 전국 혹은 세계에서 바라보았을 때 소속을 알 수 없어 외부적으로는 표현이 불가능 하다라는 이야기이다.
Data Link Layer에서는 추가적으로 데이터가 손상이 되어 있는지, 수신자가 처리할 수 있는 상황인지, 동시에 너무 많은 전송이 이루어지고 있진 않은지와 같은 내용들을 확인하고 전달한다. 그리고 해당 계층에서 전송되어지는 데이터 형식을 Frame이라고 부른다.
주요 장비로는 L2 Switch, Bridge등이 있다. MAC 주소를 기반으로 프레임을 처리하는 역할을 주로 수행한다. L2 Switch는 MAC 주소 테이블을 학습(Learning)하여 프레임을 적절한 포트로 전달하는 역할을 한다. Bridge는 서로 다른 네트워크 세그먼트를 연결하여 충돌 도메인을 분할하는 역할을 한다. 하지만 요즘 시대에는 Switch를 사용하는걸로 자리가 잡혔다. 충돌을 0에 가깝게 제거할 수 있기 때문이다.
(Layer 3) Network Layer
Network Layer에서는 네트워크간 연결을 수행한다. 노드간 경로 선택과 연결성을 제공해주며 논리적 주소를 이용한 Packet을 라우팅해준다.
위에서 Data Link 계층에서의 MAC은 평면적이라고 설명하였다. 이제 네트워크간 연결을 수행해야하기 때문에 평면적인 주소로는 주소지를 찾을 수 없다. 때문에 Network 계층에서는 계층적 주소인 IP Address를 사용한다.
우리가 흔히 사용하는 3계층 주소인 IP Address에는 Network 부분과 Host 부분으로 나누어져 있다. 만약 IP 주소가 192.168.1.100이고 서브넷 마스크가 255.255.255.0라면 192.168.1이 Network 부분, 100이 Host 부분을 의미하게 된다. Network는 이 동네가 어느 동네인지, Host는 그 동네에 몇 번째 집인지를 나타낸다.
이렇게 계층적인 주소를 쓰는 이유는 목적지가 우리 동네(네트워크)의 데이터가 아니면 다른 동네로 넘겨주기 위해서 이다. 그래서 Network Layer의 핵심 기능은 라우팅(Routing)이다. 라우터는 라우팅 테이블을 가지고 있는데, 이 테이블에는 "이 주소로 오는 데이터는 이 방향으로 보내야해"가 기록되어 있다.
라우터가 최종 목적지에 직접 전달 하는게 아니라 부산을 가려면 이쪽 방향으로 가야해 정도만 기록이 되어있는 것이다. 만약 고속도로에서 모든 시군구 읍면리가 다적혀있는 이정표를 보여주게 되면 주행하다 멈춰서 이정표를 빤히 보다 다시 출발해야 할 것이다. 때문에 이정표는 큰 분기점에 대해서만 간단하게 적혀있는게 유리할 것이다. 바로 이 이정표 데이터가 테이블 형태로 라우터에 들어있는 것이다.
주요 장비로는 L3 Switch, Router가 있다. 결국 위 설명처럼 IP 주소를 기반으로 라우팅하는 것이 핵심인 장비들이다. Data Link와 동일하게 라우팅 테이블에 IP 주소들을 찾아 매핑하는 것 또한 학습(Learning)이라고 표현한다. 라우터는 말그대로 라우팅 기능을 수행하고, L3 Switch는 스위칭과 라우팅 모두 수행한다. 여기서 스위칭을 제공한다는 의미는 VLAN간 통신을 가능하게 한다는 의미이며 이후에 자세히 다뤄보도록 하자.
(Layer 4) Transport Layer
Transport Layer에서는 양쪽 호스트간 전송을 제어하는데 이 전송 과정에서 신뢰성을 확보한다. 신뢰성은 오류 확인 및 복구를 통해서 확보한다. 이러한 오류 확인 및 복구를 위해 Segmentation(단편화)를 진행한다. 또한, TCP 혹은 UDP와 같이 어떻게 전송할지에 대한 전송 방법 또한 선택한다.
단편화 같은 경우는 데이터의 길이를 일정한 크기로 적절하게 잘라내고 분배하여 전송한다. 수신자 쪽에서는 이를 받고 순서대로 다시 조합한다.
예를들어 큰 비행기를 외국에 수출한다고 가정해보자. 큰 비행기를 수송하기 위해 큰 선박을 가지고 비행기를 수송하게 될 것이다. 이 비행기가 목적지에 도착하고 나면 비행기에 문제가 없는지 검사하게 될 것이다. 비행기가 문제가 없는지 확인하기 위해서는 비행기에 전부를 면밀히 확인해야하고 문제가 있으면 이렇게 큰 비행기를 다시 큰 선박으로 배송해야할 것이다. 비용이 너무나도 많이든다. 또한 해적을 만났을 때 비행기를 통째로 도난당할 것이다.
반면, 이 비행기를 부품단위로 나누어서 일정한 크기의 컨테이너에 넣어 보낸다고 생각해보자. 검사자 입장에서는 컨테이너 내부에 들어있는 부품이 문제가 있는지 없는지 확인하고 문제가 있으면 해당 부품만 다시 보내달라고 요청할 것이다. 그리고 이 경우에 큰 선박을 사용할 필요 없이 작은 여러개의 선박으로 받을 수 있다. 해적을 만났을 때 모든 부품을 잃어버리지 않을 확률이 높아진다. 이런 안정성, 속도, 효율 측면에서 나누어 보내는것이 유리하기 때문에 segementation으로 나누어 데이터를 전송한다.
TCP의 경우에는 각 컨테이너마다 수령확인서를 받고 순서에 맞춰 조립하고 중간에 유실된 부품들은 재배송을 요청한다. 반면 UDP는 빠르게 보내기만 하고 도착 여부를 확인하지 않는다. 이는 TCP/IP에서 다시 한번 다뤄보도록 하자.
Network 계층에서는 논리적이고 계층적인 IP 주소를 통해 라우팅하여 대상에게 데이터를 전달한다고 했다. 그런데 생각해보면 일반적인 서버에선 IP만으로 정보를 수신하여 분류하고 있지 않다. IP 주소로 받은 데이터를 Port로 다시 분류하여 Application에 전달한다. 이 포트 번호를 통한 구분도 Transport 계층에서 이루어진다.
주요 장비로는 L4 Switch, L4 Firewall이 있다. 위에서 언급했듯 포트 번호를 사용한단 의미는 L4장비는 포트를 사용하는 역할을 수행한다는 의미이다. L4 Switch는 들어오는 패킷들을 적절히 알맞은 서버 인스턴스에 분배해주는 Load Balancer 역할을 수행하고, L4 Firewall은 특정 포트로 들어오는 패킷만 허용하거나 차단하는 Firewall의 역할을 수행한다.
Lower Layer (Layer 1 ~ 4)
Physical Layer부터 Transport Layer까지를 Lower Layer라고 부른다. 굳이 이렇게 4개의 계층을 따로 부르는 이유는 해당 계층들이 실직적인 데이터 전송에 관여하는 계층이기 때문에 그렇다. 즉 "데이터를 어떻게 안전하고 정확하게 목적지로 전달하는가?"에 초점을 맞춘 계층이라는 의미이다.
Physical Layer에서는 실제 데이터를 물리적인 장치로 전달할 수 있게 하고, Data Link Layer는 직접 연결된 장치 간 송신지/수신지를 판정하고 프레임을 전달한다. Network Layer는 네트워크간 패킷을 라우팅하며, Tranport Layer는 신뢰성 있는 종단간 데이터 전송을 맡는다.
(Layer 5) Session Layer
Session Layer는 이름과 같이 세션 관리를 담당하는 계층이다. 세션이라 함은 두 응용 프로그램간 대화를 유지시키는 것을 의미한다. 체크포인트를 설정해서 전송 중 오류가 발생하면 해당 지점부터 재전송하는 동기화(Synchronization)나 반이중(Half-duplex) 또는 전이중(Full-duplex)과 같은 통신 모드를 결정한다.
반이중(Half-duplex)는 송신과 수신을 동시에 할 수 없는 단방향 전송 방식이다. 대표적인 예시로 무전기 사용 시 단일 주파수를 사용하기 때문에 버튼을 누르면 듣는건 불가하고 말할 수 있고, 버튼을 때면 듣기만 가능하다. 또한 마지막에 Over를 붙이는 이유는 송신을 완료함을 알리는 메세지를 사용한다. 대표적인 반이중 통신으로 볼 수 있다.
전이중(Full-duplex)는 송신과 수신을 동시에 하는 양방향 전송 방식이다. 일반적인 전화 통화를 생각하면 된다. 서로 동시에 말할수도 들을수도 있다.
정리하자면 Session Layer는 친구와 전화 중에 잠깐 다른일을 하고와서 "우리 어디까지 이야기 했지?"라고 물어보고 다시 이어나가는 그림을 생각하면 된다. 주로 SQL 세션이나 RPC(Remote Procedure Call), 웹 브라우저와 서버간의 세션 쿠기로 인한 상태 유지 등을 연상하면 된다.
(Layer 6) Presentation Layer
Presentation Layer는 데이터 표현 방식과 형식 변환을 담당한다. 데이터 표현이나 형식이라 하면 인코딩/디코딩 정도로 생각할 수 있지만 그 외에도 압축 / 압축해제, 암호화 / 복호화와 같은 역할도 이에 해당된다.
이 계층부터는 꽤나 우리와 가까운 위치로 올라오게 된다. JPEG는 이미지 압축 포멧이고, 우리가 일상적으로 접근하는 HTTPS는 SSL/TLS 암호화를 진행한다. 그리고 UTF-8과 같은 인코딩 방식들도 많이 접하게 된다.
(Layer 7) Application Layer
Application Layer는 사용자가 직접 상호작용하는 계층이다. 아주 대표적으로는 UI가 제공된다는 점이다. 우리가 지금 보고있는 이 웹 브라우저도 HTTP/HTTPS 프로토콜을 UI 형태로 제공하고 있다. 이메일도 SMTP, POP3, IMAP과 같은 프로토콜을 UI 형태로 제공하고 있다. 이렇듯 사용자가 직접적으로 상호작용하는 계층이다. 유저에게 input을 받고 통신 결과를 output으로 써 제공하는 계층이라고 생각하면 편하다.
주요 장비로는 L7 Switch, WAF, Proxy Server, API Gateway등이 있다. 사실상 L7 수준의 장비까지 오면 서버에 준하는 장비라고 생각하면 된다. 당장 Linux만 생각해 보더라도 그 안에서 여러가지 서비스를 실행시킬 수 있다. 당연히 하나만 중점적으로 수행할 수 있게 만들 수 도 있을 것이다.
HTTP 헤더나 URL 기반으로 더 고차원적인 Load Balancing을 구현 하면(Nginx, Apache) L7 Switch가 되고, ModSecurity 같은 것을 구축하여 웹 애플리케이션 레벨의 공격을 차단하면 WAF 장비가 된다. 또 적절하게 들어오는 패킷에 Client 혹은 Server의 정보를 숨기면 Proxy Server가 되고, 각 엔드포인트 별로 트래픽 밸런싱을 수행하면 API Gateway가 될 것이다.
Upper Layer (Layer 5 ~ 7)
Lower Layer와는 다르게 Upper Layer는 전송 자체에 신경쓰기 보다는 "전송된 데이터를 어떻게 처리할 것인가? 전송된 데이터의 의미가 무엇인가?"에 집중한다. 연결을 유지시킨다던가, 데이터 형식을 바꾸고 암호화를 한다던가, 데이터를 압축한다던가, 인가된 요청인지 판별한다던가, 사람이 읽을 수 있는 형태로 변환하는 것 처럼 전송 자체가 아닌 데이터 가공 및 분석에 초점이 맞춰져 있다.
"데이터 가공 및 분석에 초점이 맞춰져 있다"는 말은 결국 소프트웨어적으로 해결을 해야한다는 의미이기도 하다. 이게 L5, L6의 장비가 별도로 존재하지 않는 이유이기도 하다. 지금까지 사실상 L5, L6, L7의 역할을 묶어 서버라는 개념으로 구동시키고 있으니 말이다. 하지만 L7에서만 해결할 수 있는 작업들이 존재하고 해당 목적으로만 구동되는 장비로 분류를 하기 시작한 것이다.
이러한 특성 때문에 L7 장비들은 하드웨어와 소프트웨어의 경계를 흐리는 존재가 되었고 클라우드 환경에서는 대부분 소프트웨어 정의 네트워킹(SDN: Software-Defined Networking) 형태로 넘어가고 있다.
Capsulation
'Basic > Network' 카테고리의 다른 글
1. Network (0) | 2025.07.21 |
---|