인터넷 네트워크 구조 (IP, TCP, UDP, DNS, PORT)

    인터넷 네트워크 구조 들어가기 전


    인터넷 네트워크 구조에는 IP, TCP, UDP, DNS, PORT가 있다. 

    우리가 누군가에게 메세지를 보낼 때, 위와 같은 형태로 동작한다. 클라이언트(나)가 데이터 발송을 요청하면, 데이터는 Internet으로 표현되는 수많은 노드를 여러가지 방식으로 타고, Server에 데이터가 전달되는 방식이다. 아래에는 이런 인터넷 네트워크 통신을 하는데 필요한 통신 규약 등을 이야기 한다.

    IP(Internet Protocol)


    • 클라이언트와 서버가 통신을 하는데 필요한 최소한의 규칙
    • IP는 출발지 IP 주소에서 목적지 IP 주소로 정보를 '패킷'단위로 전달한다(앞으로 IP 패킷을 전달한다고 표현한다)

     

    IP 패킷 정보


    • IP 패킷 정보에는 보내고자 하는 데이터, 출발지 IP 주소, 목적지 IP 주소가 있다.
    • 'Hello World' 라는 단어를 누군가에게 전달한다고 하면, IP 패킷은 위의 형태로 만들어진다.

     

    IP의 한계점

     

    • 비연결성 : 내가 IP 패킷을 보낼 대상이 없거나, 서비스 불능 상태인데 데이터를 패킷을 계속 보낸다. (이사 간 주소로 계속 보내는 셈)
    • 비신뢰성 :   
       1. IP 패킷이 가는 도중에 유실될 수 있음. (노드 중 하나가 갑작스럽게 죽는 경우)
       2. IP 패킷이 보내는 순서대로 도착하지 않을 수 있음.(노드 내부 로직으로 인해 항상 같은 노드 Path로 패킷 전달 보장 X)
    • 프로그램 구분 : IP 패킷 정보만으로는 내가 사용하고 있는 어떤 프로그램에 대한 회신인지 모른다. 

    참고 사항 : 패킷을 보낼 때, 보내는 데이터가 클 경우(대략 1500 Byte 이상), 패킷을 나누어서 보낸다. 예를 들어 'Hello! World!'라는 데이터를 보낸다고 했을 때, 데이터가 크면 'Hello!' / 'World!'로 나누어 패킷을 보낸다.

     

    인터넷 프로토콜의 스택


    인터넷 프로토콜의 스택은 애플리케이션 계층, 전송 계층, 인터넷 계층, 네트워크 인터페이스로 구분된다. 애플리케이션 계층은 주로 크롬 브라우저, 게임이며 전송 계층은 UDP, TCP다. 인터넷 계층은 IP이며, 네트워크 인터페이스는 LAN 드라이버가 된다.

    3단계로 나누게 될 경우 Application에는 애플리케이션 계층, OS에는 전송 계층 + 인터넷 계층, 네트워크 인터페이스로 나누어진다. 

     

    TCP(Transmission Control Protocol)


    • IP 프로토콜의 비연결성, 비신뢰성, 프로그램 구분의 한계를 해결하기 위해 나온 규약
    • TCP 프로토콜에는 출발지 PORT, 목적지 PORT, 전송 제어, 전송 순서, 검증 정보등의 데이터가 포함됨.

     

    인터넷 프로토콜 스택에서 TCP의 동작


    1. 웹에서 'Hello World!'를 보내려고 한다.
    2. 소켓 라이브러리를 통해서 OS 계층에 'Hello World'가 전달됨.
    3. 'Hello World' 데이터를 포함한 TCP 정보가 생성됨.
    4. TCP 데이터를 포함한 IP 패킷이 생성됨.
    5. IP 패킷이 이더넷 Frame에 포함되어 나간다. 이더넷 프레임에는 Mac 주소같은 물리적인 주소가 포함됨.

     

    TCP 프로토콜의 특징


    • 연결지향성 : 3 Way Handshake를 통해 클라이언트와 서버 간의 가상 연결 시킨다. (단, 중간 노드의 개인 랜선 부여를 한다는 이야기는 아님)
    • 데이터 전달 보증 : 3 Way Handshake를 통해 연결이 된 상황에서 보내기 때문에 데이터 전달을 보증한다.
    • 순서 보증 : TCP 프로토콜에는 전송 제어, 전송 순서, 검증 정보 등의 데이터가 포함되어있다. 잘못된 상태로 들어올 경우, 해당 정보를 참고하여 내부 로직을 통해 올바른 데이터를 받는다.

     

    3 Way Handshake 


    클라이언트와 서버 간의 가상 연결을 해주는 과정이다. 이를 통해 IP의 비연결성 문제가 해결된다.

    1. 클라이언트는 서버로 SYN(접속 요청)를 보낸다.
    2. 서버는 SYN을 받으면 ACK(요청 승인)과 SYN(접속 요청)을 다시 클라이언트에 보낸다.
    3. 클라이언트는 ACK, SYN을 받고 ACK(접속 요청)을 다시 클라이언트에 보낸다. 
    4. 클라이언트는 서버로 데이터를 보낸다.

    1~3번 단계를 하면 가상연결이 완료된다. 가상 연결은 클라이언트와 서버 간의 연결이 되었다는 것을 표현하지만, 이 표현이 클라이언트와 서버 간의 무수한 노드 간의 연결이 설정되었다는 것을 보장하지는 않는다. 즉, 데이터 전송을 위한 랜 연결이 보장되지는 않는다. 최근에는 3 + 4로 하여, ACK와 데이터 전송을 한번에 해결한다고 한다. 

     

    UDP(User Datagram Protocol) 프로토콜


    • UDP는 IP + PORT + Checksum(데이터 정상 전달 확인) 정도로 구현되어있음.
    • 하얀 도화지 상태로 IP와 거의 유사한 상태이며, IP와 마찬가지로 비연결성, 비신뢰성이 있음.
    • UDP는 프로그래머의 내부 로직으로 Application을 짤 수 있고, TCP 대비 전송 속도 및 데이터의 양을 최적화 시킬 수 있음. (TCP에는 많은 양의 데이터가 적재된다. 예를 들면, 전송 순서, 전송 제어 등) 
    • UDP를 효율적으로 사용하기 위해서는 추가 Application 작업이 필수적이다.

     

    PORT 


     

    • IP가 아파트 이름이라면, PORT는 아파트의 동호수를 뜻한다.
    • PORT는 프로그램을 구분하는데 주로 사용된다. 
    • TCP, UDP에 사용하는 프로그램과 매칭된 PORT 정보를 넣고, 주고 받음으로써 프로그램을 구분한다. 
    • PORT는 0~65535까지 할당이 가능하다. 이 중에서 0~1023은 잘 알려진 포트로 개인적으로 할당하는 것은 권장되지 않는다. (HTTP : 80, HTTPS : 443)

     

    DNS(Domain Name System)


    DNS는 인터넷에서 전화번호부 역할을 하는 서버로 이해할 수 있다.

    IP 주소는 외우기 어렵고, 자주 바뀐다. 따라서, 매번 기억하기 보다는 도메인을 Key로 IP 주소를 Value로 하는 형식으로 저장해 둔 시스템이다. 

    클라이언트는 1. 도메인명으로 DNS에 IP 주소를 요청하고 2. DNS는 도메인에 대응되는 IP 주소를 회신한다. 이 후, 3. 클라이언트는 IP 주소를 바탕으로 목적지 서버와 통신한다.

    'CS > 네트워크' 카테고리의 다른 글

    HTTP 메서드 활용  (0) 2021.12.06
    HTTP 상태 코드 정리  (0) 2021.12.04
    HTTP 메서드 관련 정리  (0) 2021.12.04
    HTTP의 Stateless, 비연결성  (0) 2021.12.04
    URI와 웹 브라우저 요청 흐름  (0) 2021.12.04

    댓글

    Designed by JB FACTORY