1. 네트워크와 인터넷

1) 네트워크 장치 및 개념

- 서로 다른 컴퓨터 단말기 상의 각 프로세스 사이를 여러 장치와 시스템을 통해 서로 연결한 것을 네트워크(network)라 한다. 전선상으로 두 컴퓨터를 직접 연결한 후 각 컴퓨터에서 실행 중인 프로세스끼리 연결시킨 것도 네트워크이고, 수십억 대의 단말기가 여러 전선이나 전파 그리고 이를 중계하는 각종 스위치와 라우터를 통해 연결된 인터넷도 네트워크의 일종이라 할 수 있다. 중요한 것은, 이러한 하드웨어간의 물리적 연결 끝에 최종적으로는 네트워크의 양 말단의 단말기에서 실행 중인 프로세스끼리 연결된다는 것이다.

  • network edge: 단말기의 OS 상에서 실행되어, 네트워크에 연결된 다른 단말기의 프로세스와 연결을 형성하고 있는 프로세스.

  • end system: 네트워크에 연결돼 있는 컴퓨터 단말기. 호스트(host)라고도 하며, 이는 ‘(네트워크의 연결의 주 목적인) 현재 실행 중인 프로세스를 그 단말기가 hosting한다’라는 뜻에서 붙은 이름이다.

  • 통신 링크(communication link): 네트워크 상에서 각 통신장치를 연결하는 물리적 수단(매체). 통신 케이블뿐 아니라 전파를 포함한다.

  • 메시지(message): 네트워크에서 서로 연결돼있는 프로세스 사이에, 한쪽에서 다른쪽으로 전송하는 데이터의 한 단위.

  • 패킷(packet): 메시지를 여러 덩어리로 분할한 데이터 단위로서, 한쪽 network edge에서 출발한 메시지는 이 패킷 단위로 나뉘어서 보내져 network core를 거쳐 반대편 network edge에 도달한다. 구체적으로, 스위치와 라우터는 데이터를 받았을 때 이를 받은대로 곧바로 외부로 지체 없이 전송하는 게 아니라, 패킷 한 단위가 제대로 수신됐을 때 비로소 이를 외부로 전송한다. (라우터의 경우 그래야 그 패킷으로부터 그 패킷이 향하는 목적지를 분석할 수 있디.)

  • 스위치(switch): 네트워크 장치의 하나로, 외부로부터 데이터를 전송받을 수 있는 링크와 외부로 데이터를 전송하는 링크를 하나 가지고 있다. 대규모 네트워크 망의 경우 단일한 전선만으로 양단을 연결할 수 없기 때문에 사용하는 장치이다.

  • 라우터(router): 네트워크 장치의 하나로, 외부로부터 데이터를 전송받을 수 있는 링크와 외부로 데이터를 전송하는 링크를 여러 개 가지고 있다. 네트워크의 한쪽 end system에서 전송한 데이터를 받게 되며, 그 안에는 그 데이터를 보내고자 하는 목적지 정보가 있으므로 라우터는 이를 분석하여 어떤 링크로 데이터를 내보내야 하는지를 결정해 그 링크로 데이터를 내보내는 기능을 한다. 여기서 어떤 링크로 데이터를 내보내야 하는지를 결정하는 알고리즘을 라우팅 알고리즘(routing algorithm), 결정하는 일련의 과정을 라우팅(routing)이라 한다.

  • network core: 네트워크의 구성요소로서 라우터, 스위치 등 여러 네트워크 장비들 사이 연결망을 말한다.

2) 인터넷

- 네트워크 망 구성은 이를 원하는 사용자들이 원하는 규모와 기능을 갖추도록 얼마든지 임의로 결정할 수 있으며, 구성하기에 따라 컴퓨터 단 두 대로도 구축할 수 있고 컴퓨터 수십억 대를 하나의 네트워크에 연결할 수도 있다. 인터넷(internet)은 현재 전세계의 수십억 대 단말기들끼리 서로 통신을 수행할 수 있도록 구축해놓은 대규모 네트워크 망으로서, 일반 사용자는 ISP(internet service provider)를 통해 인터넷에 접속할 수 있다.

  • WWW(world wide web): 인터넷 상에 연결돼 있는 컴퓨터 중에는 다른 컴퓨터에서 요청이 들어올 때 하이퍼텍스트(hypertext)라는 형식의 문서를 반환하는 컴퓨터들이 있는데, 하이퍼텍스트라 함은 인터넷 상의 다른 컴퓨터에 있는 문서를 하이퍼링크(hyperlink)라는 개념으로 서로 연결하는 문서를 말한다. 이처럼 인터넷 상에서 여러 하이퍼텍스트들이 하이퍼링크를 통해 서로 연결돼 있는 일련의 체계를 WWW 또는 웹(web)이라 하며, 외부로부터 하이퍼텍스트 요청이 들어왔을 때 요청받은 하이퍼텍스트를 반환하는 컴퓨터 또는 그 컴퓨터 위에서 동작하여 요청을 처리하는 프로세스를 웹서버(web server)라 한다.

  • 웹페이지(web page): 웹을 통해 송수신되는 문서를 말한다. 하이퍼텍스트로 이루어져 있다.

  • 웹 브라우저(web browser): 웹페이지를 열람할 수 있는 컴퓨터 프로그램으로서, 웹서버와 연결을 형성하는 클라이언트 프로세스기도 하다. 사용자는 PC에서 웹 브라우저를 실행시킨 후 자신이 접속하고자 하는 웹페이지의 URL을 웹 브라우저에 전달하여 웹페이지를 요청하고, 그렇게 받아온 웹페이지를 PC를 통해 열람할 수 있다.

2. 프로토콜과 네트워크

- 두 당사자가 서로 소통할 때 어떤 형식적 절차를 따라 통신을 할 것인지를 정하는 일종의 약속을 프로토콜(protocol)이라 한다. (예를 들어, 사람 간에 대화를 할 때에도 바로 본론으로 들어가지 않고 그에 앞서 서로 최근의 근황과 안부를 간단히 묻는 정도의 암묵적 절차가 있다.)

- 네트워크로 연결돼 있는 두 프로세스 사이 통신 과정을 계층별로 살펴보면, 한쪽 프로세스에서 보내고자 하는 메시지가 OS 계층으로 넘어오고 OS는 이를 통신 링크를 통해 다른 컴퓨터로 내보내며, 이를 전달받은 컴퓨터의 OS는 이를 분석해 그 메시지가 목표하는 프로세스로 메시지를 전달한다. 이처럼 네트워크 양단의 통신 과정은 다소 대칭적인 양상을 보이며, 한 메시지가 보내지는 과정에 참여하는 소프트웨어/하드웨어의 기능과 역할별로 단계를 뚜렷히 구분할 수 있다. 그리고 각 단계는 수직적인 계층 구조(protocol stack)로 연결돼 있다. 한 메시지가 네트워크 한쪽 끝에서 다른 쪽 끝으로 전달될 때, 그 메시지의 내용을 분석하고 처리함에 있어 양단에서 기능과 역할이 비슷한 단계끼리 그 단계에서 그 메시지를 어떤 방식으로 처리를 할지 약속을 할 수 있다. 이 약속을 네트워크 프로토콜이라 한다.

3. TCP/IP

- 인터넷의 통신 과정 또한 수직적 계층 구조로 구분할 수 있다. 인터넷의 프로토콜 스택을 흔히 TCP/IP 프로토콜 수트(protocol suite)라 하며 이는 5개 계층으로 표준화되어 있다. 인터넷에 접속하는 모든 컴퓨터들은 이 TCP/IP를 따라 메시지를 송수신 한다.

  • application 계층: 인터넷 상의 모든 연결은 컴퓨터 OS에서 현재 실행되고 있는 프로세스 간 연결이고, 이때 양단의 프로세스 사이의 통신 프로토콜로 소통하는 계층을 application 계층이라 한다. 인터넷 프로토콜 수트의 application 계층에서 제공되는 프로토콜은 HTTP, FTP, SMTP 같은 프로토콜이 있다.

    • HTTP(hypertext transfer protocol): TCP/IP 프로토콜 수트에서 하이퍼텍스트를 송수신하는 프로토콜로서 표준화된 프로토콜. 웹 브라우저에서 열람할 수 있는 웹페이지는 HTTP 프로토콜로 송수신된다. WWW를 구현하는 프로토콜이라 할 수 있다.

    • 메시지: 네트워크에서 서로 연결돼있는 프로세스 사이에 한쪽에서 다른쪽으로 전송하는 데이터의 한 단위로서, application 계층에서 데이터를 전송하는 최소단위이다.

  • transport 계층: application 계층의 프로세스들이 서로 직접 연결된 것처럼 보이도록(logical communication) 여러 기능을 제공하는 프로토콜로 소통하는 OS 내 계층. 실제 각 프로세스는 물리적으로 network core의 복잡한 여러 장치들을 거쳐 연결돼 있어 한쪽에서 전송한 메시지가 도중에 손실되는 등의 일이 일어날 수 있으나, transport 계층의 프로토콜의 여러 지원이 있어 프로세스는 이러한 부분을 신경쓰지 않아도 된다. 대신 프로세스는 transport 계층에 대한 통제권은 거의 없다. (transport 계층에서 어떤 프로토콜을 선택할지 같은 부분의 선택권은 있다.) 인터넷 프로토콜 수트의 transport 계층에서 제공되는 프로토콜은 TCP와 UDP가 있다.

    • TCP: (1)전송에 있어 데이터 손실이 없고 (2)송신한 순서대로 데이터가 수신되며 (3)송신 시 수신하는 측이 받아들일 수 있는 속도에 맞춰 송신을 하고(flow control) (4)양 당사자 사이 네트워크 상태에 맞춰 데이터를 송신한다(congestion control). 데이터 손실이 있어서는 안되는 분야에서 널리 쓰이는 프로토콜이다.

    • UDP: 모든 측면에서 TCP의 반대라 할 수 있는 프로토콜이다. 즉, (1)송신된 데이터는 유실될 수 있으며 (2)수신되는 데이터의 순서는 송신 순서와 무관하고 (3)수신 측이 받아들일 수 있는 속도를 굳이 고려하지 않고 송신하며 (4)양 당사자 사이 네트워크 상태도 굳이 고려하지 않는다. 어느 정도 데이터 손실이 있더라도 통신에 있어 큰 단점을 갖지는 않는 분야(예를 들면, 실시간 음성대화 등)에서 쓰이기도 하는 프로토콜이다.

    • 세그먼트(segment): transport 계층에서 데이터를 전송하는 최소단위. application 계층의 메시지의 크기는 다양할 수 있으나, 메시지가 transport 계층으로 내려오면 이때부터 패킷 단위 전송을 위해 작은 단위로 나뉜다. 이 점에서 세그먼트를 transport 계층의 패킷이라고 한다. 세그먼트 하나의 최대 크기는 1460바이트이다. 세그먼트에는 application 계층에서 전달받은 메시지를 나눈 조각과 그 세그먼트에 관한 정보를 담고 있는 세그먼트 헤더가 담긴다.

  • network 계층: 인터넷 연결을 구성하는 양단의 두 호스트들이 서로 직접 연결된 것처럼 보이도록(logical communication) 여러 기능을 제공하는 프로토콜로 소통하는 계층. PC의 OS 또는 라우터의 소프트웨어에 구현되어 있다. 실제 각 호스트는 물리적으로 network core의 복잡한 여러 장치들을 거쳐 연결돼 있어 한쪽에서 다른 쪽으로 찾아가려면 여러 라우팅 알고리즘이 필요하나, network 계층의 여러 지원이 있어 각 호스트는 이러한 부분을 신경쓰지 않아도 된다. 인터넷 프로토콜 수트의 network 계층에서 제공되는 프로토콜은 IP가 있다.

    • 데이터그램(datagram): network 계층에서 데이터를 전송하는 최소단위로, ‘network 계층의 패킷’이라고도 하지만 그냥 간단히 패킷이라고도 한다. 데이터그램 하나의 최대 크기는 1480바이트이다. 데이터그램에는 transport 계층에서 전달받은 세그먼트와 그 데이터그램에 관한 정보를 담고 있는 데이터그램 헤더가 담긴다.

    • IP 주소: 인터넷에 연결돼 있는 모든 호스트가 갖는 각 호스트의 인터넷 상의 식별자. 인터넷 상에 돌아다니는 모든 데이터그램의 헤더에는 그 데이터그램이 향하는 IP 주소가 있으며, 라우터는 이를 통해 그 데이터그램을 어떤 링크로 내보내야 하는지를 결정한다.

    • 라우터의 구체적 기능: 라우터는 패킷의 오류를 검사하고 라우팅을 수행하는 등 아주 적은 기능만 있고 그 외 기능은 없는 전자기기로서, 인터넷에 연결된 호스트들이 application, transport 계층까지 갖는 것과 달리 라우터는 이 두 계층 없이 network 계층과 이보다 하위 계층만으로 이루어져 있다. 예를 들어 라우터로 들어온 패킷이 너무 많아져서 라우터의 buffer를 초과하게 되었을 경우 라우터로 계속 패킷이 들어오더라도 이들 패킷을 저장할 방법이 없으므로 이때 들어오는 패킷들은 모두 정보가 손실이 된다. 손실된 패킷을 가장 최근에 전송한 라우터는 이 사실을 인지하여 재전송을 수행할 능력이 없으며, 결국 데이터 손실을 인지하게 되었다면 송신자 측 단말기가 패킷을 처음부터 다시 전송해야 한다. 이처럼 여러 기능적 한계가 있기 때문에 라우터를 흔히 dumb core라고도 부른다.

  • link 계층: 이보다 상위 단계에서는 마치 네트워크 장비 간 통신이 그 둘 사이에 단일한 전선 하나로 연결돼 이 전선 하나를 통해 전기신호가 오가는 일인 것처럼 이야기했으나, 실제 네트워크 장비들이 물리적으로 연결이 돼있는 경우에는 한쪽에서 송신된 전기 신호가 이와 연결된 주변 모든 네트워크 장비들에 영향을 미치는 경우가 많다. link 계층은 이러한 충돌 문제를 통제하는 계층으로서 이를 지원하는 여러 link 계층 프로토콜이 있다. 대부분 하드웨어적 방식으로 구현돼 있으나 일부 소프트웨어적 방식을 활용하기도 한다. 인터넷 프로토콜 수트의 link 계층에서 제공되는 프로토콜은 Ethernet, LTE, Wi-Fi 등이 있다.

    • 프레임(frame): link 계층에서 데이터를 전송하는 최소단위. 프레임 하나의 최대 크기는 1500바이트이다. 프레임에는 network 계층에서 전달받은 데이터그램과 그 프레임에 관한 정보를 담고 있는 프레임 헤더가 담긴다.

    • MAC 주소(MAC address): 컴퓨터의 랜카드나 라우터 같은 네트워크 접속 장치가 처음 제조사에서 제조될 때 고정되는 그 기기의 고유 식별값. 여러 네트워크 장치들이 서로 인접하고 있어 각자가 발생시키는 전기신호에 의해 서로 영향받는 상황이 발생했을 때 각자가 서로를 식별하는 데 사용된다. 한 장치에서 다른 장치로 넘어가는 프레임의 헤더에는 (프로토콜마다 다르나 Ethernet의 경우) 그 프레임을 발송한 장치의 MAC 주소, 당장 케이블을 건너 곧바로 이를 수신케 하고자 하는 장치의 MAC 주소 정보가 담긴다.

  • physical 계층: 전선 같이 전기신호를 송수신하는 통신 링크 및 여러 네트워크 장치가 전기신호를 안전히 전송하도록 여러 기능을 제공하는 계층으로서 이를 지원하는 여러 physical 계층 프로토콜이 있다. 통신 링크, 네트워크 장치를 구현하는 물리적 구조와 관련이 있는데, 예를 들어 유선연결망에서 사용되는 Ethernet 프로토콜의 경우 이를 구성하는 전선의 소재에 따라 각각 다른 프로토콜을 갖는다. physical 계층을 오가는 데이터의 단위는 비트 하나 단위이다.

- TCP/IP의 각 계층의 프로토콜은 그 계층에서 요구되는 목적을 충족하는 기능만을 제공하며, 상위 계층에서는 하위 계층의 프로토콜이 지원하는 기능을 이용하여 자신의 계층에서 필요한 작업을 처리해 그 결과를 보다 상위 계층으로 넘기게 된다. 예를 들어, transport 계층의 UDP는 유실될 수 있는 정보 전달 프로토콜이지만, 그보다 상위 계층인 application 계층에서 추가적 기능 구현을 통해 정보 전달의 손실이 일어나지 않게 할 수도 있다.

- OSI 7계층 모델: TCP/IP와는 별개로 제시된 네트워크 프로토콜 스택 모델로서, TCP/IP와 유사하게 여러 계층의 프로토콜 스택으로 이루어져 있다. 대부분이 TCP/IP와 거의 일치하나, TCP/IP와 달리 application 계층과 transport 계층 사이에 추가 기능을 지원하는 다른 계층들이 있다.

  • presentation 계층: application 계층에서 전달된 메시지를 압축하고 암호화하는 계층.

  • session 계층: 상위 계층에서 전달된 데이터의 동기화 등 기능을 제공하는 계층.

4. 데이터 전송 방식

1) circuit switching

- 송신측과 수신측 사이 경로를 미리 정해두고 특정된 양 당사자만이 그 경로를 사용하게 하는 데이터 전송 방식을 말한다. 경로가 설정되면 설정된 동안은 지속적인 통신이 이루어지며 다른 사용자가 그 경로에 할당된 범위를 빼앗아 통신을 할 수 없다. (예를 들어, 어떤 라우터가 최대 1Mbps로 데이터를 전송할 수 있고 100Kbps로 통신하는 사용자들이 그 라우터를 circuit switching 방식으로 이용한다면 최대 10명의 사용자만이 동시에 그 라우터를 사용할 수 있다.) 과거 유선 전화의 데이터 전송 방식은 circuit switching을 사용하였다.

2) packet switching

- 전송할 데이터를 ‘패킷’이라는 데이터 단위로 나누어 매번 한 단위씩 데이터를 전송하는 방식. 끊임없이 실시간으로 통신이 이루어져야 하는 상황이 아닐 때 사용할 수 있는 방식으로, 실시간으로 통신이 이루어지는 게 아니므로 경로 하나를 사용할 수 있는 사용자의 수에는 제한이 없다. 현재 인터넷 통신은 packet switching 방식을 사용한다.

- packet switching 방식은 다음 이유로 딜레이가 발생하는 경우가 있다.

  • processing delay: 패킷에 에러는 없는지, 이 패킷이 어디로 전송되는지 등을 연산하는 데 시간이 다소 걸릴 수 있다. 라우터의 CPU 성능을 개선하여 딜레이를 줄일 수 있다.

  • queueing delay: 라우터에서 패킷을 내보내는 속도보다 라우터로 패킷이 들어오는 속도가 빠르면 라우터로 들어온 패킷은 먼저 들어온 패킷이 라우터에서 내보내질 때까지 버퍼에 대기해야 한다. 이 딜레이의 원인은 결국 ‘이 라우터로 너무 많은 패킷이 들어온다’이므로, 특정 라우터로 너무 많은 패킷이 집중되지 않도록 하는 것 외에는 달리 개선할 방법이 없다. 현재 네트워크에서 발생하는 패킷 손실의 90% 이상이 queueing delay로 인한 패킷 손실이다.

  • trasmission delay: 라우터에서 지금 당장 내보낼 패킷을 첫 비트부터 마지막 비트까지 모두 내보내는 데 걸리는 시간이 너무 느리면 발생하는 딜레이. 전송하는 통로(bandwidth)를 키우면 딜레이를 해소할 수 있다. 한편, 라우터에서 패킷의 첫 비트가 내보내졌을 때 다음 비트가 내보내지기 전에 첫 비트가 먼저 다음 라우터로 전송되는 것이 아니라, 모든 비트가 다 내보내진 뒤에 이들이 한꺼번에 다음 라우터로 전송된다는 사실을 알아야 한다.

  • propagation delay: 라우터에서 전송된 데이터가 다음 라우터까지 도착하는 데 걸리는 시간. 라우터와 라우터 사이를 이동하는 데이터의 이동 속도는 빛의 속도이므로, 결국 이 딜레이는 라우터와 라우터 사이 거리에 비례한다.

* 이 자료는 http://www.kocw.net/home/cview.do?cid=6166c077e545b736 이 링크의 강의 내용을 정리한 자료입니다.