COMPUTER NETWORKING A Top-Down app 8th

[Network] 1-1. What is the Internet?

patrick-star 2023. 6. 4. 12:43
728x90

인터넷이란 무엇인가? 이 질문에 대해 2가지 방식으로 대답할 수 있다.

1) 볼트와 너트로 얘기할 수 있다. 즉, 기본적인 HW와 SW의 요소들로 인터넷이 구성되어 있다는 것이다.
2) 분산된 애플리케이션에 대해 서비스를 제공하는 네트워크 infrastructure(인프라, 기반시설)로 얘기할 수 있다.

먼저 볼트와 너트로 살펴보자. 그림과 함께 살펴보자.

1. A Nuts-and-Bolts Description

인터넷이란... 전 세계의 수십억 개의 장치들이 서로 연결된 컴퓨터 네트워크다.

종단 시스템(End System)

옛날에는 전통적인 데스크톱 컴퓨터, Linux 워크스테이션, 서버가 있었지만
최근 들어서는 스마트폰, 태블릿 등의 모바일 인터넷을 사용하는 사람이 압도적으로 많아졌다.
게다가, TV, 게임 콘솔, 온도계, 차(car) 등과 같은 사물(things)도 인터넷으로 연결된 시대가 왔다.

위와 같은 모든 장치(device)들을 hosts 또는 end system(종단 시스템)이라고 한다.

통신 링크(Communication Link), 패킷 스위치(Packet Switch)

종단 시스템들은 통신 링크(communication link)패킷 스위치의 네트워크로 연결되어 있다.
1-2에서 살펴볼 거지만 굉장히 다양한 통신 링크가 존재한다. 각각의 링크들은 서로 다른 데이터 전송 속도를 갖고 있다.
(ex. 동축 케이블, 구리선, 광섬유 등등)

하나의 종단 시스템이 다른 종단 시스템으로 전송할 데이터를 갖고 있을 때,
송신 측 종단 시스템데이터를 분해해서 헤더 바이트를 각각의 세그먼트에 합친다.

이렇게 패키징 된 정보를 패킷(packet)이라하고 패킷은 네트워크를 통해서 목적지에 있는 종단 시스템으로 전송된다. 목적지 종단 시스템에서 패킷들은 원래 데이터로 재조립된다.

패킷 스위치는 incoming 통신 링크 중 하나에 도착한 패킷을 전달받아서 outgoing 통신 링크로 패킷을 전달한다.
대표적인 패킷 스위치의 유형으로는 라우터(router)계층 연결(link-layer) 스위치이다. 이 두 가지 스위치는 패킷을 최종 목적지 까지 전달한다.

계층 연결 스위치는 네트워크에 접속하기 위해서 사용하고 라우터는 중앙 네트워크(network core)에서 사용된다.

이렇게 패킷이 송신하는 종단 시스템에서 수신받는 종단 시스템으로 전달되면서 통과하는
통신 링크와 패킷 스위치의 sequence라우트(route) 또는 네트워크를 통한 경로(path)라고 한다.

패킷 스위치 네트워크는 다양한 방법이 존재한다. 마치 자동차에서 고속도로, 도로, 교차로 등의 다양한 네트워크를 이용하는 것 처럼
ex) 굉장히 많은 양의 화물을 운반해야 하는 공장이 있다. 그 화물을 수천 km 떨어진 곳으로 전달해야 한다.

공장에서, 화물을 쪼개서 각각을 트럭에 싣는다. 각각의 트럭들은 독립적으로 고속도로, 일반도로 등등을 이용해서 목적지로 이동한다. 목적지에 도착하면 짐을 풀고 동일한 shipment로 부터 도착한 나머지 화물들과 그룹화한다.

여기서 트럭은 패킷 / 고속도로 또는 일반도로를 통신 링크 / 교차로는 패킷 스위치 / 종단 시스템은 출발/도착 건물이라고 볼 수 있겠다. 마치 트럭운반 망을 통해서 경로를 지나듯이 패킷컴퓨터 네트워크를 통해서 경로를 지난다.

ISP(Internet Service Provider)

종단 시스템ISP를 통해서 인터넷에 접근한다. (로컬 ISP, 회사 ISP, WiFi 접근을 제공하는 ISP 등등)

각각의 ISP는 그 자체로 패킷 스위치통신 링크의 네트워크이다. ISP는 다양한 형태의 네트워크 접속을 종단 시스템에 제공한다.
또한 인터넷과 서버를 직접 연결함으로써 content provider에게 인터넷 접속을 제공한다.

인터넷이란 종단 시스템다른 종단 시스템을 연결하는 것에 대한 모든 것이기 때문에 종단 시스템에 접근을 제공하는 ISP는 반드시 서로 연결되어 있어야 한다.

이러한 하위 단계의 ISP는 전국적이거나 국제적인 상위 단계의 ISP와 연결되어 있고 이러한 상위 단계의 ISP는 서로 직접 연결되어 있다. 상위 단계의 ISP는 고속 광섬유 링크(fiber-optik links)를 통해 서로 연결되어 있는 고속 라우터로 구성되어 있다.

각각의 ISP 네트워크독립적으로 운영되고 IP 프로토콜을 동작시키고 정해진 naming과 address 관습을 따른다. 이에 대해서는 1-3에서 좀 더 자세히 살펴볼 것이다.

프로토콜(protocol)

종단 시스템, 패킷 스위치와 같은 인터넷의 구성요소는 인터넷 내에서 정보 송수신을 제어하는 프로토콜동작시킨다.
TCP(Transmission Control Protocol)와 IP(Internet Protocol)가 대표적인 프로토콜이다.

IP 프로토콜은 라우터와 종단 시스템 사이에 주고 받는 패킷의 포맷을 정의한다. 이렇게 인터넷의 주요한 프로토콜을 TCP/IP라고 부른다. 1장에서는 이에 대해 간단하게 다뤄볼 예정이다.

RFC(Requests For Comments)

인터넷에서 프로토콜의 중요성을 고려할 때 모든 사람들이 각각의 프로토콜들이 무엇을 하는지에 대해 합의하는 것이 중요하다.
그래야 사람들이 상호 운용할 수 있는 시스템과 제품들을 만들 수 있다.

인터넷 표준(Internet standards)은 IETF(Internet Engineering Task Force)에 의해 개발되었고 IETF 표준 문서를 RFC라고 한다.

2. A Service Description

1번에서는 굉장히 많은 요소들이 인터넷을 구성하고 있다고 얘기했다. 하지만, 인터넷을 완전히 다른 각도로 설명할 수 있다.
바로 애플리케이션에 서비스를 제공하는 Infrastructure(인프라, 기반시설)로써 얘기할 수 있다.
여기서 애플리케이션은 전통적인 애플리케이션(ex. 이메일, 웹 서핑) 뿐만 아니라 스마트폰, 태블릿 애플리케이션도 포함한다.

애플리케이션은 분산 애플리케이션(distributed application)이라 할 수 있다. 왜냐하면, 애플리케이션이 서로 데이터를 주고받을 수 있는 다양한 종단 시스템을 포함하고 있기 때문이다. 인터넷 애플리케이션은 중앙 인터넷에 있는 패킷 스위치에서 동작하지 않고 종단 시스템에서 동작한다.

패킷 스위치가 종단 시스템 간의 데이터 교환을 수월하게 하지만 데이터의 출발지이자 도착지인 애플리케이션에는 관여하지 않는다.

조금 더 살펴보자.

나에게 인터넷 애플리케이션에 대해 흥미롭고 새로운 아이디어가 있다고 하자.
어떻게 그 아이디어를 실제 인터넷 애플리케이션으로 전환할 수 있을까.

애플리케이션은 종단 시스템에서 동작하기 때문에 종단 시스템에서 동작하는 프로그램작성해야 한다. (예를 들먼, Java, C, Python)

지금 나는 분산 인터넷 애플리케이션을 개발하고 있기 때문에
서로 다른 종단 시스템에서 동작하는 프로그램들은 각각 다른 종단 시스템으로 데이터를 전송해야 한다.
이 지점에서 인터넷을 애플리케이션의 플랫폼으로써 설명할 수 있다는 결론에 다다를 수 있다.

그렇다면, 어떻게 하나의 종단 시스템에서 동작하는 프로그램이 다른 종단 시스템에 있는 다른 프로그램에 데이터를 전달하기 위해서 인터넷에 명령을 내릴 수 있을까?

소켓 인터페이스(socket interface)

인터넷에 접속한 종단 시스템은 하나의 종단 시스템에서 동작하는 프로그램이 데이터를 다른 종단 시스템에 있는 목적지 프로그램으로 데이터를 전달하기 위해서 두 종단 시스템 사이에 있는 인터넷 인프라에게 어떻게 요청해야 하는지를 정의한 소켓 인터페이스를 제공한다.

소켓 인터페이스는 송신 측 프로그램이 무조건 따라야 하는 규칙 모음이다. 이를 바탕으로 인터넷은 데이터를 목적지에 전달한다.
이에 대해서는 chapter 2에서 자세히 다룰 것이다.

ex) Alice가 Bob에게 우체국 서비스(postal service)를 이용해서 편지를 보내고 싶은 상황

Alice가 그냥 편지를 써서 창 밖에 내놓는다면 전송되지 않는다.

우체국 서비스가 요구한대로 편지를 봉투에 넣고, Bob의 이름/주소/zip code를 봉투에 쓰고, 동봉해서, 오른쪽 위 구석에 도장을 찍고, 우체국 서비스의 공식 메일 박스에 넣어야 편지가 전송된다.

위와 같은 우체국 서비스를 우체국 서비스 인터페이스라고 할 수 있다.
Alice는 그러한 우체국 서비스를 준수해야 만 편지를 Bob에게 보낼 수 있다.

이처럼, 인터넷소켓 인터페이스를 갖고 있고
데이터를 전송하는 프로그램데이터를 수신하는 프로그램에 데이터가 전송될 수 있도록 소켓 인터페이스를 준수해야 한다.

이뿐만 아니라 다양한 서비스를 사용할 수 있는데 이에 대해서는 chapter 2에서 다루도록 하겠다.

정리

인터넷을 설명하는 2가지 관점을 살펴봤다.

  • HW와 SW의 구성으로 이뤄졌다는 관점
  • 분산된 애플리케이션에 서비스를 제공한다는 인프라 관점

더 자세한 내용에 대해서는 차차 알아보도록 하자.

3. What is a Protocol?

프로토콜이라는 단어에 대해 알아보자.

  • 프로토콜은 무엇인가?
  • 프로토콜은 무슨 역할을 하는가?

인간을 통한 비유

사람을 통한 비유가 좀 더 컴퓨터 네트워크의 프로토콜에 대해 가장 쉽게 이해할 수 있는 방법이다.
왜냐하면, 인간은 항상 프로토콜을 실행하기 때문이다.

ex) 누군가에게 시간을 물어보는 상황

  • Human protocol

1) 처음에 인사(Hi)를 하면서 대화가 시작된다.
2) 이에 대해 대체로 Hi 라는 반응을 보인다.
- 물론 다른 반응을 보일 수도 있다. 만약에 Don't bother me라고 하면 대화하고 싶지 않다는 뜻이다.
- 반응이 없다면 말을 건 사람은 더 이상 말을 걸지 않는다.

여기서 주목할 점은 내가 전달하는 메시지가 있고 이에 반응하는 action, 응답이 존재한다는 것이다.

Human protocol에 있어 서로 주고받는 메시지, 액션, 이벤트 들이 중요한 역할을 한다.

만약에 서로 다른 프로토콜로 동작한다면 서로 소통이 되지 않을 것이다.
(ex. 누군가가 매너 있게 행동했는데 상대방이 그렇지 않은 경우, 일부만 이해하고 다른 사람들은 이해하지 못한 경우)

네트워크도 마찬가지다. 둘 이상의 의사소통하는 개체가 업무를 수행하기 위해서 똑같은 프로토콜을 가지고 동작해야 한다.

ex) 대학교 강의실에서 교수님이 프로토콜에 대해서 장황하게 설명해서 난 이해가 되지 않는다.

  • 교수님이 설명을 멈추고 "질문 있어요?"라고 물어본다. (교수님은 메시지를 전달 & 자지 않는 학생들은 그 메시지를 수신받음)
  • 내가 손을 든다. (교수님에게 암묵적인 메시지를 전송함)
  • 교수님은 Yes.. 라고 대답한다 (교수님은 나의 메시지에 대해 질문을 해도 좋다는 메시지를 전송함)
  • 내가 질문한다 (교수님에게 메시지를 전달)
  • 교수님은 나의 질문 내용을 듣는다. (교수님이 나의 질문 메시지를 수신받음)
  • 이에 대답한다. (교수님이 나에게 응답 메시지를 보냄)

정리하면, 정해진 규칙에 의거한 메시지의 송/수신질문-응답 프로토콜의 중요한 부분이다.

Network Protocols

네트워크 프로토콜은 개체가 다를 뿐 human protocol과 유사하다.
인터넷에서 벌어지는 둘 이상의 서로 통신하는 개체들을 포함하는 모든 활동은 프로토콜에 의해서 규정된다.

ex) 하드웨어로 구현된 프로토콜

두 개의 물리적으로 연결된 컴퓨터에서 하드웨어로 구현된 프로토콜은
두 개의 네트워크 인터페이스 카드 간의 wire 상에서 비트의 흐름을 제어한다.

ex) 종단 시스템의 혼잡 제어 프로토콜(congestion-control protocols)

⇒ 수신측, 송신 측 사이에 패킷이 전달되는 속도를 제어한다.

ex) 라우터에 있는 프로토콜

⇒ 출발지에서 목적지로 패킷의 경로를 결정

이렇듯, 프로토콜은 인터넷의 모든 곳에 존재하기 때문에 이 책의 대부분은 컴퓨터 네트워크 프로토콜에 대한 내용이다.

ex) 웹 서버에 request를 보내는 경우 (웹 페이지에 URL을 입력하는 경우)

위 그림의 오른쪽을 보면 된다.

  • 내 컴퓨터가 연결 요청 메시지를 웹 서버에 보내고 응답을 기다린다.
  • 웹 서버는 나의 연결 요청 메시지를 받아서 응답 메시지를 돌려준다.
  • 그 메시지를 통해 현재 연결되어 있다는 사실을 확인 & GET 메시지를 통해 웹 서버로 부터 갖고 오고 싶은 페이지를 요청한다.
  • 웹 서버가 내가 원하는 웹 페이지를 컴퓨터에 돌려준다.

지금까지 인간과 네트워크의 예시를 살펴봤다.

메시지 교환메시지를 송/수신할 때 액션들프로토콜의 핵심적인 요소다.

프로토콜은 두 개 이상의 객체가 서로 교환하는 메시지의 형식과 순서를 정의한다. 
뿐만 아니라 메시지 또는 다른 이벤드를 수신하거나 전송할 때 실행하는 동작(action)도 정의한다. 

인터넷과 컴퓨터 네트워크는 프로토콜을 광범위하게 사용한다. 서로 다른 프로토콜들은 서로 다른 통신 작업을 수행하기 위해서 사용된다. 이 책을 공부하면서 간단한 프로토콜을 배울 수도 있고 복잡한 프로토콜을 배울 수도 있다.

컴퓨터 네트워크를 마스터한다는 건 네트워크 프로토콜들의 목적, 이유, 이용방법을 이해한 것과 동일하다.

출처 : 컴퓨터 네트워킹: 하향식 접근 8th Edition