지금까지 배운 걸 통해 인터넷
이란 굉장히 복잡한 시스템
이라는 걸 알 수 있었다.
지금까지 인터넷의 다양한 요소들을 살펴봤다. 수많은 응용 프로그램과 프로토콜, 다양한 종류의 종단 시스템, 패킷 교환 방식, 다양한 링크 레벨의 매체들.
이렇게 엄청난 복잡성이 주어진 상황에서 네트워크 구조를 조직화할 수 있을까? 가능하다.
1. Layered Architecture
인터넷 구조를 조직화 하기 전에 사람을 가지고 예시를 들어보자. 사실 인간은 항상 복잡한 시스템을 다루고 있다.
ex) 누군가가 나에게 공항 시스템
에 대해 설명을 요청할 때
티켓팅 직원, 수하물 점검원, 탑승구 직원, 조종사, 비행기, 항공교통 통제 및 비행기 경로 지정을 포함한
복잡한 시스템을 설명하기 위한 구조를 어떻게 찾을 수 있을까?
이러한 복잡한 시스템을 설명하는 방법 중 하나는
내가 공항에서 비행기를 탈 때 내가 취하는 행동의 과정을 설명하는 것이다.
- 과정
1) 티켓을 산다
2) 수하물을 점검한다
3) 게이트로 간다
4) 비행기에 수하물을 싣는다
5) 비행기가 이륙해서 목적지에 향한다.
6) 목적지에 도착하면 비행기에서 내려서 게이트로 가서 비행기에 있던 짐을 받는다.
7) 불만이 있었다면 컴플레인을 걸 수 있다.
이런 과정을 아래 그림과 같이 보여줄 수 있다.
여기서는 구조(structure)
에 대해서 살펴보려고 한다.
위 그림을 보면 모든 동작
에는 티켓팅 기능
이 있다는 걸 알 수 있다.
- 과정
1) 티켓을 샀다.
2) 이미 티켓을 가진 사람이 수하물을 점검한다. (티켓 기능을 가진 상태)
3) 이미 티켓이 있고 수하물을 점검한 사람이 게이트로 간다. (티켓 기능, 수하물 기능을 가진 상태)
4) 이미 티켓이 있고 수하물을 점검하고 게이트를 통과한 사람이 이륙해서 목적지로 향한다. (티켓 기능, 수하물 기능, 게이트 기능을 가진 상태)
...
위 그림을 수평적으로
생각하면 아래와 같이 그릴 수 있다.
위 그림은 공항에서의 기능을 층별
로 나누었다.
주목할 점은 각 층의 아래에 있는 층
과 결합
된 각각의 층이 기능(서비스
)를 제공한다는 것이다.
티켓팅 층 & 그 아래
는 공항 카운터
에서 공항 카운터
의 이동하면서 이뤄진다.
(즉, 출발한 쪽의 공항 카운터에서 입장하고 나서 도착한 쪽의 공항 카운터에서 나오는 걸로 끝난다)
수하물 층 & 그 아래
는 수하물 체크
에서 수하물 요구
로 이동하면서 이뤄진다.
(즉, 출발한 쪽에서 수하물을 체크하고 나면 도착한 쪽에 수하물을 요구하고 나서야 수하물을 받을 수 있다)
여기서 수하물 층
은 오직 티켓을 갖고 있는 사람
에게만 서비스를 제공해 준다는 걸 잊지말자.
게이트 층
에서는 게이트 출발
에서 게이트 도착
으로 이동하면서 이뤄진다.
(즉, 출발한 쪽에서 게이트를 지나면서 출발하고 나면 도착한 쪽에 게이트를 지나면서 도착한다)
이륙/출발 층
에서는 활주로
를 통해서 사람과 가방을 이동시킨다.
각각의 층은 서비스를 제공한다.
- 각 층에서의 특정한 동작을 수행하면서 (ex. 게이트 층에서 비행기로 사람을 load & unload)
- 해당 층의 바로 밑에 있던 층의 서비스를 사용하면서 (ex. 게이트 층에서 이륙 층의 서비스인 runway-to-runway 승객을 이용한다)
층별 구조(layered architecture)
는 거대하고 복잡한 시스템의 명확하고 구체적인 부분에 대해서 논할 수 있게 된다.
이러한 단순함
이 모듈화
를 제공함으로써 상당한 가치를 지니게 된다. 이를 통해 서비스의 구현
을 더욱 쉽게 변경
할 수 있다.
위층
에 똑같은 서비스를 제공
하거나 아래층
으로부터 똑같은 서비스를 이용
한다면
하나의 층이 변경될 때 나머지 층들은 변경될 필요가 없게
된다.
ex) 게이트 기능이 바뀌어도 ⇒ 사람들을 내리고 올리는 똑같은 기능을 제공
한다면
⇒ 다른 계층에 있는 서비스들은 바뀔 필요가 없다.
지속적으로 변경되는 크고 복잡한 시스템에서
시스템의 다른 요소에 영향을 끼치지 않으면서 서비스의 구현을 바꿀 수 있는 건 계층화의 굉장히 중요한 장점
이다.
Protocol Layering
네트워크 프로토콜의 디자인에 구조를 부여
하기 위해서 네트워크를 만든 사람들은 프로토콜
과 프로토콜을 구현하는 HW와 SW
를 정리했다. 각각의 프로토콜
은 계층
에 속해있다. 마치 공항의 구조
에 각각의 기능들이 있던 것 처럼.
우리는 하나의 계층이 바로 위에 있는 계층에 제공하는 서비스
에 한 번 더 관심을 가져볼 것 이다. 이를 계층의 서비스 모델
이라고 한다.
각각의 계층은 서비스를 제공한다.
- 속해 있는 계층에서 특정한 동작을 실행하면서
- 현재 계층 바로 아래에 있는 계층의 서비스를 사용하면서
ex) n번째 계층
의 서비스가 신뢰할 수 있는 메시지의 전달
이라 하자.
그렇다면 n-1번째 계층
의 신뢰할 수 없는 메시지를 사용하면서 n번째 계층
의 기능을 추가함으로써 서비스를 제공할 것이다.
프로토콜 계층은 SW 또는 HW 또는 두 개 모두에 의해서 구현될 수 있다.
응용 계층(Application-Layer) 프로토콜
은 거의 종단 시스템에서 SW에 의해 구현된다. ex. HTTP, SMTP. 전송 계층
도 마찬가지다.
물리 계층
과 데이터 링크 계층
은 구체적인 링크를 통해 통신을 다뤄야하기 때문에
대부분 주어진 링크와 연관된 인터페이스 카드(ex. 이더넷, 와이파이 인터페이스 카드)
에 의해서 구현된다.
네트워크 계층
은 HW와 SW를 혼합하면서 구현된다.
또한, 계층화된 항공기 아키텍처에서 기능이 시스템을 구성하는 여러 공항과 비행 제어 센터에 분산되었던 것처럼,n번째 계층의 프로토콜
도 네트워크를 구성하는 종단 시스템, 패킷 스위치 및 기타 구성 요소로 분산
되어 있다.
즉, 이러한 것들이 n번째 계층 프로토콜
의 조각이다.
프로토콜 계층화는 개념적이고 구조적인 장점을 갖고 있다. RFC 3439계층화
는 시스템 요소에 대해서 얘기할 수 있는 구조적인 방법
을 제공한다.모듈화(Modularity)
는 시스템 요소들의 업데이트를 더욱 쉽게 한다.
위 그림과 같이 인터넷 프로토콜 계층
은 5개로 이뤄져 있다.
Application Layer
응용 계층
은 네트워크 응용프로그램
과 응용 프로그램의 응용 계층 프로토콜
이 존재하는 곳이다.
인터넷의 응용 계층에는 많은 프로토콜과 서비스들이 포함되어 있다. ex. HTTP, SMTP, FTP / DNS
Chapter 2에서 나만의 프로토콜을 만들고 배포해 볼 예정이다.
응용 계층 프로토콜은 다양한 종단 시스템에 분산되어 있다.
그래서 한 종단 시스템의 응용 프로그램
은 다른 종단 시스템의 응용 프로그램
과 프로토콜
을 사용해 정보 패킷을 교환한다.
여기서 언급한 정보 패킷
을 앞으로 메시지
라고 부르겠다.
Transport Layer
전송 계층
은 응용 프로그램의 endpoint 사이에서 응용 계층의 메시지
를 전달한다.
인터넷에서는 TCP
랑 UDP
라는 전송 프로토콜이 있다.
- TCP
- 연결 지향 서비스를 응용 프로그램에 제공한다
- 응용 계층의 메시지 전송을 보장한다
- 흐름 제어(송/수신자의 속도 조절)
- 긴 메시지를 작은 단위의 segment로 쪼갠다.
- 혼잡 제어 메커니즘도 제공 (네트워크가 혼잡할 때 송신자의 전송 속도를 낮춰버린다)
- UDP
- 무선 서비스를 제공한다.
- 신뢰성, 흐름 제어, 혼잡 제어를 제공하지 않는 최소한의 서비스
앞으로 전송 계층의 패킷
을 세그먼트(segment)
라고 하겠다.
Network Layer
인터넷의 네트워크 계층은 데이터그램(네트워크 계층의 패킷)
하나의 호스트에서 다른 호스트로 전달하는 역할을 맡고 있다.
출발지에 있는 인터넷의 전송 계층 프로토콜(TCP, UDP) 호스트가 네트워크 계층에게 전송 계층 세그먼트
와 목적지 주소
를 전달한다. 마치 우체국에 목적지 주소
랑 편지
를 보내는 것처럼 말이다.
그러고 나서 네트워크 계층은 세그먼트
를 목적지에 있는 전송계층
에 전달하는 서비스를 제공한다.
인터넷의 네트워크 계층은 IP 프로토콜
을 포함한다.
IP 프로토콜
은...
- 데이터그램의 필드를 정의
- 종단 시스템과 라우터가 이 필드들을 어떻게 다뤄야 할지 정의한다.
IP 프로토콜 하나 밖에 없어서 네트워크 계층을 갖고 있는 모든 인터넷 요소들은 IP 프로토콜을 동작시켜야 한다
또한, 출발지와 목적지 사이에 있는 데이터그램을 어떤 경로로 이동하는지 결정하는 라우팅 프로토콜
을 갖고 있다.
인터넷은 수많은 라우팅 프로토콜을 갖고 있다. 1-3에서 본 것 처럼 수많은 경로가 존재해서 라우팅 프로토콜이 필요하다.
네트워크 계층이 IP 프로토콜와 수많은 라우팅 프로토콜을 갖고 있지만 보통은 IP 계층
이라고 불린다.
왜냐하면, IP가 인터넷을 한데 모아주는 역할을 수행하기 때문이다.
Link Layer
인터넷의 네트워크 계층이 출발지와 목적지 사이에 있는 라우터들
을 통해서 데이터그램
의 경로를 지정한다.
어느 한쪽에서 다른 쪽으로 패킷을 움직이기 위해 네트워크 계층
은 링크 계층
의 서비스에 의존한다.
특히, 각 노드(호스트 또는 라우터)에서 네트워크 계층
은 데이터그램을 링크 계층으로 전달한다. 링크 계층
에서 데이터 그램
을 지정된 경로를 통해 다음 노드로 전달
한다.
링크 계층에서 제공되는 서비스
는 해당 링크에서 사욛되는 특정 링크 계층 프로토콜
에 따라 달라진다.
ex) 어떤 링크 계층 프로토콜 ⇒ 신뢰성있는 전달 서비스를 제공
여기서, 신뢰성 있는 전달 서비스
는 TCP의 신뢰성 있는 전달 서비스와는 다르다
. 링크 계층 프로토콜에는 이더넷, Wifi, DOCSIS 프로토콜이 있다.
데이터그램은 대부분 출발지에서 목적지까지 이동하기 위해서 여러 링크를 통과
해야 하므로,
데이터그램은 경로상의 다른 링크
에서 서로 다른 링크 계층 프로토콜
에 의해 처리
될 수 있습니다.
ex) 데이터그램
은 어떤 링크에서는 이더넷
에 의해 처리되고 다음 링크에서는 PPP
에 의해서 처리될 수 있다.
때문에, 네트워크 계층은 각각 다른 링크 계층 프로토콜로 부터 다른 서비스를 받을 것이다.
책에서는 링크 계층의 프로토콜
을 프레임(frame)
이라고 하겠다.
Physical Layer
물리 계층의 역할은 프레임 내의 개별 비트
를 한 노드에서 다음 노드로 이동시키는 것
이다.
물리 계층에 있는 프로토콜은 링크
에 의존적이고 더 나아가 실제 전송 매체
에 의존적이다. (구리 연선 등등)
ex) 이더넷 ⇒ 다양한 물리 계층 프로토콜을 갖고 있다.
- 하나는
구리연선
을 위한 프로토콜 - 하나는
동축 케이블
을 위한 프로토콜 등등
각각의 경우에 비트 값
이 링크를 통해 다른 방법으로 이동한다.
2. Encapsulation
아래 그림은 전송 측 종단 시스템
의 프로토콜 스택의 물리적인 경로
를 보여준다.
데이터가
1) 송신 종단 시스템의 프로토콜 스택
을 따라 내려가고,
2) 중간 링크 계층 스위치와 라우터의 프로토콜 스택
을 올라가고 내려가며,
3) 수신 종단 시스템의 프로토콜 스택
을 따라 올라가는 물리적 경로를 보여준다.
뒤에서 다루겠지만 라우터
와 링크 계층 스위치
둘 다 패킷 스위치
이다. 종단 시스템과 비슷하게 라우터
와 링크 계층 스위치
는 네트워킹 하드웨어와 소프트웨어를 계층으로 구성하지만 프로토콜 스택에 있는 계층의 모든 것들을 구현하지는 않는다.
보통은 바닥에 있는 계층을 구현한다.
아래 그림처럼, 링크 계층 스위치
는 1계층과 2계층을 구현하고 라우터
는 3계층을 구현한다.
ex) 인터넷 라우터는 IP 프로토콜
을 구현할 수 있고 링크 계층 스위치
는 그렇지 못한다는 뜻이다.
주의할 점은 호스트
는 모든 5개의 계층을 구현한다.
이는 인터넷 아키텍처
가 네트워크의 가장자리에 많은 복잡성을 두었기 때문에 일관성이 있다.
위 그림은 캡슐화
에 대한 중요한 개념도 표현한다.송신 측 호스트
에서 응용 계층 메시지(위 그림의 M)
가 전송 계층
으로 전달된다.
가장 간단한 상황은 전송 계층이 메시지를 가져다가 정보(헤더 정보)를 추가
하는 것이다. (그림에서는 Ht
가 붙었다)
그 정보는 수신 측 전송계층에서 사용될 것이다.
응용 계층 메시지
와 전송 계층 헤더 정보
가 전송 계층 segment
를 구성한다. 즉, 전송 계층 segment
가 응용 계층 메시지를 캡슐화
한 것이다.
그러고 나서 전송 계층이 세그먼트
를 네트워크 계층
으로 전달한다. 이때, 네트워크 헤더 정보를 추가
한다.(위 그림의 Hn)
그렇게 추가함으로써 네트워크 계층 데이터그램
을 만든다.
데이터 그램
은 링크 계층으로 전달되어서 링크 계층 헤더
를 더해서 링크 계층 프레임
을 만들거다.
우리는 각각의 계층에서 패킷에 2개의 영역이 있다는 걸 알았다. 헤더 필드
와 페이로드(payload) 필드
부분이다.페이로드
는 대부분 바로 위 계층의 패킷이다.
ex) 회사의 한 지점에서 다른 지점으로 공공 우편 서비스
를 통해 사내 메모를 보내는 상황
1) A회사에서 일하는 Alice가 B 회사에서 일하는 Bob에게 메모를 전달하고 싶다. (여기서 메모는 응용 계층 메시지
랑 대응된다)
2) Alice가 메모를 봉지에 넣어서 Bob의 이름과 부서를 봉투에 적는다 (여기서 봉투는 전송 계층 세그먼트
랑 대응된다)
즉, 헤더 정보(Bob의 이름과 부서) 를 포함하고 캡슐화(봉투에 넣기)를 진행하는 과정이다.
3) A회사의 우편실이 사내 우편봉투를 받으면, 이를 공공 우편 서비스를 통해 송신할 수 있는 적합한 봉투 안에 넣는다
4) 여기서 송신 사무실과 수신 사무실의 주소를 봉투에 적는다.
즉, 원래 메시지(메모)를 캡슐화한 세그먼트(Alice가 동봉한 봉투)를 또 캡슐화(우편 서비스 봉투)하는 과정이다.
5) 우편 서비스는 우편 서비스 봉투로 동봉된 메모를 전달해서 Bob에게 전달한다.
6) Bob은 봉투를 열고 메모를 지운다.
물론 캡슐화 과정은 더 복잡하다.
ex) 큰 메시지를 여러 개의 세그먼트로 나누는 동작도 있다. 그래서 수신측에서 각각의 세그먼트들을 재조합해야 한다.
'COMPUTER NETWORKING A Top-Down app 8th' 카테고리의 다른 글
[Network] 2. Application Layer (0) | 2023.07.04 |
---|---|
[Network] 1-6. Networks Under Attack (0) | 2023.06.15 |
[Network] 1-4. Delay, Loss and Throughput in Packet-Switched Networks (0) | 2023.06.10 |
[Network] 1-3. The Network Core (0) | 2023.06.06 |
[Network] 1-2. The Network Edge (2) | 2023.06.06 |