[Network] 인터넷과 웹이 동작하는 과정과 원리에 대하여

    인터넷이란?

    인터넷이란 전 세계에 걸쳐 원거리 접속이나 파일 전송, 전자 메일 등의 데이터 통신 서비스를 받을 수 있는, 컴퓨터 네트워크의 시스템이라고 정의되어 있습니다. 인터넷은 접속하는 여러 디바이스가 이 거대한 망에서 상호간의 통신을 주고받고 데이터들이 오고 가면서 상당히 복잡한 과정의 절차를 거칩니다. 

    즉 인터넷이란 디바이스끼리 통신을 할 수 있는 네트워크라는 개념에서 조금 더 확장된 모든 디바이스가 통신을 할 수 있는 거대한 네트워크다 라고 생각할 수 있겠습니다. 그렇다면 각각의 디바이스끼리 어떻게 위치를 찾아가는것일까요? 이 문제를 해결하기 위해 우리가 사는 집에도 주소가 있듯 디바이스가 위치한 네트워크마다 고유의 주소를 지정해두었습니다. 그 주소의 이름을 바로 IP주소라고 합니다. (우리나라의 경우 한국인터넷진흥원에서 이 IP를 관리합니다) 이후 디바이스 고유의 주소라고 할 수 있는 MAC주소를 판별하여 원하는 디바이스를 찾아갈 수 있습니다.

    [Network] 인터넷(Internet)이란 무엇인가?

     

    IP주소

    IP주소란 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 주소입니다. 정확한 정의는 인터넷에 연결되어 있는 모든 호스트나 라우터 장비의 인터페이스에 할당된 논리주소이며 목적지 컴퓨터가 위치한 네트워크를 찾기위해 사용됩니다.

    CMD창에서 ipconfig라는 명령어를 치면 자신의 IP주소를 확인할 수 있습니다. (ex 192.163.16.42) 이 주소를 활용하여 네트워크에서 자신이 원하는 디바이스가 속해있는 네트워크를 확인하고 찾아갈 수 있습니다. 이렇게 해당 디바이스를 찾아가기 위한 주소를 알게 되었는데 그 집으로 찾아가려면 길이 있어야겠죠?

     

     네트워크 망 

    다른 디바이스를 찾아가려면 위와 같이 랜선이든 무선이든 서로 연결이 되어 있어야 합니다. 일반적으로 통신 기술은 위성을 활용한 방식과 광케이블을 활용한 방식이 있습니다. 두개의 방식은 장단점이 서로 명확히 다릅니다.

     

    위성 통신

    우선 위성 통신의 경우 위성이 커버할 수 있는 영역안에 있다면 어디에 있든지간에 통신이 가능하다는 장점이 있습니다. 하지만 위성을 통한 네트워크는 위성으로 무선통신을 해야할것이고 위성에서 목적지를 향해 다시 무선통신을 해주어야 할것입니다. 딱봐도 굉장히 느리겠죠. 이런 통신 위성들도 충분히 없으니 상호간의 거리가 더 멀어져 더 느립니다. 엘론머스크의 스타링크 프로젝트를 보면 이러한 통신 위성을 어마어마하게 많이 띄워서 거리의 문제를 최소한하고 커버하는 영역을 최대로 만들어 해결하겠다고는 하는데 미래에는 어떻게 될지는 잘 모르겠습니다.

     

    광 케이블 통신

    일반적으로(특히 우리나라) 우리가 일반적으로 사용하고 있는 초고속 인터넷이라고 하면 광케이블 통신 방식을 말합니다. 데이터 전송을 위해서 광섬유로 만든 케이블로 통신하며 전세계적으로 망이 깔려있습니다. 레이저를 이용해서 통신하기 때문에 구리선과는 비교할 수 없을 만큼의 장거리 & 고속 통신이 가능합니다. 단 직접 연결해야 하므로 비용이 많이들고 유지보수도 힘듭니다.

     

    네트워크 구조

    컴퓨터끼리 통신을 하기 위해서는 서로 연결이 되어 있어야 합니다. 하지만 위의 그림과 같이 각각의 디바이스마다 Point to Point 방식으로 연결하기는 사실상 불가능 합니다. 케이블의 숫자가 말도못하게 필요할것입니다. 

     

    이 문제를 해결하기 위해 라우터를 가운데다가 두고 이 라우터에 디바이스를 연결하고 그 라우터끼리 연결하는 방식으로 모든 디바이스를 연결합니다. 이렇게 한다면 최소한의 비용으로 많은 디바이스를 연결하고 무한이 확장할 수 있습니다. 

    [Network] 네트워크란 무엇인가? 네트워크의 정의와 종류 총정리

    [Network] 여러가지 네트워크 장비종류

     

     웹 사이트 접속 시 어떠한 일이 일어나는가? 

    전체적인 구조는 위에서 설명한것과 같습니다. 모든 디바이스가 연결되어있고 IP주소를 기반으로 찾아간다는 것입니다. 이해를 쉽게 하기위해 굉장히 단순하게 설명했지만 전 세계 디바이스를 구성하고 있는 인터넷이 이렇게 단순하지는 않습니다. 효율적인 통신방식이 꾸준히 발전해 왔기 때문에 굉장히 복잡한 과정을 거치게 됩니다.

     

    웹 사이트를 접속하는 과정

    1. 브라우저는 DNS서버로 가서 도메인을 확인하고 웹사이트가 있는 서버의 IP주소를 찾습니다.

    2. 서버에게 웹사이트의 사본을 클라이언트에게 보내달라는 HTTP 요청 메시지를 서버로 전송합니다.

    3. 서버는 클라이언트의 요청을 승인하고 웹 사이트의 정보를 패킷으로 묶어서 브라우저로 보냅니다.

    4. 브라우저는 이 패킷들을 활용하여 웹사이트로 만들어서 사용자에게 보여줍니다.

     

    유튜브(www.youtube.com)에 접속하여 영상을 본다고 가정해봅시다.

    인터넷에서 필요한 디바이스를 크게 두가지로 분류하자면 데이터를 보고자 하는 디바이스인 클라이언트, 웹사이트의 정보들이 저장되어있는 곳을 서버로 구성되어져 있다고 말할 수 있겠습니다.

    [Network] 클라이언트 서버 시스템이란 무엇인가?

     

    여기서 클라이언트는 우리가 유튜브를 볼 디바이스를 의미하고 서버는 유튜브 내부의 영상이 저장되어있는 데이터센터가 되겠죠. 네트워크는 위에서 설명한대로 라우터를 활용한 광케이블 통신으로 구성되어있을것이고 서버의 IP주소를 통해 해당하는 서버가 있는 네트워크로 찾아가게 됩니다. 여기서 문제가 있습니다. 과연 모든 웹페이지의 IP주소를 어떻게 다 외울 수 있을까요? IP주소는 단순한 숫자의 나열이므로 외우기가 쉽지 않습니다. 이 문제를 해결하기 위해 도메인이라는 개념이 등장합니다.

     

    도메인 이란?

    IP주소는 사람이 기억하기 어렵기 때문에 각 ip에 기억이 쉽게끔 이름을 부여할 수 있게 했는데, 이것을 도메인이라고 합니다.

    www.youtube.com  

    www.naver.com  

    www.google.com  

     

    우리가 흔히 웹사이트에 접속할때 치는 URL이 바로 도메인입니다. 즉 도메인은 단순히 서버 IP주소의 별칭이라고 생각하시면 됩니다.

     

    우리가 웹사이트에 접속하기 위해 도메인 주소를 활용하지만 결과적으로는 도메인 주소를 IP주소를 알아내고 이 IP주소로 접속을 하는것입니다. 이때 도메인네임을 IP주소로 변환하기 위해서는 DNS 프로토콜이 사용됩니다. DNS 쿼리를 위해 클라이언트는 DNS 쿼리 메시지를 담은 프레임을 DNS서버로 보내 접속하고자 하는 웹사이트의 IP주소를 알아냅니다. 여기서 끝이 아니고 이 IP주소 안에 서버의 물리적 주소(MAC)까지 알아내야 최종적으로 목적지로 Http요청 메시지를 보낼 수 있습니다. ARP라는 주소 결정 프로토콜의 프로세스를 거쳐 최종적으로 MAC주소를 알아냅니다. 이제 서버의 위치를 알았으니 웹사이트를 보여달라고 서버에게 HTTP요청을 보낼 수 있습니다.

     

    Media Access Contorl Address
    물리적 네트워크 주소란 다른말로 MAC주소라고도 하는데 데이터 링크 계층에서 사용하는 네트워크 인터페이스카드(NIC) 즉 하드웨어에 할당된 고유 식별주소입니다. 네트워크에서 실제 목적지 컴퓨터를 찾기 위해 사용됩니다.
    ec) D1:F2:Fk:CC:12:34

    [Network] ARP(주소 결정 프로토콜)에 대하여

     

    HTTP 요청 메시지 전송과 응답

    HTTP는 통신 프로토콜 위에 있는 애플리케이션 프로토콜입니다. 이 프로토콜을 통해 클라이언트와 서버가 서로 통신이 가능합니다. HTTP 요청은 한 컴퓨터가 무언가를 전달하기 위해 다른 컴퓨터로 보내는 이진 데이터 패킷입니다. TCP / IP방식으로 전송되며  두 컴퓨터가 소통하려면 공통의 언어가 필요하기에 HTTP라는 양식을 정해서 서로 전달받는것으로 규약을 만든것입니다. 요청(HTTP request)를 서버에 보내면 서버에서 패킷을 읽고 필요한 데이터를 패킷으로 만들어 클라이언트로 응답(HTTP response)합니다. 이후 브라우저에서는 이 데이터 패킷을 분석하고 재조합하여 웹사이트를 만들어 사용자에게 보여줍니다.

     

    Request Example

    POST /payment-sync HTTP/1.1
    
    Accept: application/json
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Content-Length: 83
    Content-Type: application/json
    Host: intropython.com
    User-Agent: HTTPie/0.9.3
    
    {
        "imp_uid": "imp_1234567890",
        "merchant_uid": "order_id_8237352",
        "status": "paid"
    }
    

    [Network] TCP / IP란 무엇인가?

     

    데이터 패킷이란?

    패킷은 패키지(package)와 덩어리를 뜻하는 버킷(bucket)의 합성어로 통신망을 통해 전송하기 쉽도록 자른 데이터의 전송 단위입니다.

    즉 우리가 인터넷을 이용해 주고받는 이메일, 채팅 메시지등등 다양한 데이터의 내용을 작은 단위로 쪼갠 데이터로 이해할 수 있습니다. 한번에 보내면 전송 효율이 더욱 좋을텐데 왜 이렇게 데이터를 쪼개서 보내는 걸까요?

     

    그 이유를 설명하자면 데이터를 주고받을때는 멈출수가 없기 때문입니다. (오류가 생길 수 있으므로) 네트워크상에는 하나의 컴퓨터만 있는 것게 아니고 수많은 컴퓨터들이 존재합니다. 이들 또한 서로 동시 다발적으로 데이터를 주고 받게 되는데 만약에 데이터를 분할하여 전송하지 않고 한번에 보낸다면 만약 한 컴퓨터에서 어마어마하게 큰 데이터를 주고 받는 다면 그 컴퓨터만 서버와 데이터를 주고 받게 되고 나머지 컴퓨터들은 통신이 끝날 때 까지 기다릴 수 밖에 없게 됩니다. 그렇다면 여러 컴퓨터가 동시에 서버와 통신을 하지못하는 비효율성이 발생하겠죠. 또한 이렇게 큰 데이터를 전송하다가 중간에 장애가 발생하여 데이터를 처음부터 끝까지 다시 전송하여야 한다면 이것 또한 비효율적입니다. 그리하여 데이터를 어느 정도 전송에 적합한 크기로 쪼개 데이터 패킷을 만들고 전송을 하게 되는것입니다.

     

    패킷은 데이터의 묶음 단위로 한번에 전송할 데이터의 크기를 나타냅니다. 패킷은 헤더, 데이터, 테일러로 이루어져 있는데 헤더에는 수신처의 인터넷 주소와 순서 등이, 테일러에는 에러 정보가 기록되어 있습니다. 일반적으로 2계층으로 내려가기 전까지는 3~4계층의 데이터 단위를 패킷이라고 정의하고 1~2 계층의 데이터 단위는 프레임이라고 지칭합니다. 제3계층 이상에서는 이 데이터 묶음을 패킷이라고 부르며, 제2계층에서는 프레임이라고 부릅니다. 이 패킷의 크기는 네트워크의 종류에 따라 달라지며 Ethernet은 최대 1500bytes크기를 가지며, IEEE 802.3표준에서는 최대 1492bytes크기를 가집니다.

     

    각각의 패킷에는 별도의 번호가 붙고 수신처에 대한 인터넷 주소가 기록되면 에러 체크 데이터까지도 포함됩니다. 전송된 데이터 패킷은 수신처에서 다시 원래 파일로 재조립됩니다. 이렇게 패킷을 사용하게되면 주고받은 데이터에 신뢰성이 높고 안전하게 데이터를 주고받을 수 있습니다. 또한 패킷 하나당 크기가 그렇게 크기 않으니 통신하는 속도가 줄어 더욱 많은 클라이언트들이 서버에 붙을 수 있는 장점도 제공합니다.

    댓글(0)

    Designed by JB FACTORY