공통/인프라 & 시스템 설계

[그림으로 공부하는 IT인프라 구조] 6장 정리

반응형

네트워크


서로 다른 장비 간 데이터를 교환할 때 기본적으로는 네트워크를 경유해서 데이터를 송수신할 필요가 있다.


네트워크 계층구조

  • 계층구조에서는 데이터나 기능 호출 흐름에 따라 계층 간 역할이 나누어진다는 특징이 있음.
  • 각 층은 자신이 담당하는 일만 책임을 지며, 상호 연결돼 있는 계층들에서는 교환 방법, 즉 인터페이스만 정해두면 된다.


은폐 효과

  • 각 층은 상호 간에 어떤 일을 하는지는 알고 있지만, 구체적으로 어떤 방식으로 처리하는지는 알지 못한다. 즉 은폐되어 있다.
  • 이렇게 계층 구조로 나눔으로써 계층 간에 서로 영향을 주지 않고 독립적으로 동작할 수 있다.
  • 상호 간에 내부처리를 은폐하기 때문에, 인터페이스만 바꾸지 않으면 각 계층이 내부적으로 처리를 마음대로 바꾸어도 문제없다.


OSI 7 계층 모델

  • OSI 통신 기술을 7개의 계층으로 나눈 것으로, 현재 사용되고 있지는 않지만 "참조 모델"로써 현재도 사용 중이다.
  • 애플리케이션 계층, 표현 계층, 세션 계층, 전송 계층, 네트워크 계층, 데이터 링크 계층, 물리 계층 (7 계층)


시스템 계층 구조

참고로 네트워크 외에도 시스템을 구성하는 서버 내부도 계층구조로 이루어져 있다.

자바 애플리케이션, 애플리케이션 서버, JVM, 커널, 하드웨어


프로토콜

  • 프로토콜이란 컴퓨터가 서로 소통하기 위해 정한 규약.
  • 통신 프로토콜이란, 다른 제조사에서 만들어진 컴퓨터가 서로 통신하기 위해서는 프로토콜을 일치시켜야 한다. (사람의 언어.. 한국어. 영어와 같은 의미)
  • 프로토콜은 서버 내부에도 존재한다. (USB 프로토콜, SCSI 프로토콜 등...)


TCP/IP 모델

  • 인터넷을 포함해서 현재 네트워크를 지탱하는 것은 TCP/IP 프로토콜임.
  • 애플리케이션 계층, 전송계층, IP 계층, 링크 계층 (TCP/IP 4 계층)


1. 애플리케이션 계층의 HTTP 프로토콜

  • 애플리케이션이 사용하는 프로토콜을 모두 애플리케이션 계층 프로토콜이라고 부름.
  • 애플리케이션 계층 프로토콜은 자신이 통신을 하는 것이 아니라 통신 자체는 모두 OS, 즉 TCP/IP에 맡긴다.
  • 애플리케이션 프로토콜은 사용자 공간을 처리한다
  • 요청 시에 애플리케이션 프로토콜은 필요한 데이터를 소켓에 기록만 하며 실제 통신은 모두 TCP/IP에 위임한다.
  • 응답 시에 애플리케이션 프로토콜은 통신 상대가 보낸 데이터를 읽어서 통신 상대의 요청 등을 처리.
  • 실제 통신은.. TCP/IP를 통해 상대 서버까지 전송된다.


소켓 이하는 커널 공간에서 처리.

  • 애플리케이션 네트워크 통신을 하는 경우, 커널에 시스템 콜을 통해서 TCP/IP로 통신하고 싶으니 회선을 열어달라고 요청한다.
  • 이때 접속 대상의 서버 IP 주소와 TCP 포트의 두 가지 정보가 필요하다.
  • 의뢰받은 커널은 소켓을 만들어 준다. (통신하고 싶은 상대를 커널에 지정하고, 소켓이라고 불리는 데이터 전송 통로를 만들어 줌) ⇒ 통신 상대가 보낸 데이터가 소켓을 통해 나옴.


Keep-Alive

  • HTTP 요청/응답 관계가 한번 끝나면 세션을 종료한다.
  • 따라서 한 화면에 많은 이미지가 포함돼 있으면 몇 번이고 세션을 만들고 닫는 처리를 해야 한다.
  • 이 세션을 만들고 닫는 처리는 하위 계층인 TCP에서 3 way-handshake 등의 오버헤드가 발생해서 전체 화면의 응답에 영향을 끼침.
  • 따라서 단시간 동안만 세션을 남겨둬서 한번 생성된 세션을 어느 정도 기간 동안 재사용하기 위해서 keep-Alive 기능을 이용한다. (오버헤드를 줄일 수 있음.)


2. 전송 계층의 TCP 프로토콜

  • TCP는 전송을 제어하는 프로토콜로, 신뢰도가 높은 데이터 전송을 가능케 한다.
  • 애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 확실하게 전달하는 것.
  • TCP가 담당하는 것은 어디까지나 서버가 송신할 때와 서버가 수신한 후 애플리케이션에게 전달할 때로, 상대 서버까지 전송하는 부분은 하위 계층인 IP에 모두 위임한다.
  • 물론 TCP에 의존하지 않고 IP만으로도 통신할 수는 있지만, IP에는 데이터가 상대방에게 확실히 전달됐는지 확인하는 기능이나 도착한 순서를 확인하는 기능 등이 없다.


기능 정리

  • 포트 번호를 이용해서 데이터 전송
  • 연결 생성
  • 데이터 보증과 재전송 제어
  • 흐름 제어와 폭주 제어


커널 공간의 TCP 처리 흐름

  • 소켓에 기록된 애플리케이션 데이터는 소켓의 큐를 경유해서 소켓 버퍼라 불리는 메모리 영역에서 처리된다.
  • TCP는 데이터를 세그먼트라고 하는 단위로 관리한다. (애플리케이션 데이터에 TCP 헤더를 붙여서 TCP 세그먼트를 작성)
  • TCP 세그먼트로 전송할 수 있는 최대 데이터 크기를 MSS라고 한다.


포트 번호를 이용한 데이터 전송

  • TCP에서는 포트 번호를 사용해서 어떤 애플리케이션에 데이터를 전달할지 판단한다.


연결 생성

  • TCP는 연결형 프로토콜로, 연결이라 불리는 가상 경로를 생성한다.
  • 이는 3-way handshake를 통해서 연결된다


3-way handshake

  • 통신 상대인 서버 측 OS에게 가상 경로를 열도록 의뢰한다. (SYN)
  • 서버는 문제가 없으면 열어도 된다는 응답을 한다. (ACK + SYN)
  • 클라이언트 측도 확인했다는 메시지를 보내며, 이때 처음으로 통신용 가상 경로가 열린다. (ACK)


포트

  • 통신을 받는 서버 측은 미리 지정한 포트번호를 LISTEN 한다. ex) 80번 포트
  • 하지만 클라이언트 측에서는 보통 자신이 사용하기 위한 포트번호를 지정할 수 없다. (OS에 의해 클라이언트 측에서 사용하지 않는 포트 번호가 자동으로 할당됨): 랜덤 포트


데이터 보증과 재전송 제어

데이터 손실을 방지하는 구조

  • 확인 응답과 재전송에 의해 구현된다.
  • 수신 측에 TCP 세그먼트가 도착하면 수신 측은 송신 측에게 도착했다는 것을 알린다. (ACK)
  • ACK가 오지 않으면 전송한 TCP 세그먼트가 어떤 이유로 사라졌을 가능성이 있다. 따라서 언제든지 재전송이 가능하도록 전송이 끝난 TCP 세그먼트라도 ACK가 돌아오기까지는 소켓 버퍼에 남겨 둘 필요가 있다.


데이터 순서를 보장하는 구조

  • 각 TCP 세그먼트에 시퀀스 번호라고 하는 숫자를 붙여서 구현한다.
  • 예를 들어 3000바이트의 데이터를 보낼 때 1460, 1460, 80 바이트의 세 가지 TCP 세그먼트로 분할해서 보냈다면 수신 측은 이 시퀀스 번호를 사용해서 원래 순서대로 데이터를 조립한다.


TCP 재전송 제어

  • ACK가 오지 않으면 재전송하는데 이때 타임아웃 시점에 재전송을 한다.

 

흐름 제어와 폭주 제어

흐름 제어

  • 동기로 통신을 하면 효율이 나쁘기 때문에 ACK를 기다리지 않고 전송하는 것이 좋다.
  • TCP는 어느 정도의 세그먼트 수라면 ACK를 기다리지 않고 전송하는 윈도우라는 개념이 있다.
  • ACK를 기다리지 않고 전송 가능한 데이터 크기를 윈도우 크기라고 한다.
  • 윈도우에는 수신 측의 수신 윈도우와 송신 측의 송신 윈도우 두 가지가 있는데, 기본적으로는 수신 측이 송신 윈도우 크기를 조정해서 송신 윈도우와 수신 윈도우 중 작은 쪽을 송신 윈도우로 채택하며, 이 범위 내에서는 ACK를 기다리지 않고 전송한다.

 

폭주 제어

  • 송신 측 윈도우 크기는 네트워크 혼잡 상태에 맞추어 변경한다.
  • 즉, 네트워크가 혼잡하면 송신 윈도우 크기를 작게해서 전송 데이터 양을 줄인다.
  • 송신 윈도우 크기는 통신 시작시 1세그먼트에 설정되서, 통신이 문제 없이 시작돼서 수신 측에 도착하면 ACK 반환 시마다 송신 윈도우 크기를 2세그먼트, 4세그먼트 식으로 지수 함수적으로 늘려나간다. (슬로우 스타터)
  • 송신 중인 세그먼트가 실패하면, 즉 혼잡을 감지하면 송신 윈도우 크기를 작게 해서 송신량을 줄인다.

 

3. 네트워크 계층의 IP 프로토콜


TCP 세그먼트가 만들어지면 다음은 IP 처리가 시작된다.

  • IP의 역할은 지정한 대상 서버까지 전달받은 데이터를 전해 주는 것.
  • 단, IP에서는 반드시 전달된다고 보장하지 않는다.

 

역할

  • IP 주소를 이용해서 최종 목적지에 데이터 전송
  • 라우팅

 

커널 공간의 IP 처리 흐름

  • IP 계층에서는 최종 목적지가 적힌 IP 헤더를 TCP 세그먼트에 추가해서 IP 패킷을 생성한다.
  • 이 생성된 IP 패킷 형태로 네트워크를 경유해서 도달한다. (IP 헤더에는 최종 목적지 서버의 IP 주소가 기록된다.)

 

IP 주소를 이용한 최종 목적지로의 데이터 전송

  • IP 주소는 네트워크부와 호스트부로 나뉜다.
  • 네트워크부는 어떤 네트워크인지를 가리키고, 호스트부는 해당 네트워크 내에 있는 컴퓨터를 가리킨다.
  • IP 주소에서 어디까지가 네트워크부인지를 표시하기 위해 /24와 같은 CIDR 표기를 사용한다. 또는 서브넷 마스크라고 해서 255.255.255.0과 같이 표현하기도 한다.

 

사설 네트워크

  • 가정이나 회사 내에서 사용하는 네트워크이다.
  • 사설 네트워크에서 사용할 수 있는 주소 범위는 RFC 1918에서 정하고 있다.
  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • 참고로 사설 주소와 반대되는 개념으로, 인터넷상에서 통신이 가능한 IP주소를 공공(Public) IP 주소라고 한다.

 

라우팅

  • IP 주소를 이용해서 대상 서버를 지정할 수 있다. 만약 대상 서버가 다른 네트워크에 있는 경우 최종 목적지에 도착할 때까지 목적지를 알고 있는 라우터에 전송을 부탁하는 형식으로 전송된다.
  • IP 패킷을 라우터는 해당 IP 패킷의 헤더에서 목적지를 확인해서 어디로 보내야 할지를 확인하는데, 이때 사용되는 것이 라우팅 테이블이다.
  • 외부와 접속하는 네트워크는 보통 기본 게이트웨이라는 라우터가 설치돼 있다.

 

TTL

  • 패킷이 계속 순회해서 무한 루프에 걸리는 것을 방지하기 위한 생존 시간.
  • 라우터를 하나 경유할 때마다 TTL을 1씩 줄여서 전송해서 0이 되면 라우터가 패킷을 파기한다.

 

4. 데이터 링크 계층의 이더넷 프로토콜


IP 패킷이 만들어지면 링크 계층의 처리가 시작된다. 링크 계층에서 사용되는 대표적인 프로토콜은 이더넷이다. (참고로 이더넷 말고 다른 프로토콜이 몇 가지 더 있다.)

 

역할

  • 동일 네트워크 내의 네트워크 장비까지 전달받은 데이터를 운반
  • 동일 네트워크에서 사용되는 주소가 MAC 주소이다.

 

커널 공간의 이더넷 처리 흐름

  • MAC 주소에는 ARP 테이블이라고 불리는 표가 있음. (IP주소와 MAC 주소의 대응 관계를 기록한 표)
  • 이렇게 인접한 장비의 MAC 주소를 헤더에 기록한 후 최종적으로는 OS가 버스를 통해 NIC에 전달한다. NIC는 이것을 다시 네트워크에 전송한다.

 

IP 패킷이 이더넷 프레임에 저장되는 모습

  • 이더넷 등 해당 링크 계층에서 하나의 프레임으로 전송할 수 있는 최대 크기를 MTU라고 한다. (일반적으로 이더넷에서는 1500 바이트로 설정돼 있음)

 

동일 네트워크 내의 데이터 전송

  • MAC 주소는 네트워크 통신을 하는 하드웨어에 할당된 주소로, 원칙적으로는 세상에 있는 모든 장비가 고유한 물리 주소를 가진다 (48비트)
  • 서버 등이 보낸 이더넷 프레임이 L2 스위치에 도착하면 프레임을 받은 L2 스위치는 MAC 주소를 보면서 적절한 포트에서 프레임을 꺼낸다. 하지만 다른 네트워크를 거치는 경우는 MAC 주소를 사용한 통신이 불가능하다.
  • IP를 이용한 브로드캐스트 주소 통신은 이더넷상에서의 브로드캐스트 통신으로 전송된다. (MAC 주소 FF-FF-FF-FF-FF-FF)
  • 브로드캐스트를 이용한 통신도 다른 네트워크를 거쳐서 전송할 수 없기 때문에 하나의 네트워크를 브로드캐스트 도메인이라고 부른다.

 

VLAN

  • 브로드캐스트 통신 등 전체에 데이터를 전송하는 경우는 불필요한 트래픽을 증가시킨다. 즉 브로드캐스트 도메인을 고려해서 네트워크를 적절하게 분할하는 것이 필요하다.
  • 하지만 네트워크 범위는 네트워크 스위치의 물리 구성에 의해 크게 좌우되기 때문에 유연하게 구성하기가 어렵다. 따라서 물리 구성에 좌우되지 않고 설정만으로 네트워크를 나눌 수 있는 구조가 필요한데, VLAN이 사용된다.

 

VLAN 이란?

  • 물리 구성에 의존하지 않고 가상적인 네트워크를 나누는 구조.
  • 가상적으로 나눈 네트워크는 VLAN ID로 불리는 숫자로 관리한다.
  • 이더넷 프레임이 해당 프레임에 소속된 VLAN ID의 태그를 붙여서 하나의 물리 링크 내에서도 복수의 네트워크 이더넷 프레임을 처리할 수 있는 구조다.
반응형