Chapter 1 컴퓨터 네트워크와 인터넷


1.1 인터넷이란 무엇인가?


자, 인터넷이 무엇인가 보기에 앞서 한 가지 질문하고 싶다.


Q) True or False "인터넷 = 네트워크"  i.e. "인터넷과 네트워크는 같은 것인가?"



이 질문에 대해 True 라고 답하거나 긴가민가해 하는 사람들이 분명 많을 것이라고 생각한다.


답을 이야기하자면, False 이다. 



네트워크는 인터넷의 발명 이전에 이미 존재했다. 

따라서 인터넷은 네트워크이긴 하지만, 네트워크는 인터넷이 아니다.


다시 말해, 인터넷은 네트워크에서 파생된 발명품 중의 하나 라는 것이다.


컴퓨터는 초기에 탄도 미사일 거리 계산을 하기 위해 만들어졌고, 이후 계속해서 군사적 목적을 위해 사용되어졌다.

이 시절, 군 기지 간에 문서를 요청하고 전송받을 필요가 있었고, 이 때 "통신"을 정의하고 작동시키는 "네트워크"가 필요해져 생겨난 것으로 봐도 될 것이다.


어찌됐든 그 이후 팀 버너시 리 경이 "월드 와이드 웹"을 만들었고, 인터넷의 폭발적인 성장으로 인해 네트워크 또한 진화해나갔다.



자, 혹자는 이러한 질문을 던질 수 있겠다.


언급했던 것처럼, 인터넷은 단지 네트워크의 한 단면에 불과한데 왜 인터넷을 가지고 네트워크를 설명하려고 하는가?


인터넷은 우리의 일상 속에 들어와 있기에 매우 친숙하다.


인터넷보다 네트워크에 대한 직관적인 이해를 더 잘 전달해 줄 수 있는 것은 가히 없을 것이다. 


그렇기에 인터넷을 통해 네트워크에 배우는 것이다.


자 그럼 인터넷과 네트워크를 비교하며 인터넷이 무엇인지 약간의 감을 얻었다.



인터넷의 구체적인 면 면을 더욱더 살피며 네트워크에 대해 배워보자.


인터넷은 2 가지 관점에서 접근해 볼 수 있을 것이다.


1) 인터넷의 nuts and bolt i.e. 인터넷을 구성하는 하드웨어와 소프트웨어 요소를 기술하는 접근법


2) '분산' 어플리케이션(e.g. youtube, facebook, etc.) 에게 서비스를 제공하는 인프라구조 관점에서 인터넷을 기술하는 접근법

('분산'이라는 단어 때문에 어렵게 느끼지 말기 바란다. 그냥 www.naver.com 이든 뭐든지 웹 상에서 우리가 받는 모든 "서비스"라고 이해하고 넘어가자.

 '분산 어플리케이션'이 왜 그렇게 불리는지 혹은 이것이 무엇인지 궁금하다면 밑에 1.1.2 부분을 참고하라.)




1.1.1 구성요소로 본 인터넷


인터넷에 연결되어 있는 여러 end system(a.k.a 종단 시스템)들은 다음과 같다:


호스트(주로 컴퓨터)     서버    이동단말(e.g. 노트북)     패킷 교환기 (a.k.a 스위치/라우터)     모뎀     기지국     휴대폰     중계탑



위에 나열된 end system 들은 다음 2 가지 를 통해서 모두 거미줄 처럼 연결되어져 있다고 보면 된다:


1) 통신 링크 (communication link)

 e.g. 동축케이블, 구리선, 광케이블, 라디오 스펙트럼 (무선)


2) 패킷 스위치

 e.g. 라우터 & 스위치


*아무리 거미줄 처럼 복잡하게 weaving 되어 있는 것 같은 네트워크일 지라도 이 2가지는 일종의 backbone or 골격 처럼 존재한다고 보면 된다.


그럼 이들이 무엇을 하는가?


1) 통신 링크는 전기가 통할 수 있는 인프라 역할을 한다고 보면 된다. 

   이해를 위하여 비유를 들어보자면.. 물 호스 어떨까? 음.. 물 호스이면 적절한 비유가 될 듯 싶다.


2) 패킷 스위치는 방향을 정해준다. 고로 "switching" (직역하면 "전환"이다)

   위에 통신 링크를 물 호스라고 했기 때문에 다음과 같은 그림을 그려보았다.





그림에서 보면 수도꼭지에서 물이 흘러내려오게 되어 있다. 이 때, 중간 지점에 수도꼭지 2 개가 있다. 철수 집으로 가는 수도꼭지만 열면 물은 철수 집으로만 갈 것이고, 철수 집으로 가는 수도꼭지는 잠군 상태로 놔두고 영희 집으로 가는 수도꼭지만 열면 영희 집으로만 갈 것이다.

이와 같이 어느 곳으로 갈지 결정짓는 역할을 하는 것이 바로 스위치라고 이해하면 된다.



그럼 전송률 (transmission rate)에 대해 알아보자.

전송률은 '링크 대역폭'이라고 하기도 한다. 전송률은 초당 비트 수를 의미하는 bps(bits per second) 단위를 사용한다.

1초에 몇 비트를 보낼 수 있느냐 를 나타내는 단위이다.


하나의 end system 이 다른 end system 으로 데이터를 보낼 때,

보내는 end system 은 그 데이터를 세그먼트(segment)로 나누고 각 세그먼트에 헤더(header)를 붙인다.


이렇게 만들어진 정보 패키지는 패킷(packet)이라고 부르며,

이 패킷들이 다른 end system에 모두 도착하여 다시 원래의 데이터로 조립되어진다.


종단 시스템은 ISP(Internet Service Provider)를 통해서 인터넷에 접속한다.

미국의 경우, verizon, at&t, comcast, etc 등이 있으며,

한국의 경우, korea telecom, hanaro telecom 등이 있다.


이 ISP 기업들 같은 경우, 수많은 (주로) 통신 링크와 패킷 스위치를 국가 곳곳에 설치해놓은 기업들이라고 보면 된다.

설치하는 비용은 이 회사들이 부담하였고, 이제 그 망들을 쓰기 위해 돈을 내는 것이다.


고속도로라고 생각해도 된다. 국가에서도 고속도로를 만든 뒤 toll gate 에서 돈을 받지 않는가?

그것과 같은 이치라고 보면 된다.


인터넷에 대해 배우면서 TCP/IP 용어는 자주 보는데, 인터넷에서 가장 중요한 프로토콜이라고 볼 수 있다.


IP 프로토콜은 라우터와 종단 시스템 사이에서 송수신되는 "패킷 포맷"을 기술한다.


혹시 프로토콜에 대해 생소한 분이 있을까 싶어 간단하게 소개하자면, 프로토콜은 직역하면 "규약"이다.

"~이렇게 해라" 등의 규칙들의 조합이라고 보면 된다.


근데 월드와이드 웹이란 전 세계에 인터넷에 연결할 수 있는 사람이라면 모두가 쓰는 것이었기 때문에 

모두가 동의하는 하나의 "표준" 프로토콜을 만드는 것이 중요했다.


따라서 인터넷 표준을 정하는 IETF(Internet Engineering Task Force) 에서 "표준" 프로토콜을 RFC(Request for Comment)라는 

이름의 문서에 기술하여 발표하였다.


지금도 이렇게 발표된 RFC를 따르는 것이 "권장"되고 있다.



앞서서 ISP 가 제공하는 인터넷에 대해 이야기를 하였는데,

이렇게 일반적으로 우리가 사용하는 인터넷도 네트워크이지만 그 외에 어떤 기업이나 정부 네트워크 같은 많은

'사설 네트워크'도 존재한다.


이러한 네트워크의 특징은,

네트워크로 들어오거나 나가는 메시지 흐름을 규제하는 방화벽을 통하지 않으면, 사설 네트워크의 호스트는 네트워크 외부에 있는 호스트와 메시지 교환이 불가하다. 이러한 네트워크를 '인트라넷(intranet)'이라고 하는데, 이렇게 방화벽을 통해 통신을 규제하는 것은 보안을 위해서라는 정도까지 일단 알아두면 된다.



1.1.2 서비스 측면에서 본 인터넷


앞서 인터넷을 구성하는 하드웨어, 소프트웨어 요소를 보았다.


이제 우리가 일상생활에서 많이 사용하는 어플리케이션. 이러한 어플리케이션들이 작동할 수 있도록 서비스를 제공하는 인프라구조로서의 인터넷을 정의해 볼 수 있다.


이들 어플리케이션은 예를 들어,

 

전자 메일, 웹 서핑, 인스턴트 메시징, VoIP(Voice-over-IP), 인터넷 라디오, 비디오 스트리밍, 분산 게임, P2P(peer-to-peer) 파일 공유, 인터넷상의 TV, 원격 로그인 등을 포함한다.


이들 어플리케이션은 서로 데이터를 교환하는 많은 종단 시스템들을 포함하고 있기 때문에 분산 어플리케이션 (distributed application)이라고 부른다.


자 근데 이러한 분산 어플리케이션들은 "분산"이라는 용어에서 알 수 있듯이 여러 종단 시스템 간에 데이터를 주고받는 등 활발하게 통신을 해야 한다.

근데 그럼 여기서 something to think about!


하나의 종단 시스템에서 수행되는 어플리케이션(e.g. Voice-over-IP)이 인터넷에게 다른 종단 시스템에서 수행되고 있는 다른 소프트웨어에게 데이터로를 보내야 하는데, 이것을 어떻게 지시할까? 


이 때 사용되는 것이 바로 API(Application Programming Interface)이다.. 

인터넷  API는 송신 소프트웨어 (e.g. Voice-over-IP program)이 따라야 하는 규칙의 집합이다. 


적절한 예를 들면 다음과 같다:


1) 철수가 우편 서비스를 통해 영희에게 편지를 보내려고 한다.

2) 철수가 영희의 이름, 주소, 우편번호를 봉투에 써서 우편함에 넣는다.


이렇게 영희의 이름, 주소, 우편번호 를 기입하는 것이 'API' 에 기술되어 있다고 보면 된다.

더 자세한 감을 얻기 위해선 다른 예시를 보면 도움이 될 것이다. 지금으로선 이렇게만 알고 넘어가자.



이번 섹션에서는 인터넷을 어플리케이션이 돌아갈 수 있도록 인프라를 깔아주는 서비스 제공자로서의 인터넷을 보았다.

왜 그랬을까? 왜 그래야 할까?


그저 인터넷을 구성하는 하드웨어와 소프트웨어 요소들을 설명하는 것만으로는 충분하지 않았을까?


이에 대한 이유는 다음과 같다.


인터넷 구성요소의 발전은 새로운 어플리케이션에 대한 필요성에 의해 좌우되는 경향이 늘고 있기 때문이다.

즉, 인터넷이 발전해 나아가는 방향을 어플리케이션이 영향을 주는 정도 혹은 이를 넘어 결정할 정도로 중요성을 띄고 

있기 때문에 이러한 관점에서 인터넷을 바라봐 본 것이다.



1.1.3 프로토콜이란 무엇인가?


프로토콜은 규약이다.


하지만 이것만 들어서 이해될 리 없지 않은가;;


비유 + 예 를 들어보자.


e.g. 

어떤 사람에게 시간을 물어보는 상황이라고 가정해보자.


당신이라면 그 상황이 어떻게 펼쳐질 것이라고 생각하는가?


일반적으로라면,

1) 당신이 다가가서 "Hello" 라고 인사를 건네게 될 것이다.

2) 상대방은 당신이 대화를 시작하는 것을 허락한다면, 당신에게 다시 "Hello"라고 응답(response)해 줄 것이다.

3) 그럼 이제 당신은 "아 이야기해도 되는구나"라고 느끼고 "실례지만 혹시 몇 시인지 알 수 있을까요?"라고 물어볼 것이다.

4) 상대방은 그에 대한 어떠한 답을 주게 될 것이다.


이러한 과정을 주관하는 것이 프로토콜이라고 볼 수 있다.


물론 다가가서 인사를 했는데 상대방이 고개를 돌려버리는 등의 행위가 발생할 수 있다.

네트워크에서도 마찬가지다. 

내(컴퓨터)가 상대방(서버)에게 "Hello"라고 인사를 했는데

서버가 응답을 거부하면 그 이후에 데이터를 주고받는 등의 행위는 못 하게 된다.


어쨌든, 이러한 예에서 한 가지 질문이 나올 수 있다. 


프로토콜이 '언어'와 같은 역할을 하는 것은 아니냐고 말이다.


'언어'까지는 아니고 일종의 '행동'이라고 보는 것이 더 맞을 것이다.

그 차이를 설명하기 위해 금방 예에서 조금 더 구체적으로 들어가 보자.


우리가 다른 사람과 대화를 할 때,

우리가 보내는 특정한 메시지(e.g. "Hello", "안녕하세요", "ni hao ma", etc.) 가 있다. 그리고 상대방이 반응하여 보이는 응답 메시지(e.g. "pardon?", "wo bu dong",etc.)도 여러가지가 있다. 또한, 상대방이 보이는 일정한 행동 (e.g. 일정 시간 동안 3초 이상 대답이 없고 정적이 흐른다면, (뻘쭘함이 느껴지기 때문에) 뒤돌아서서 헤어진다)) 에 대해 내가 취하는 특정 행동(e.g. 괜찮은 척 표정을 짓거나, 짜증난 표정을 지으며 자리를 떠난다 거나 등등)이 있을 것이다.


컴퓨터도 마찬가지이다. 

송신 시스템이 특정 메시지를 보낸다 -> 메시지를 받은 수신 시스템은 다른 특정 메시지로 응답한다 -> 송신 시스템은 이 메시지를 받고 특정한 행동을 취한다 -> .....


여기서 캐치한 분이 계실지 모르겠지만 '특정' 메시지 라는 부분이 중요하다. 좀 더 확장하여 생각해보면, 그 말인 즉슨, 만약 그 '특정' 메시지가 수신 종단 시스템이 이해하거나 인식할 수 있는 혹은 받아들이는 메시지가 아닐 수도 있다는 것 아닌가?


다시 말해, 이 '특정' 메시지라는 것이 수신 종단 시스템이 이해할 수 있는 혹은 받아들이는 '특정' 메시지여야 한다는 것이다.


이것은 다시 말해 송신하는 시스템이 사용하는 프로토콜과 수신하는 시스템이 사용하는 프로토콜이 "같아야 한다"는 것이다.


e.g. 

한국에서는 엄지 손가락을 치켜들면 "짱!" 의 의미지만, 프랑스? 어느 유럽 국가 에서는 가운데 손가락을 쳐드는 것(욕을 하는 것)과 같은 의미라 한다.

이러한 '행동'이 갖는 '의미'와 연관지어 생각해보면 되지 않을까 싶다.




"통신하는 둘 이상의 원격 개체가 포함된 인터넷에서의 모든 활동은 프로토콜이 제어한다." 라는 말이 있다.


무슨 의미일까?

e.g.

종단 시스템(e.g. 컴퓨터)에 있는 혼잡제어(congestion-control) 프로토콜은 송수신자간에 전송되는 패킷을 조절한다. ...(1)

라우터에 있는 프로토콜은 송신지에서 목적지까지 패킷의 경로를 설정한다.  ...(2)


(1) 과 (2) 는 서로 다른 종단 시스템에서 사용하는 서로 다른 프로토콜이다.



프로토콜에 대해서 많은 이야기를 나누었다. 

하지만 어떠한 개념을 간단하게 설명할 수 없다면 안다고 할 수 없는 법. 

프로토콜의 정의는 다음과 같이 내릴 수 있다:


"프로토콜둘 이상의 통신 개체간에 교환되는 메시지 포맷순서뿐 아니라, 메시지의 송수신과 다른 이벤트에서 취하는 행동들을 정의한다."



앞에서 많이 언급한 맥락과 배경이 이러한 프로토콜의 정의가 왜 타당한지에 대해 설득력을 보태주었기를 바란다. 


**컴퓨터 네트워킹 분야의 전문가가 된다는 것은 네트워킹 프로토콜이 무엇이고, 왜 필요하며 또한 어떻게 운영되는지 잘 이해한다는 것과 같다.**



1.2 네트워크의 가장자리


앞에서 인터넷과 네트워킹 프로토콜에 대한 상위 개념을 보았다.


이제 컴퓨터 네트워크의 요소에 대해서 더 자세히 살펴보겠다.


앞에서 인터넷에 연결되는 컴퓨터와 다른 장치들을 종단 시스템 이라고 불렀다.

이들이 인터넷의 가장자리를 차지하고 있기 때문에 종단 시스템 (end system) 이라고 부른다.


인터넷의 종단 시스템들은 데스크톱 컴퓨터, 서버, 그리고 모바일 컴퓨터 등까지 포함한다.


이러한 종단 시스템은 웹 브라우저 프로그램, 웹 서버 프로그램, 전자메일 리더/서버 프로그램 같은 어플리케이션을 수행하므로 '호스트'라고도 부른다.


이 호스트는 때때로 클라이언트(client)와 서버(server)로 구분되는데, 상황에 따르게 클라이언트가 될 수도 있고 서버가 될 수도 있다.

이유인 즉슨, 클라이언트, 서버 라는 용어는 그 호스트가 수행하는 역할에 따라 구분되는 것이기 때문이다. 

i.e., 호스트가 request를 보내는 역할을 하고 있으면 client, response를 하는 역할을 하고 있으면 server 라고 지칭하기 때문에 때에 따라 달라질 수 있다는 것이다.


물론, 비공식적으로 클라이언트는 데스크톱, 모바일 PC. 서버는 웹 페이지와 스트림 비디오를 저장 및 배포하고 전자메일을 릴레이하는 더 강력한 기능을 갖춘 컴퓨터를 일반적으로 의미한다. 



1.2.1 클라이언트와 서버 프로그램


'클라이언트/서버' 모델은 인터넷 어플리케이션에서 가장 널리 사용되는 구조다. 

e.g. 웹, 전자메일, 파일 전송, 원격 로그인(e.g. 텔넷), 뉴스그룹


전형적으로, 클라이언트는 한 컴퓨터에서 수행하고 서버는 다른 컴퓨터에서 수행하므로, 클라이언트와 서버 인터넷 applications는 

분산 어플리케이션 형태다.




위에서 호스트가 때로는 클라이언트, 때로는 서버로 구분될 수 있다고 했는데, P2P 파일 공유 어플리케이션을 통해 확인할 수 있다.


P2P 파일 어플리케이션은 토렌트 (e.g. 비트토렌트)와 같이 컴퓨터끼리 파일을 공유하는 시스템이라고 볼 수 있다.

인터넷은 컴퓨터 <-> 서버 인 반면,

토렌트는 컴퓨터 <-> 컴퓨터 이라고 보면 된다.


어찌되었든, 컴퓨터 A <-> 컴퓨터 B 관계에서 컴퓨터 A 가 컴퓨터 B에게 파일을 요청할 때는 클라이언트로서, 컴퓨터 A 가 컴퓨터 B에게

파일을 전송해줄 때는 서버로 동작한다.




1.2.2 접속 네트워크


접속 네트워크란 무엇인가?


종단 시스템을 그 종담 시스템으로부터 다른 먼 거리의 종단 시스템까지의 경로상에 있는 첫 번째 라우터인 가장자리 라우터(edge router)를 연결하는 물리 링크이다.


이러한 접속 네트워크는 3 가지 부류로 나눌 수 있다.


1) 가정 접속 (residential access)

2) 기관 접속 (company access)

3) 무선 접속 (wireless access) 







WRITTEN BY
서상호

,