1. Abstraction
네트워크는 정말 복잡하고 거대한 내용이다. 한번에 전체를 이해하기 어렵기 때문에 우리는 네트워크를 piece by piece로 이해, 개발하고 있다.
복잡한 system을 다루기 위해 전체를 작은 pieces로 나누고 그 pieces들의 관계를 정의하는 방법을 선택했고 네트워크에서 그 pieces를 layer라고 한다. (modularization)
각 Layer는 하나의 서비스를 구현한 것으로 이 layers를 쌓아 네트워크를 구성한다.
한 레이어는 상위 레이어에게 서비스를 제공하고 하위 레이어들의 서비스를 사용한다.
한 레이어는 하위 혹은 상위 레이어가 실제로 어떻게 동작하는지 알 필요도 없고 궁금하지도 않다. 그저무슨 일을 하는지만 알면 된다.
이렇게 abstraction(추상화) 과정을 거쳐 lower-level detail을 가릴 수 있다.
2. OSI 7 Layer Model/Architecture (Open Systems Interconnect)
실제 우리가 사용하고 있는 인터넷 모델이 이와 약간 차이가 있지만 항상 이를 reference model로 사용한다. 즉 일반적으로 제안되는 모델 구조라고 생각하면 된다.
인터넷 말고도 다양한 모델이 OSI 7 Layer Model을 참고로 만들어졌다.
참고로 라우터는 3개의 레이어로만 구성되어있다. 패킷을 전달만 하면 되기 때문에 그 이상 계층(서비스)이 필요가 없다. networking만 잘하면 된다.
3. Internet's 5 layer Architecture
osi 7계층 모델과 인터넷 프로토콜의 스택은 조금 다르게 생겼다. 현재 인터넷의 base model이다.
osi 7 layer model이 제안하던 presentation, session 서비스들을 internet 5 layer모델에서는 application layer가 수행하도록 한다.
인터넷의 목적은 최대한 많은 사람들을 연결하는 것이다. 따라서 minimal functionality만 정의해서 모든 사람들이 이 조건을 충족하기 쉽도록 하였다. 바로 그게 IP(Internet Protocol)이다.
즉 어떤 application, link, transport layer든지 IP만 사용하면 서로 연결될 수 있는 것이다.
다른 레이어의 프로토콜이 계속 발전(3G, LTE, ...)하는데도 모두가 통신이 가능한 이유는 IP만은 고정되어 사용되기 때문이다.
이런 이유로 인터넷을 Narrow Waist Model, Hourglass Model이라고 한다.
router(layer 3 devices)는 3계층 까지의 작업을 수행하고 switch/hub(layer 2 devices)는 2계층 까지의 작업을 수행한다.
따라서 스위치는 라우팅을 수행할수 없다.(IP주소를 알수 없음) 오직 Mac주소만 확인할 수 있다.
wifi라우터는 무선으로 연결된 노트북과 통신하기 위해 L2, L1 wifi protocol로 소통한다.
반면 network core에 접속하기 위해 L2,L1 Ethernet protocol을 따른다.
즉 공유기라우터는 서로 다른 프로토콜을 따르는 L2, L1계층들로 구성되어 있다. 하지만 결국 Network layer의 지배자, IP를 따른다.
휴대폰도 마찬가지이다. Cellular Net를 통해 통신사의 base station과 통신하지만 결국은 IP를 거치고 또다른 L2, L1프로토콜을 통해 network core에 접속한다.
노트북이 ethernet cable을 꽂아서 통신할수있고 wifi를 통해서도 통신할수 있는건 해당 프로토콜의 장비가 각각 내장되어 있기 때문이다.
4. Overlay Network
Bitcoin, Torrent network같은 peer-to-peer network(p2p)를 말한다.
실제로는 인터넷 위에서 네트워크를 구성하는 수많은 라우터를 거쳐서 목적지로 패킷이 전달되지만 overlay network에서는 오직 p2p앱을 사용하고 있는 peer끼리 직접 연결된것 같은 느낌을 준다.
즉 초록 화살표처럼 실제 통신은 이루어지지만 peer끼리 붉은 화살표로 서로 직접 연결되어 통신하는 것처럼 느낀다.
5. Bluetooth
bluetooth는 사실 networking이 없다. 오직 master, client 둘의 직접 연결만 있다. 따라서 그림처럼 network layer가 필요 없다.
요즘에는 bluetooth를 사용해서 networking을 하려는 연구도 수행되고 있다.
여기서 주목할 것은 bluetooth에서도 network layering architecture를 통해 문제를 확장하려한다는 것이다.
6. Internet From the Application Layer's perspective
Application들이 internet을 통해 소통하기 위해서는 transport layer에서 제공하는 Socket API를 사용한다. (transport layer의 TCP/UDP가 application간 데이터 전송 서비스를 Socket API 모습으로 제공)
예를들어 내가 사진을 전송하는 앱을 개발하고 있다면 다른건 다 필요 없고 Socket API를 사용해서 이미지를 전달하면 되는 것이다.
즉 Application Layer 입장에서 인터넷은 그저 Transport Layer API를 통해 구현되는 것이다.
7. Internet From the Transport Layer's perspective
transport layer 입장에서 인터넷을 살펴보자.
transport layer는 상위 레이어에서 무슨 작업을 했는지 관심이 없다. 마찬가지로 아래 계층에서 무슨 작업을 하는지도 관심이 없다.
그저 패킷(segment)이 올바르게 목적지로 도달할수 있도록 포트넘버를 부여하고, raw socket API를 사용하기만 하면 된다. (network layer의 IP가 서비스를 raw socket API모습으로 상위 레이어에게 제공)
혹은 패킷(packet, segment)을 받아 포트번호를 확인한 다음 올바른 수신자에게 전달하기만 하면 된다.
transport layer에게 인터넷은 그냥 Network Layer API로 접근하는 하나의 덩어리에 불과하다.
8. Internet From the Network Layer's perspective
마찬가지로 network layer는 다른일에는 관심이 없다.
단지 패킷(datagram)의 목적지IP를 확인해서 next hop, default gateway를 알아내고 패킷을 전달하면 된다.
이를 위해 eth0, wlan0 같이 하위 계층이 제공하는 Network Interface를 사용해서 Internet에 접속할 뿐이다.
9. Internet From the Link Layer's perspective
link 레이어는 next hop device에게 패킷(frames)을 전달하는데만 관심이 있다.
이를 위해서 ARP프로토콜을 사용해 next hop ip주소를 mac주소(하드웨어주소)로 변환한다.
frames를 수신하는 반대 경우에서는 mac주소를 ip주소로 변환한다.
그리고 실제로 frame의 비트들을 보내는 작업은 하위 계층에게 전부 위임한다.
10. Encapsulation/Decapsulation
메시지를 목적지로 보낼때 하위 계층을 지나면서 헤더가 하나씩 붙는다. 각 Layer에서 작업할때 필요한 정보들을 붙이는 것이다. 각각의 이름은 segment, datagram, frame이 된다. (encapsulation)
*스위치에서는 패킷 헤더의 내용을 수정하지않는다. (그냥 물리적 link의 길이 연장을 위해 사용하는 것)
physical link를 타고 라우터에 도달하면 상위 계층으로 패킷을 올려보낸다. 각 레이어에서 해당하는 헤더를 떼서 작업한 후 상위 계층으로 올려보낸다. (decapsulation)
라우터의 꼭대기에 닿으면 다시 datagram전송을 위해 하위계층을 거쳐서 physical link를 통해 전송된다. (encapsulation)
최종 목적지에 도달하면 차례로 헤더를 제거하고 마침내 Message를 destination host가 확인할 수 있게 된다. (decapsulation)
즉 메시지를 패킹하는 과정을 encapsulation, 반대로 헤더를 벗겨내는 과정을 decapsulation이라고 한다.
상위 계층에서 전달받은 메시지는 전부 payload에 담긴다.
TCP/UDP 헤더에는 src, dst 포트번호 등의 내용이 담긴다. 이 헤더가 붙은 것을 segment라고 부른다.
IP헤더에는 src, dst 아이피 주소 등의 내용이 담긴다. 이 헤더가 붙은 것을 datagram이라고 한다.
link헤더에는 src, dst의 MAC주소 등의 내용이 담긴다. 이 헤더가 붙은 것을 frame이라고 한다.
마침대 packing(encapsulation)이 끝나면 link를 타고 전송된다.
주소가 표시된 세개의 라우터를 거쳐서 목적지로 패킷은 전송할때 각 패킷의 내용을 그려보자.
처음 source에서 출발하는 패킷의 모습이다. link header의 destination으로 첫번째 라우터의 MAC주소가 담겨있다.
첫번째 라우터에서 출발하는 frame을 보면 바뀐건 link header의 출발지, 목적지 밖에 없다.
마찬가지로 두번째 라우터에서 출발하는 frame도 바뀐건 link header의 출발지, 목적지 밖에 없다.
세번째 라우터에서 출발한 프레임의 내용은 위와 같다.
즉 전송과정에서 network header의 출발지, 목적지는 변경된적이 없다.
'ComputerScience > Network' 카테고리의 다른 글
Wireshark : Sniff HTTP traffic (0) | 2022.03.14 |
---|---|
History of Computer Networking and the Internet (0) | 2022.03.14 |
Delay, Loss, and Throughput in Packet-Switched Networks (0) | 2022.03.14 |
Connect linux server with SSH and learn SCP (0) | 2022.03.09 |
The Network Core (0) | 2022.03.09 |