Home 6장 시스템을 연결하는 네트워크 구조
Post
Cancel

6장 시스템을 연결하는 네트워크 구조

6.1 네트워크 구조

서로 다른 장비 간 데이터를 교환할 때 기본적으로는 네트워크를 경유해서 데이터를 송수신할 필요가 있다. 실제 네트워크 구조를 구체적으로 도식화하는 것은 어려울 것이다. 그 이유중 하나로 현재 네트워크 자체가 그 구조를 알지 못해도 사용할 수 있도록 돼 있기 때문이다. 네트워크에서 발생하는 데이터 처리나 교환에는 다양한 구조가 존재한다. 대부분 TCP/IP 구조를 사용하고 있다.

6.2 계층 구조

6.2.1 회사를 계층 구조에 비유

예) 회사 외부로 편지를 보낼 때 영업부는 A사에 영업 자료를 인사부는 채용 모집 안내서를 보내려 할 때 각 부서는 문서를 총무부에 의뢰하고 총무부는 우편실에 의뢰한다. 그리고 우편실은 편지를 우체통에 넣고 편지 전달을 완료한다.

6.2.2 계층 구조는 역할 분담

계층 구조에서는 계층 간 역할이 나누어진다. 역할이 나누어져 있기 때문에 각 층은 자신이 담당하는 일만 책임을 지며 다른 일은 다른 계층이 책임을 진다. 또 계층 구조로 나눔으로써 계층 간 서로 영향을 주지 않고 독립적으로 동작할 수 있다. 단점으로는 작업 효율을 희생해야 한다는 점을 들 수 있다.

6.2.3 계층 모델의 대표적인 예 - OSI 7계층

OSI는 통신 규격을 만들 때 고안된 것으로 통신기능을 7계층으로 나눈 것이다. 현재는 사용되지 않고 있고 이 계층 구조의 개념이 다양한 분야에서 공통적으로 참조할 수 있는 참조 모델로서 현재도 사용되고 있다.

6.2.4 계층 구조는 네트워크 외에도 존재

서버 한 대의 내부를 살펴봐도 계층 구조, OS, 애플리케이션 하드웨어 조합도 계층 구조라고 할 수 있다.

6.3 프로토콜

프로토콜은 컴퓨터 용어로는 컴퓨터가 서로 소통하기 위해 정한 규약을 가리킨다.

6.3.1 사람끼리의 의사소통도 프로토콜

사람끼리도 대화에 사용하는 언어가 일치하지 않으면 의미가 통하지 않는다. 또 대화할 때 소리를 사용하는 경우가 많은데 이것은 음성이라는 통신 프로토콜 위에 한국어라는 통신 프로토콜을 올려 놓은 것과 같다. 의미를 전달하는 부분인 언어 프로토콜이 일치한다고 해도 그것을 전달하는 프로토콜이 다르면 통신이 불가능하다.

6.3.2 컴퓨터에서는 프로토콜이 필수 불가결

브라우저로 웹 페이지를 볼 때 HTTP라고 불리는 프로토콜을 사용해서 서버에게 웹 페이지를 달라고 요청한다. 이 통신은 전기 신호나 전파를 이용해서 전달된다. 즉 프로토콜은 같은 계층 간의 약속이라고 할 수 있다.

컴퓨터도 만들어진 제조사가 다르면 서로 대화하는 언어를 일치 시켜야 통신이 가능하다. 때문에 네트워크 업계에서는 공통 프로토콜 선정을 위한 IEEE, IETF 같은 표준화 단체가 존재한다.

6.3.3 프로토콜은 서버 내부에도 존재

어떤 장비라도 서로 통신하기 위해서는 프로토콜이 필요하다. 예) 마우스를 PC에 연결할 때 사용하는 USB가 있다. 이것도 USB 프로토콜이 존재한다. 또 저장소도 마찬가지다. 저장소에서 데이터를 꺼낼때도 프로토콜이 정해져 있다. 그리고 CPU 안에도 프로토콜이 존재한다.

6.4 TCP/IP를 이용하고 있는 현재의 네트워크

인터넷을 포함해 현재 네트워크를 지탱하는 것은 TCP/IP 및 관련 프로토콜이다. 이들 프로토콜 집합을 모아서 TCP/IP 프로토콜 스위트라고 한다.

6.4.1 인터넷의 발전과 TCP/IP 프로토콜

6.4.2 TCP/IP 계층 구조

TCP/IP에서는 반드시 7계층으로 분명하게 나누어지는 것은 아니다. TCP/IP 4계층 모델 등으로도 불린다.

TCP/IP 4계층 모델과 시스템 대응관계

TCP/IP 각 계층의 명칭

실제 계층을 숫자로 부를때는 OSI 참조 모델의 7계층 방식으로 부르는 경우가 많다. 링크계층, 레이어2 또는 L2 IP계층을 레이어3 또는 L3 등등으로 부른다.

6.5 [레이어7] 애플리케이션 계층의 프로토콜 HTTP

6.5.1 HTTP의 처리 흐름

애플리케이션이 사용하는 프로토콜을 모두 애플리케이션 계층 프로토콜이라 부른다. 통신 자체는 모두 OS, 즉 TCP/IP에 맡긴다.

6.5.2 요청과 응답의 구체적인 내용

요청시 중요한 것은 서버에 던지는 명령이다. 예) GET은 파일 요구, POST는 데이터 전송, 헤더 부분에는 다양한 부가 정보가 들어가며 세밀한 제어를 위해 사용한다.

응답은 요청에 대한 결과와 그에 대한 상태 정보를 가지고 있다. 메시지 바디에 실제 데이터를 저장한다.

HTTP는 명령을 보내거나 통신 제어를 하지는 않는다. 그래서 매우 간단한 구조라는 것으 알 수 있다.

6.5.3 애플리케이션 프로토콜은 사용자 공간을 처리

애플리케이션은 소켓을 사용하여 통신을 한다. 따라서 애플리케이션 자체가 통신구조를 갖고 있지 않고도 통신할 수 있다.

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

애플리케이션 프로세스가 네트워크 통신을 하는 경우, 커널에 통신 의뢰를 한다. 의뢰 방법은 시스템 콜, 이때 접속 대상 서버의 IP주소와, TCP 포트의 정보가 필요하다.

의뢰를 받은 커널은 소켓을 만들어 주고 위의 정보를 시스템 콜 경유로 커널에 전달되면 접속 대상 서버와의 연결이 생성된다.

6.6 [레이어4] 전송 계층 프로토콜 TCP

6.6.1 TCP의 역할

TCP의 역할은 애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 확실하게 전달하는 것이다.

TCP가 담당하는 것은 어디까지나 서버가 송신할 때와 서버가 수신한 후 애플리케이션에게 전달할 때로 상대 서버까지 전송하는 부분은 하위 계층인 IP에 모두 위임한다. IP 만으로도 통신할 수 있지만 IP에는 데이터가 상대방에게 확실히 전달됐는지 확인하는 기능이나 도착한 순서를 확인하는 기능 등이 없다.

[주요기능]

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

6.6.2 커널 공간의 TCP 처리 흐름

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

TCP에서는 포트 번호를 사용해서 어떤 애플리케이션에 데이터를 전달할지 판단한다. 포트번호는 0~65535까지의 숫자를 사용한다.

6.6.4 연결 생성

6.6.5 데이터 보증과 재전송 제어

데이터 손실을 방지하는 구조 : 수신 측에 TCP 세그먼트가 도착하면 수신 측은 송신 측에게 도착했다는 것을 알린다. 이때 반환하는 것을 ACK라고 한다. 송신측은 ACK가 돌아오는 것을 보고 전송한 세그먼트가 무사히 도착했다는 것을 알 수 있다.

데이터 순서를 보증하는 구조 : TCP 세그먼트에 시퀀스 번호라고 하는 숫자를 붙여수 구현한다. 수신 측은 이 시퀀스 번호를 사용해서 원래 순서대로 데이터를 조립한다.

TCP 재전송 제어 : 순차적 조합을 위해 수신 측은 ACK를 반환할 때 다음에 필요한 TCP 세그먼트의 시퀀스 번호도 ACK 번호로 전달한다. ACK가 오지 않으면 재전송 한다고 했다 기준은 1.일정 기간내에 돌아오지 않은 경우 2.한번 받은 ACK 번호와 같은 것이 3회 중복돼서 도착한 경우(중복ACK)

6.6.6 흐름 제어와 폭주 제어

흐름제어 : 동기로 통신을 하면 효율이 나쁘지 않기 때문에 ACK를 기다리지 않고 전송하는 것이 좋다. ACK 번호가 돌아오기 전에 이미 시퀀스 번호를 전송한다. TCP는 어느 정도의 세그먼트 수라면 ACK를 기다리지 않고 전송하는 윈도우라는 개념을 가지고 있다.

윈도우에는 수신 윈도우, 폭주 윈도우가 있다. 수신측이 폭주 윈도우 크기를 조정해서 폭주 윈도우와 수신 윈도우 중 작은 쪽을 송신 윈도우로 채택하며 이 범위 내에서는 ACK를 기다리지 않고 전송한다.

폭주제어 : 송신측 윈도우 크기는 네트워크 폭주 상태에 맞추어 변경시킨다.

6.7 [레이어3] 네트워크 계층의 프로토콜 IP

6.7.1 IP의 역할

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

주요 기능

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

6.7.2 커널 공간의 IP 처리 흐름

**헤더는 기본적으로 20바이트이다.

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

IP에서는 최종 목적지 서버까지 복수의 네트워크를 경유해서 데이터를 전송한다. 이때 이용되는 것이 대상 서버를 나타내는 IP 주소다.

IP 주소는 32비트로 표현된 숫자 집합이다. 사람이 읽기 쉽도록 8비트 단위로 마침표를 찍어서 표현한다. IP 주소는 네트워크부(어떤 네트워크인지)와 호스트부(네트워크내에 있는 컴퓨터)로 나뉜다. IP 주소에서 어디까지가 네트워크부인지 표시하기 위해서 ‘/24’와 같은 CIDR표기를 사용한다. 또는 서브넷 마스크 255.255.255.0과 같이 표현하기도 한다. 같은 네트워크 내 컴퓨터의 IP 주소는 네트워크부를 동일 값으로 설정해야 한다.

IP주소 중 호스트부의 비트가 모두 0인 것을 네트워크 주소, 모두 1인 것을 브로드캐스트 주소라고 한다. 이것은 호스트에 할당해서는 안 되는 특별한 IP 주소다. 참고로 브로드캐스트 주소로 보낸 패킷은 같은 네트워크의 모든 호스트에 전달된다.

6.7.4 사설 네트워크와 IP 주소

IP 주소란 목적지를 식별하기 위한 것이다. 가정이나 회사에서 사용하는 네트워크 즉 사설 네트워크에서도 사용할 수 있는 주소도 RFC 1918에서 정하고 있다.

  • 10.0.0.0/8 (10.0.0.0 ~ 10.255.255.255)
  • 172.16.0.0/12 (172.16.0.0 ~ 172.31.255.255)
  • 192.168.0.0/16 (192.168.0.0 ~ 192.168.255.255)

사설 주소의 반대 개념으로 인터넷상에서 통신이 가능한 IP 주소를 공공 IP 주소라고 한다. 사설 주소는 자유롭게 사용가능 하지만 인터넷상의 호스트등과 통신이 불가능하다. 따라서 공공 주소와 사설 주소가 모두 할당된 호스트를 준비해야 한다.

6.7.5 라우팅

IP에서 최종 목적지로 데이터를 전송할 때 목적지까지 도착할 때까지 목적지를 알고 있는 라우터에 전송을 부탁한다. IP 패킷을 받은 라우터는 헤더에서 목적지를 확인해 어디로 보내야할 지를 확인한다. 이때 사용하는 것이 라우팅 테이블이라는 것이다. 외부와 접속하는 네트워크는 보통 기본 게이트웨이라는 라우터가 설치돼 있다.

또 IP 헤더에는 TTL이라는 생존 시간 정보를 가지고 있다. 예) TTL=64 로 시작하면 라우터를 하나 경유할 때마다 라우터가 IP 헤더 TTL을 1씩 줄여서 전송한다. 따라서 계속 전송하면 TTL이 줄어서 언젠가 0이되고 이 시점에 패킷 생존 시간이 끝나 파기한다. 이처럼 TTL을 이용해서 패킷이 좀비가 되어 배회하는 것을 방지할 수 있다.

6.8 [레이어2] 데이터 링크 계층의 프로토콜 이더넷

IP 패킷이 만들어지면 계속해서 링크 계층의 처리가 시작된다. 링크 계층에서 사용되는 대표적인 프로토콜은 이더넷이다.

6.8.1 이더넷의 역할

동일 네트워크 내의 네트워크 장비까지 전달받은 데이터를 운반한다. 이더넷은 케이블 통신에서 사용되기 때문에 전기 신호로 전송된다.

이더넷은 동일 네트워크 내, 즉 자신이 포함된 링크 내에서만 데이터를 전송할 수 있다. 이때 사용되는 주소가 MAC 주소다.

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

IP 계층에서 라우팅 테이블을 확인하기 때문에 어떤 링크가 패킷을 보낼지는 정해져 있다. 최종적인 통신 상태가 동일 네트워크 내에 있으면 해당 서버에 직접 전송하지만 다른 네트워크에 있으면 기본 게이트웨이에 패킷을 보내야 한다. MAC 주소라 불리는 링크 계층 주소를 사용해서 첫 번째 목적지로 보낸다.

215~218p

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

MAC 주소는 네트워크 통신을 하는 하드웨어에 할당된 주소로 48비트로 표현하고 보통 16진수로 표기한다.

이더넷 프레임이 L2 스위치에 도착하면 프레임을 받은 L2 스위치는 MAC 주소를 보면서 적절한 포트에서 프레임을 꺼낸다. 하지만 다른 네트워크를 거치는 경우 MAC 주소를 사용한 통신이 불가능하다.

6.8.4 VLAN

VLAN은 물리 구성에 의존하지 않고 가상적인 네트워크를 나누는 구조다.

219~221p

6.9 TCP/IP를 이용한 통신 이후

6.9.1 네트워크 스위치 중계처리

221~222p

6.9.2 최종 목적지의 수신 확인

223~224p

This post is licensed under CC BY 4.0 by the author.

5장 인프라를 지탱하는 응용 이론

7장 무정지를 위한 인프라 구조