Networks
클라이언트와 서버는 종종 별도의 호스트에서 돌아가며, 컴퓨터 네트워크의 하드웨어 및 소프트웨어 리소스를 사용해서 통신한다.
호스트에게 네트워크는 단지 또 다른 I/O 디바이스이며, 데이터를 위한 소스와 싱크로 서비스한다. I/O 버스의 확장 슬롯에 꽂혀 있는 adapter는 네트워크의 물리적인 인터페이스를 제공한다. 네트워크에서 수신한 데이터는 I/O와 메모리 버스를 거쳐서 adapter에서 메모리로, 보통 DMA 전송으로 복사된다. 데이터 또한 메모리에서 네트워크로 복사될 수 있다.
물리적으로 네트워크는 기하학적 위치로 구성된 계층(hierarchical) 구조 시스템이다. 하위 수준은 LAN(Local Area Network)으로 빌딩이나 캠퍼스에 설치된다. 가장 대중적인 LAN 기술은 현재까지는 Ethernet이더넷이며, 이것은 1970년대 중반 Xerox PARC에서 개발되었다. Ethernet은 3Mb/s에서 10MB/s로 진화하면서 안정화되었다.
Ethernet Segment
Ethernet Segment는 몇 개의 wire(전선)들과 hub라고 부르는 작은 상자로 구성된다. Ethernet Segment는 보통 방이나 빌딩의 층과 같이 작은 지역에 설치한다. 각 wire은 동일한 최대 비트 대역폭을 가지며, 보통 100Mb/s나 1 Gb/s이다. 한쪽 끝은 호스트의 adapter에 연결되고, 다른 끝은 hub의 port에 연결된다. hub는 각 port에서 수신한 모든 bit를 종속적으로 다른 모든 port로 복사한다. 그래서 모든 호스트는 모든 비트로 볼 수 있다.
- 각 Ethernet adapter는 adapter의 비휘발성 메모리에 저장되고 전체적으로 고유한 48bit 주소를 가진다.
이 주소를 MAC adress라고한다. ex) 00:16:ea:e3:54:e6 - 호스트는 frame이라고 부르는 비트들을 Segment의 다른 호스트에 보낼 수 있다. 각 frame은 frame의 source와 목적지, frame의 길이를 식별할 수 있는 고정된 header bit를 가지고 있으며, 그 뒤에 data bit가 이어진다. 모든 호스트 adapter는 이 frame을 볼 수 있지만 목적지 호스트만이 실제로 이것을 읽어 들인다.
Bridged Ethernet Segment
위 그림처럼 wire들과 bridge라고 하는 작은 상자들을 사용해서 다수의 Ethernet Segment가 연결되어 Bridged Ethernet이라고 하는 더 큰 LAN을 구성할 수 있다. Bridged Ethernet은 전체 빌딩이나 캠퍼스 규모로 설치될 수 있다.
Bridged Ethernet에서 일부 선은 Bridge와 Bridge로 연결하고, 다른 선들은 Bridge를 hub로 연결한다. 각 선의 대역폭(Bandwidth)은 다를 수 있다. 위 그림에서 Bridge-Bridge선은 1Gb/s 대역폭을, 네 개의 hub-Bridge 선은 100Mb/s 대역폭을 가진다.
Bridge는 hub보다 더 높은 wire의 대역폭을 가진다. 분산 알고리즘을 사용해서 이들은 자동으로 어떤 호스트가 어떤 포트에 도달 가능한지 장기간에 걸쳐 학습하고, 그 후 필요한 경우 선택적으로 하나의 port에서 다른 port로 frame을 복사한다. 예를 들어, 호스트 A가 같은 Segment에 있는 호스트 B로 한 frame을 전송하려면 Bridge X는 이 frame이 입력 port에 도착할 때 버리고, 다른 Segment에서의 대역폭을 절약한다. 하지만, 만약 호스트 A가 다른 Segment의 호스트 C로 frame을 전송한다면 Bridge X는 이 frame을 Bridge Y에 연결된 port로만 복사하고, 이것은 호스트 C의 Segment에 연결된 port로만 이 frame을 복사하게 된다.
Conceptual View of LANs
LAN의 그림을 단순화하기 위해 위 그림처럼 hub와 bridge를 수평선으로 연결하는 wire들을 표시하였다.
Internet vs internet
Internet은 특정 구현, global IP Internet을 나타낸다.
internet은 일반적인 개념을 나타낸다.
Logical Structure of an internet
계층구조의 상부에서 다수의 비호환성 LAN들은 Router라고 부르는 특별한 컴퓨터에 의해서 연결될 수 있으며, Router는 네트워크 간 연결을 구성한다. (상호 연결 네트워크). 각 Router는 이들이 연결되는 각 네트워크에 대해 adapter(port)를 가지고 있다. Router는 고속의 point-to-point 전화 연결을 할 수 있으며, 이것은 WAN Wide-Adrea-Network의 예이다. WAN은 LAN보다 지리적으로 더 넓은 지역에서 운영된다. 일반적으로 Router는 임의의 LAN과 WAN들로부터 internet을 만들기 위해서 사용될 수 있다.
internet의 중요한 특성은 호환되지 않는 기술을 갖는 여러 LAN과 WAN들로 이루어져 있다는 점이다. 각 호스트는 물리적으로 다른 모든 호스트에 연결되어 있지만, 어떻게 어떤 소스 호스트가 호환되지 않는 네트워크들을 지나서 데이터 비트를 다른 목적지 호스트로 전송할 수 있을까?
The Notion of an internet Protocol
답은 여러 가지 네트워크 간의 차이를 줄여 주는 각 호스트와 Router에서 돌고 있는 Protocol software 계층이다. 이 소프트웨어는 어떻게 호스트들과 Router들이 데이터를 전송하기 위해서 협력하는지를 결정하는 protocol을 구현한 것이다. 이 protocol은 두 가지 기본 기능을 제공해야 한다.
Naming Schme.
서로 다른 LAN 기술은 주소를 호스트에 할당하는 서로 다른 비호환성을 갖는 방법을 사용한다. internet protocol은 호스트 주소를 위한 통일된 포맷을 정의해서 네트워크 간의 호환성을 높인다. 각 호스트는 자신을 유일하게 식별하는 internet 주소가 최소한 한 개 할당된다.
Delivery Mechanism
서로 다른 네트워킹 기술은 서로 다른 비호환성을 갖는 비트 인코딩 방법과 frame 내에 패키징 하는 방법을 가지고 있다. internet protocol은 데이터 비트를 packet이라고 부르는 비연속적인 단위로 묶는 통일된 방법을 정의해서 이 차이를 줄인다. packet은 packet 크기와 소스 및 목적지 호스트 주소를 포함하는 header와 소스 호스트가 보낸 데이터 비트를 포함하는 데이터로 구성된다.
Transferring internet Data Via Encapsulation
위 그림은 호스트와 Router가 호환성이 없는 LAN을 통해서 데이터를 전송하기 위해 internet protocol을 어떻게 사용하는지에 관한 예제다. 위 그림에서 internet은 하나의 router에 연결된 두 개의 LAN으로 구성된다. 호스트 A에서 돌아가는 LAN1에 연결된 클라이언트는 LAN2에 연결된 호스트 B에 돌고 있는 서버로 일련의 데이터 바이트를 전송한다.
이 과정은 8개의 기본 단계가 존재한다.
- 호스트 A의 클라이언트는 클라이언트의 가상 주소 공간에서 커널 버퍼로 데이터를 복사하는 시스템 콜을 호출한다.
- 호스트 A의 protocol software는 internet header와 LAN1 frameheader를 데이터에 추가해서 LAN1 frame을 생성한다. internet header는 internet 호스트 B로 주소가 지정된다. LAN1 frame header는 router로 주소가 지정된다. 호스트 A는 이 frame을 adapter로 전달한다. LAN1 frame의 데이터가 internet packet이고, 그 데이터는 실제 사용자 데이라는 점을 주목해야 한다. 이런 종류의 캡슐화 Encapsulation는 internetworking의 핵심 중 하나다.
- LAN1 adapter는 이 frame을 네트워크로 복사한다.
- frame이 router에 도달하면, router의 LAN1 adapter는 wire으로부터 frame을 읽어서 protocol software로 전달한다.
- router는 internet packet header에서 목적지 internet 주소를 가져와서 packet을 전달할 곳을 결정하기 위해, LAN2 routing table의 인덱스로 사용한다. router는 이전의 LAN1 frame header를 벗겨내고, 호스트 B의 주소를 갖는 새로운 LAN2 frame header를 앞에 붙여서 네트워크로 복사한다.
- router의 LAN2 adapter는 이 frame을 네트워크로 복사한다.
- 이 frame이 호스트 B에 도착하면 adapter는 이 frame을 wire에서 읽어 들이고, frame을 protocol software로 넘긴다.
- 호스트 B의 protocol software는 packet header와 frame header를 벗겨낸다. protocol software는 최종적으로 이 데이터를 서버가 데이터를 읽는 시스템 콜을 호출할 때 서버의 가상 주소 공간으로 복사한다.
물론 여기서 어려운 과정을 많이 대충 넘어가고 있다. 만약 서로 다른 네트워크들이 서로 다른 최대 frame 크기를 가지면 어떻게 될까? router들은 어디로 frame을 전달해야 할지 어떻게 알까? router들은 언제 네트워크 구조가 변경되는지 어떻게 알아낼까? packet이 손실된다면 어떻게 될까? 등등의 어려운 과정을 생략하지만 internet의 핵심을 보여주며 중요한 것은 encapsulation이다.