Contents

[Go 언어를 활용한 네트워크 프로그래밍] 1. 네트워크 시스템 개요

Go 언어를 활용한 네트워크 프로그래밍 책 정리

컴퓨터 네트워크(coumputer network) 란 두 개 이상의 장치 또는 노드간의 연결을 말한다.

네트워크 토폴로지 유형

네트워크 토폴로지topology 란 네트워크상의 노드의 구성을 말한다. 토폴로지의 유형은 점대점 연결형, 데이지 체인형, 버스형, 링형, 스타형, 그물형의 6가지 기본 범주로 나뉜다.

1. 점대점 point-to-point 연결형

  • 두 노드가 하나의 연결을 공유 한다.
  • 이러한 유형의 네트워크 연결을 드물지만 두 노드 간에 직접 통신이 필요할 때 매우 유용하다.

2. 데이지 체인 daisy chain 연결형

  • 일련의 점대점 연결
  • 출발지 노드와 목적지 노드 사이의 중간 노드를 일반적으로 이라고 한다.

3. 버스형 bus

  • 버스형 토폴로지상의 노드들은 공통, 공유 네트워크 링크를 갖는다.
  • 주로 무선 네트워크에서 사용 되며 유선 네트워크상의 노드는 모든 트래픽을 보고 자신에게 필요한 트래픽만을 선택적으로 무시하거나 수신한다.
  • 무선 네트워크상의 노드들 또한 서로의 트래픽을 볼 수 있지만 일반적으로는 암호화 되어 있다.

4. 링형 ring

  • 데이터가 단일 방향으로 이동하는 폐쇄 루프 이다.
  • 노드 N은 노드 O -> P -> Q를 통해 R로 메세지를 전송한다.
  • 중간 노드에서 메시지를 전송하지 못하면 전송된 메세지는 목적지에 도달하지 않는다.
  • 가장 느린 노드의 속도로 제한된다.

5. 스타형 start

/posts/images/go/star.jpg
  • 중앙 노드는 다른 모든 노드에 개별 점대점을 연결한다.
  • 유선 네트워크는 대부분 스타형 토폴로지 형태이다.
  • 중앙 노드는 종종 네트워크 스위치 이며, 이는 데이터를 수신하여 목적지 노드로 데이터를 재전송하는 장치이다.
  • 스타형 토폴로지에서는 단 하나의 홉만 이동한다.

6. 그물형 mesh

/posts/images/go/mesh.jpg
  • 모든 노드는 다른 모든 노드와 직접 연결된다.
  • 단일 장애 지점 (Single Point Of Failure, SPOF) 제거 : 단일 노드의 장애 시 다른 노드 간 트래픽에 영향을 주지 않는다.
  • 노드 수가 증가함에 따라 복잡성이 증가하기 때문에 대규모 네트워크에서는 사용할 수 없다.

7. 하이브리드 hybrid 토폴로지

/posts/images/go/hybrid-topology.jpeg
  • 둘 이상의 기본적인 토폴로지를 결합한 형태
  • 보통 하나의 네트워크 토폴로지만 구성된 경우는 거의 없으며 대부분 하이브리드 토폴로지의 형태로 구성하고 있다.
  • 각 토폴로지의 장점을 활용하고 단점을 개별 네트워크 세그먼트로 제한하여 안정성, 확장성 및 유연성을 향상할 수 있다.

대역폭 vs 레이턴시

네트워크 대역폭 bandwith

  • 네트워크 대역폭 이란 일정 시간 내에 네트워크 연결을 통해 전송할 수 있는 데이터의 양을 의미한다.
  • 대역폭이 높다고 해서 반드시 성능이 좋은 것은 아니다.
  • 대역폭이 낮더라도 레이턴시가 작은 경우가 대역폭이 높지만 큰 레이턴시를 갖는 네트워크보다 성능이 더 좋을 수 있다.

네트워크 레이턴시 latency

  • 네트워크 레이턴시는 네트워크 리소스 요청을 보내고 응답을 받는 사이에 측정된 시간이다.
  • 레이턴시가 크면 나쁜 사용자 경험을 제공하게 되며, 종종 악의적인 공격자들에 의해 DDos 공격을 받을 수도 있다.
  • 웹사이트에서 레이턴시는 클라이언트와 서버간 레이턴시, 데이터 저장소에서 데이터 검색하는데 걸리는 시간, 서버 측에서 동적인 콘텐츠를 컴파일하는 데 걸리는 시간, 웹 브라우저가 페이지를 렌더링하는 데 걸리는 시간 등 다양한 이유로 발생한다.

레이턴시 해결 방법들

  1. CDN(Content Delivery Network) 이나 클라우드를 사용하여 사용자와 서비스 사이의 거리와 홉 수를 줄인다.
  2. 요청 및 응답 크기를 최적화하여 레이턴시를 줄일 수 있다.
  3. 캐싱 전략을 수립하여 성능을 크게 개선할 수 있다.
  4. 동시성, 병행성을 통하여 응답이 블로킹 되는 것을 최소화한다. (Go 언어의 고루틴 등을 활용)

OSI(Open Systems Interconnection) 참조 모델

  • 개방형 시스템 상호 연결(OSI) 모델은 프로토콜의 개발과 통신을 위한 프레임워크 역할을 한다.
  • 프로토콜 (protocol) 이란 네트워크를 통해 전송되는 데이터의 포맷과 순서를 결정하는 규칙 혹은 절차를 의미한다.

OSI 참조 모델의 계층 구조 레이어

  • OSI 참조 모델은 네트워크 내의 모든 활동을 7개의 계층으로 구성된 엄격한 계층 구조로 추상화하였다.

7 계층(애플리케이션 계층)

  • 네트워크 애플리케이션과 라이브러리는 대부분 애플리케이션 계층과 상호 작용한다.
  • 호스트를 식별하고 리소스를 검색하는 역할을 담당한다. 웹 브라우저, 비트토렌트 클라이언트 등이 있다.

6계층 (프레젠테이션 계층)

  • 데이터가 아래 계층으로 이동할 때 네트워크 계층에 대한 데이터를 준비하고, 데이터가 스택 위로 이동할 때 애플리케이션 계층에 데이터를 제공한다.
  • 암호화, 암호 해독 및 데이터 인코딩이 있다.

5계층 (세션 계층)

  • 네트워크의 노드 간의 연결 수명 주기를 관리한다.
  • 연결 수립, 연결 시간 초과 관리, 작동 모드 조정, 연결 종료 등의 기능 담당
  • 일분 7계층의 프로토콜은 5계층에서 제공하는 서비스에 의존한다.

4계층 (전송 계층)

  • 전송의 안정성을 유지하면서 두 노드 간 데이터의 전송을 제어하고 조정한다.
  • 데이터의 전송이 신뢰성을 유지하기 위해 에러 수정, 데이터 전송 속도 제어, 데이터 청킹 및 분할, 누락된 데이터 재전송, 수신 데이터 확인 과정등이 포함된다.
  • 수신자가 데이터 수신을 인정하지 않은 경우 이 계층의 프로토콜이 데이터를 재전송한다.

3계층 (네트워크 계층)

  • 노드 간 데이터를 전송하는 역할을 한다.
  • 원격 노드에 직접 연결하지 않고도 네트워크 주소로 데이터를 전송할 수 있다.
  • 네트워크 계층에서는 전송의 신뢰성이나 전송 에러등을 전송자에게 알려주기 위한 별도의 프로토콜이 필요하지 않는다.
  • 라우팅, 주소 지정, 멀티 캐스팅 및 트래픽 제어와 관련된 네트워크 관리를 위한 프로토콜의 중심

2계층 (데이터 링크 계층)

  • 직접 연결된 두 노드 간 데이터 전송을 처리한다.
  • 시스템에서 스위치로, 스위치에서 다른 시스템으로 데이터를 쉽게 전송할 수 있도록 지원한다.
  • 데이터 링크 계층에서의 프로토콜은 물리 계층의 에러를 식별하여 수정을 시도한다.

1계층 (물리 계층)

  • 네트워크 스택에서 발생한 비트를 하위의 물리적 매체가 제어할 수 있는 전기, 광학 또는 무전 신호로 변환하고 타 노드의 물리적 매체에서 받은 신호를 다시 비트로 변환한다.
  • 비트 전송률을 제어한다. 비트 전송률은 데이터의 최대 제한 속도이다.
  • 초당 1기가 비트의 비트 전송률은 출발지와 목적지 사이에 초당 최대 10억 비트의 데이터가 이동할 수 있음을 의미한다.
BPS
  • 네트워크의 전송 속도를 계산할 때는 1초당 전송할 수 있는 0과 1, 즉 비트의 수를 센다.
  • 네트워크 전송 속도는 초당 비트 단위로 측정된다.

데이터 캡슐화를 사용한 트래픽 전송

캡슐화 (encapsulation)

  • 캡슐화는 구현의 세부 정보를 숨기고 관련한 기타 세부 정보만 사용할 수 있도록 하는 방법
  • 우체국에 소포를 보내는 것과 비슷하다.
    • 봉투가 내용물을 캡슐화하고 봉투에는 도착할 목적지 주소와 수취인 정보, 목적지까지 거쳐가는 정보등의 중요 정보만 기록한다.
    • 소포의 내용물은 소포를 전송하는 것과 무관하며 운송에 중요한 것은 소포의 기타 세부 정보일 뿐임
  • 데이터가 스택을 따라 이동할 때 하위 계층에 의해 캡슐화 된다.
  • 스택을 따라 이동하는 데이터를 페이로드 혹은 메세지 본문(message body) 이라고도 하며 서비스 데이터 단위(Service Data Unit, SDU) 라는 용어를 사용하기도 한다.
  • 페이로드는 프레젠테이션 계층에서 캡슐화 한다. 페이로드가 스택 위로 이동하면 각 레이어는 이전 레이어에서의 헤더 정보를 제거하게 된다.

OSI 프로토콜 캡슐화

  • 클라이언트와 서버가 모두 웹 콘텐츠를 교환하는 데 사용하는 7계층 프로토콜인 하이퍼 텍스트 전송 프로토콜(HTTP/1) 프로토콜도 데이터 캡슐화를 사용한다.
  • HTTP는 클라이언트의 7계층에서 서버의 7계층으로 전송하는 헤더 정보를 포함한 전체 메세지를 정의한다.
  • 네트워크 스택은 클라이언트의 요청을 HTTP 서버 애플리케이션에 전달하고 HTTP 서버는 네트워크 스택에 대한 응답을 시작하여 7계층 페이로드 생성 후 클라이언트의 7계층 애플리케이션으로 다시 전송한다.

수평 통신(horizontal communication)

  • 동일 계층 내 클라이언트와 서버 간 통신을 수평 통신이라고 한다.
  • 동일 계층 내에서 직접 데이터를 전송하는 것이 아니라 실제 데이터는 클라이언트 네트워크 스택에 따라 하위 계층으로 이동 후 서버의 네트워크 스택을 따라 상위 계층으로 이동하게 된다.

클라이언트와 서버간 발생한 7계층의 HTTP 요청

  • 출발지 노드의 어떤 계층에서 전송된 데이터는 목적지 노드의 동일한 계층에 도달하게 된다.

클라이언트와 서버 간에 발생한 7계층 HTTP 요청

7 계층 데이터 HTTP 송신 과정

  • 클라이언트의 6계층이 7계층의 페이로드를 수신 후 헤더로 페이로드를 캡슐화 후 6계층의 페이로드 생성
  • 5계층은 6계층의 페이로드를 수신하고 자체적으로 헤더를 추가하여 4계층 페이로드를 전송한다.
  • 4계층인 전송 프로토콜 TCP의 페이로드는 세그먼트 혹은 데이터그램이라고 한다.
    • TCP는 5계층으 페이로드를 받아서 헤더를 추가하고 세그먼트를 3계층으로 전송
  • 3계층의 인터넷 프로토콜은 TCP의 세그먼트를 수신후 이를 헤더와 함께 캡슐화하고 3계층 페이로드인 패킷을 생성한다.
  • 2계층에서는 3계층으로부터 패킷을 수신하고 헤더와 푸터를 추가하여 페이로드를 만드는데 이 페이로드를 프레임이라고 한다.
    • 2계층의 헤더로부터 수신자의 IP 주소를 네트워크 인터페이스에 할당된 고유 식별자인 미디어 접근 제어 주소로 변환.
    • 푸터에는 에러를 감지하는데 도움이 되는 체크섬인 프레임 검사 시퀀스 FCS가 포함되어 있다.
  • 1계층에서는 2계층의 페이로드를 비트 형태로 받고 비트를 서버로 전송한다.

7 계층 데이터 HTTP 수신 과정

  • 1계층은 비트를 수신하여 프레임으로 변환 후 프레임을 2계층으로 전송
  • 2계층은 프레임에서 헤더와 푸터를 제거하고 패킷을 3계층으로 전달
  • 페이로드가 7계층에 도달할 때까지 각 레이어에서 진행한 캡슐을 역순으로 진행
  • 최종적으로 HTTP 서버는 네트워크 스택에서 클라이트의 요청을 수신하게 된다.

TCP/IP 모델

  • 전송 프로토콜(TCP)와 인터넷 프로토콜(IP)의 이름을 딴 TCP/IP는 종단 간의 연결을 원칙end-to-end principle 으로하는 네트워크이다.
  • OSI 참조 모델과 마찬가지로 TCP/IP는 추상적인 기능을 위해 계층 캡슐화에 의존한다.
  • 애플리케이션 계층, 전송 계층, 인터넷 계층, 링크 계층의 총 네 개의 계층으로 구성된다.

애플리케이션 계층

  • OSI의 애플리케이션 계층과 마찬가지로 소프트웨어 애플리케이션과 직접 상호 작용한다.
  • TCP/IP의 애플리케이션 계층은 OSI 모델의 애플리케이션 계층, 프레젠테이션 계층, 세션 계층 세 개의 계층을 포함한다.
  • 애플리케이션 계층의 프로토콜로는 HTTP, FTP(파일 전송 프로토콜), SMTP(단순 메일 전송 프로토콜), DHCP(동적 호스트 구성 프로토콜), DNS(도메인 네임 시스템) 가 있다.

전송 계층

  • OSI 모델과 마찬가지로 두 노드간 데이터 전송을 처리한다.
  • 전송 계층의 프로토콜은 출발지에서 전송된 모든 데이터가 목적지로 데이터 무결성을 보장하며 완전하고 올바르게 전송되도록 한다.
  • TCP 프로토콜의 무결성은 중복된 데이터나 누락된 데이터 없이 목적지에 수신한 데이터의 순서가 정확하다는 의미이다.
  • TCP, UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)
  • UDP의 경우 더 빠른 전송처리를 위해 세그먼트의 에러 수정, 흐름제어, 재전송 및 전송 확인등의 기능을 애플리케이션에서 직접 구현해야 한다.

인터넷 계층

  • 출발지 노드와 목적지 노드 사이의 상위 계층에서 데이터 패킷을 라우팅하며 종종 이기종 물리적 매체를 사용하는 여러 네트워크를 통해 라우팅한다.
  • OSI의 3계층인 네트워크 계층과 동일한 기능을 가지고 있다.
  • TCP/IP 계층의 호스트 식별 및 라우팅을 제공하는 프로토콜
    • 인터넷 프로토콜 버전 4(ipv4)
    • 인터넷 프로토콜 버전 6(ipv6)
    • 경계 경로 프로토콜(Border Gateway Protocol, BGP)
    • 인터넷 제어 메시지 프로토콜 ICMP
    • 인터넷 그룹 관리 프로토콜 IGMP
    • 인터넷 프로토콜 보안 IPsec

링크 계층

  • OSI 참조 모델의 1계층과 2계층에 해당한다.
  • TCP/IP 프로토콜의 핵심적인 부분과 물리적인 매체 사이의 인터페이스이다.
  • ARP(Address Resolution Protocol, 주소 결정 프로토콜)
    • 노드의 IP 주소를 네트워크 인터페이스의 MAC 주소로 변환한다.
  • 일부 TCP/IP 구현에는 링크 계층 프로토콜이 포함되어 있지 않다.
    • 아날로그 모뎀의 ISP에 직렬 연결을 맺었는데 이러한 직렬 연결에는 직렬 드라이버 또는 모뎀을 통한 링크 계층의 기능이 포함되어 있지 않았으며 이러한 기능을 위해 SLIP(직렬 회선 인터넷 프로토콜), PPP(점대점 프로토콜)와 같은 링크 계층의 프로토콜을 사용해야만 했다.

참조하기