패킷 분석, 네트워크 분석을 위한 프로그램을 C++로 작성하는 미니 프로젝트를 하기에 앞서 네트워크에 대한 이해를 높이기 위해서 널널한 개발자님의 강의를 듣고 간단하게 정리해보려고 한다.
OSI 7 Layer
네트워크 통신의 기본이 되는 OSI 7 Layer
는 통신의 “표준 모델”이라고 말할 수 있다. 이는 네트워크에서 일어나는 일을 계층별로 구분하여 표현한 그림이라고 생각하면 된다.
간단한 OSI 7 Layer
- 물리 계층 (Physical Layer) : 실제 데이터가 전기신호로 변환되어 전송되는 계층
- 데이터 링크 계층 (Data Link Layer): 물리적 연결과 전기적 신호 변환
- 네트워크 계층 (Network Layer): 패킷 라우팅 및 전달
- 전송 계층 (Transport Layer): 종단간 신뢰성 있는 데이터 전송
- 세션 계층 (Session Layer): 데이터 형식 변환 및 암호화
- 표현 계층 (Presentation Layer): 데이터 형식 반환 및 암호화
- 응용 계층 (Application Layer): 사용자와 가장 가까운 계층 이렇게 정리하고 보면 직관적이지 않고 개념적인 부분이다 보니 이해하기가 어렵다. 그래서 네트워크를 이해하기 위해 가장 보편적인 예시를 가지고 생각하는 것이 이해하기 쉽다.
실제로 어떻게 동작하는지?
실제로 OSI 7 Layer 는 우리 컴퓨터 내에 존재하는 개념으로 그림과 같이 표현 가능하다. 우리 컴퓨터는 S/W
부분과 H/W
부분으로 나뉘어져있고, S/W
는 다시 Kernel
과 User
모드로 분리시켜 생각할 수 있다.
L1, L2
아래에서 부터 살펴보면, L1과 L2는 하드웨어적인 부분에 해당하며 우리의 컴퓨터에 장착되어있거나 연결한 NIC(네트워크 인터페이스 카드)와 드라이버를 묶어서 생각할 수 있다.
이때 OSI 7 Layer에서 각 계층마다 식별자
를 통해 구분 할 수 있는데 이때 L2에서는 MAC
주소를 통해 식별한다.
L3(Internet), L4(TCP/UDP)
L1, L2에서는 NIC과 Driver가 담당했다면, L3, L4는 S/W의 kernel모드에서 동작한다. 보통 TCP/IP라고 표현하는데 이는 TCP가 상위 계층, IP가 하위 계층을 의미한다.($\frac{TCP}{IP}$ )
이때 TCP/IP는 각각의 식별자를 가지고 있는데 IP는 우리가 흔히 알고 있는 IPv4, IPv6이고, TCP의 경우에는 Port 번호라고 할 수 있다. port번호라고 표현하면 여러가지의 개념이 생각 날 수 있다.
특히 라우터의 포트, 인터페이스의 포트등 여러 곳에서 사용되는 단어이기 때문이다. 그러나 여기서 표현하는 port
는 운영체제가 서비스나 애플리케이션을 식별하기 위한 논리적인 주소로 포트는 소캣에 바인딩되고, 소켓은 프로세스에 속하는 구조로 표현 할 수 있다. 이는 좀 더 상단에 위치한 L5 ~ L7에서 확인할 수 있다.
L5~L7
L5~L7은 사용자와 가장 가까이 위치하고 있는 계층으로 우리가 사용하는 어플리케이션이 이 계층에 존재한다. 그리고 앞에서 설명한 것과 같이 application의 프로세스가 socket을 포함하고 있고 이를 통해서 통신을 할 수 있는 방식으로 진행된다.
댓글남기기