[ Network ] OSI 모델 (7계층)
물리계층 (physical layer)
인접한 두 장비 사이에 통신 신호를 전송하는 역할을 함. 기계적, 기능적, 전기적 사양을 정의한다.
- 기계적: (PC와 스위치를 연결)
만약 랜 케이블과 커넥터를 예시로 들면 랜 장비를 연결하는 커넥터를 RJ45 라고 하며,UTP 라는 8가닥의 구리선을 이용하여 장비들을연결한다. 만약 PC나 스위치를 RJ45 커넥터로 연결하려면 커넥터의 크기, 모양 등이 동일해야한다.
- 기능적: (필요한 신호를 송수신할 핀의 번호 지정)
RJ45 커넥터의 핀과 8가닥으로 이루어진 랜 케이블을 어떻게 연결해야 하는지 결정해야한다. 케이블 배열에 대한 표준인 TIA/EIA-568 을 따라 케이블과 커넥터를 접속한 뒤 PC 와 스위치를 연결한다. 다음 단계는 어느 핀을 통해서 어떤 신호를 송수신해야 할지를 정해야하며 통신 방식에 따라 여러 표준이 있다. 표준에 따라 전송 및 수신하는 핀을확인할 수 있다.
- 전기적: (0과 1을 나타내는 전압을 정의)
물리 계층에서는 여러 개의 0과 1이 조합되어 만들어지는 내용의 의미는 모른다. 전송도중 에러가 발생했을 때 복구하는 것이나 신호의 내용이 가지는 의미를 해석하여 그에 따라 적절하게 동작하는 것은 링크 계층을 포함한 상위 계층에서 할 일이다.
물리 계층의 표준은 이외에도 장거리 통신망(WAN) 장비를 연결할 때 사용하는 V.35, RS-232 등의 커넥터와 T1, E1 등으로 불리는 신호 전송방식 등 여러가지가 있다. 물리계층의 동작 범위는 인접한 장비까지임. 즉 ‘케이블을 잡아당겼을 때 흔들리는 구간까지’이다.
데이터 링크 계층 (data link layer)
라우터 라는 장비로 구분된 구간에서 프레임(frame)이라는 데이터의 묶음을 전달하는 역할을 담당한다. 보통 링크 계층이라고 한다.
링크 계층 프로토콜들은 용도에 따른 프레임의 종류를 정의하고, 프레임 내 각 필드(field)의 길이, 의미 등을 지정한다. 링크 계층에서 사용하는 주소를 정의하고 에러 발생 확인 및 에러 복구 절차 등도 지정한다.
링크 계층은 물리 계층을 통해 수신한 0과 1로 이루어진 신호를 조합하여 프레임 단위의 묶음으로 신호를 해석한다. 예를 들어 LAN에서 사용하는 링크 계층 프로토콜인 이더넷이 사용하는 프레임의 형태(format)는 다음과 같다.
상대 장비에게서 수신한 신호의 처음 6바이트(48비트)는 목적지 MAC 주소로 인식한다. MAC 주소는 LAN에서 사용하는 링크 계층 주소이다. 링크 계층에서 사용하는 MAC 주소는 장비를 만들 때 LAN 포트마다 할당하여 저장하며 물리적인 주소라고도 한다.
두 번째 6바이트는 출발지 MAC 주소로 인식한다. 이와 같은 방식으로 송신 또는 수신시 신호를 묶어서 해석하고 그에 따라 사전에 정의된 적절한 동작을 취한다. 링크 계층의 동작 범위는 ‘라우터’에 의해서 구분된다. 웹 서버와 라우터 사이에 이더넷(ethernet)이라는 링크 계층의 프로토콜이 동작한다. 라우터와 또 다른 라우터 사이에는 PPP(Point to Point protocol)이란 링크 계층 프로토콜이 동작한다. 즉 라우터를 건더면 또 다른 링크 계층 프로토콜이 동작한다. 하지만 같은 종류의 링크 계층 프로토콜이 사용될 수도 있다.
링크 계층의 프로토콜로 LAN에서 사용되는 이더넷, WAN(장거리 통신망)에서 사용하는 PPP, 프레임 릴레이(frame relay), ATM(asynchronous transfer mode) 등이 있다.
네트워크 계층 (network layer)
통신의 최종 당사자들인 종단장비 사이에 패킷(packet)이라는 데이터의 묶음을 전달하는 역할을 한다.
각 장비를 구분하기 위한 주소를 정의해서 사용한다. 이 주소들은 장비를 생산할 당시에 정해진 것들이 아니고 네트워크를 설정할 때 사용자가 정하므로 논리적인 주소라고 한다. IP(Internet Protocol)라는 네트워크 계층 프로토콜이 사용하는 주소를 ‘IP 주소’라고 하고 IPv6라는 프로토콜에서 사용하는 주소를 ‘IPv6 주소’라고 한다.
물리 계층은 인접장비 사이에 동작하고 링크 계층은 라우터에 의해서 구분된 구간에서 동작하는 반면, 네트워크 계층은 스위치, 라우터 등을 지나 종단장비 사이에 동작한다. 즉 웹 서버에서 출발한 IP 패킷이 도중에 변경 없이 PC까지 도달한다. (나중에 공부할 주소변환 기술인 NAT 등을 사용하는 경우에는 패킷이 변경될 수도 있다.)
대표적인 네트워크 계층의 프로토콜로는 IP, ICMP(Internet control message protocol), IPv6, ICMPv6 등이 있다.
전송 계층 (transport layer)
종단장비에서 동작중인 응용 계층 사이에 세그먼트(segment) 라는 데이터의 묶음을 전달하는 역할을 한다.
예를 들어, PC에서 웹 서버를 접속하면 HTTP(hypertext transport protocol)라는 응용 계층 프로토콜이 동작한다. 네트워크 계층 프로토콜인 IP가 PC에서 웹 서버까지 패킷을 전달하면, IP 패킷 내부에 있던 전송 계층 프로토콜인 TCP(transmission control protocol)가 내부의 데이터를 HTTP 라는 응용 계층 프로토콜에게 전달한다.
대표적인 전송 계층의 프로토콜로는 TCP와 UDP(user datagram protocol)가 있다.
세션 계층 (session layer)
종단장비 사이 세션(통신)의 시작, 종료 및 관리 절차 등을 정의한다. 대표적인 세션 계층의 프로토콜로는 NetBIOS, TCP 세션 관리 절차 등이 있다. 세션 계층 이상에서 송수신하는 데이터의 단위를 메시지(message)라고 한다.
표현 계층 (presentation layer)
상위 계층 프로토콜인 응용 계층에 대해 데이터 표현 방식의 변환, 암호화 등의 서비스를 제공한다. 대표적인 표현 계층의 서비스로는 ASCII (애스키)형식의 데이터를 EBCDIC(앱스딕) 형식으로 변환하는 것을 들 수 있다. 애스키와 앱스딕 모두 문자를 표현하는 방식이다.
응용 계층 (application layer)
응용 프로그램과 통신 프로그램 사이의 인터페이스를 제공한다. 예를 들어 HTTP라는 응용 계층 프로토콜은 응용 프로그램인 웹 브라우저에게 필요한 데이터를 송수신할 때 사용한다. 대표적인 응용 계층 프로토콜로 원격접속을 위한 텔넷(telnet), 파일전송을 위한 FTP, 도메일 이름을 IP 주소로 변환시켜주는 DNS, 메일 전송을 위한 프로토콜인 SMTP 등이 있다.
인캡슐레이션과 디캡슐레이션
각 프로토콜들의 동작에 필요한 정보를 기록한 것을 프로토콜 헤더(header)라고 한다. 모든 프로토콜들이 자신의 동작에 필요한 정보들을 데이터의 앞부분에 붙이므로 헤더라는 용어를 사용한다. 이더넷 헤더에는 출발지 및 목적지 이더넷 주소 등이 기록되어 있고, IP 헤더에는 출발지 및 목적지 IP 주소 등이 기록되어 있다.
응용 계층 프로토콜인 HTTP는 웹 프로그램부터 데이터를 받아 HTTP 헤더를 붙이고 이를 하위 계층 프로토콜에게 내려보낸다. 하위 계층 프로토콜은 상위 계층 프로토콜로부터 전달받은 헤더와 데이터를 모두 데이터로 간주하고 여기에 자신의 헤더를 붙여 다시 하위 계층으로 내려 보낸다. 이처험 상위 계층 정보에 자신의 헤더를 부착하는 것을 인캡슐레이션(encapsulation) 이라고 한다. 상위 계층에서부터 차례로 인캡슐레이션 되어 내려온 데이터를 최종적으로 물리계층에서는 0 또는 1 이라는 비트(bit) 신호로 전송한다. 다른 계층과 달리 링크 계층에서는 에러를 확인하기 위해 프레임의 꼬리에 필드를 추가하며, 이를 트레일러(trailer)라고 한다.
장비가 통신 상대에게서 물리 계층을 통해 비트들을 수신하면 이들을 조합하여 프레임으로 해석하고 , 프레임 헤더(L2 헤더)의 정보 중에 목적지 주소가 자신인지 확인한다. 문제가 없으면 L2 프로세스는 L2 헤더를 제거하고 상위 계층으로 데이터를 올려보낸다. 상위 계층은 자신의 헤더를 확인하고, 이상이 없으면 자신의 헤더를 제거하고 다시 상위 계층으로 데이터를 올려보낸다. 이처럼 수신측의 각 계층이 자신의 헤더를 제거하는 것을 디캡슐레이션(decapsulation) 이라고 한다.
각 계층의 프로토콜들은 여러 종류의 상위 계층 프로토콜 데이터를 실어 나를 수 있다. 따라서 자신의 데이터 부분에 인캡슐레이션되어 있는 상위 계층 프로토콜의 종류를 알고 있어야 목적지에 가서 해당 상위 계층 프로토콜로 데이터를 올려줄 수 있다. 상위 계층 프로토콜을 기록하는 필드의 이름 및 주요 값들은 다음과 같다.
- 링크 계층의 프로토콜인 이더넷이 상위 계층을 구분하기 위한 용도로 사용하는 필드 이름은 타입(type)이며, 주요 값들은 다음 표와 같다. 값을 표시할 때 0x로 시작하면 16진수 값이라는 의미이다.
- 네트워크 계층의 프로토콜인 IP가 상위 계층을 구분하기 위한 용도로 사용하는 필드 이름은 프로토콜(protocol)이며, 프로토콜 필드의 주요 값들은 다음 표와 같다.
- 전송 계층의 프로토콜인 TCP가 상위 계층을 구분하기 위한 용도로 사용하는 필드 이름은 포트(port)이며, 주요 값들은 다음 표와 같다.
- 전송 계층의 프로토콜인 UDP가 상위 계층을 구분하기 위한 용도로 사용하는 필드 이름은 포트(port)이며, 주요 값들은 다음 표와 같다.
각 장비들이 참조하는 계층
종단장비인 PC나 서버 사이의데이터를 전송해주는 스위치나 라우터들은 각 장비가 지원하는 계층들과 관련된 임무만 제대로 수행하면 된다. 일반적으로 스위치는 링크 계층의 헤더까지만 확인하고, 프레임을 전송한다. 라우터는 네트워크 계층의 헤더까지만 확인하고 목적지 방향으로 패킷을 전송한다. 경우에 따라서 라우터를 해킹을 방지하는 방화벽으로 사용할 수도 있으며 이 때에는 응용 계층까지 확인하기도 한다.
💡 모든 스위치는 패킷을 어느쪽으로 보내야하는 역할을 해야함. 문제는 그 어느쪽으로 보낼 때 어떠한 정보를 보고 판단을 하는 것인지에 따라 Layer가 구분되는 것.
L2 스위치는 MAC 정보를 보고 스위칭하는 것. L3 스위치는 IP 정보를 보고 스위칭하는 것. L4 스위치는 IP+Port 를 보고 스위칭하는 것. L7 스위치는 실제 APP 데이터를 보고 스위칭하는 것.
중요한 것은 상위 레이어 스위치는 하위 레이어 스위치의 기능을 기본적으로 다 할 수 있다는 것. 다만, 실제 사이트 구성 시에는 자신의 주력 기능만 수행하는 것이 일반적이다.