1. 네트워크
서로 다른 장비가 데이터를 교환할 때 기본적으로 네트워크를 경유해서 데이터를 송수신합니다.
네트워크에서 발생하는 데이터 처리나 교환에는 다양한 구조가 존재하는데 이전에 글을 적었었던 3계층형 시스템 등은 대부분 TCP/IP 구조를 이요하고 있습니다.
2. 계층 구조
계층 구조에서는 데이터나 기능 호출 흐름에 따라 계층 간 역할이 나누어진다는 특징이 있습니다.
역할이 나뉘어 있기 때문에 각 층은 자신이 담당하는 일만 책임을 지며, 다른 일은 다른 계층이 책임을 진다.
각 층마다 어떤 방식으로 일을 처리하는지 모르도록 은폐화 되어 있습니다.
계층 모델의 대표적인 예로는 'OSI 7계층 모델' 이 있습니다.
해당 계층 구조 개념은 다양한 분야에서 공통적으로 참조할 수 있는 ‘참조 모델’로 현재도 사용되고 있습니다.
계층 구조는 시스템을 구성하는 서버도 계층으로 되어 있습니다.
3. 프로토콜
컴퓨터가 서로 소통하기 위해 정한 규약입니다.
컴퓨터의 거의 모든 곳에 프로토콜을 사용합니다. 서로 다른 두 개의 장비에 절차를 두지 않는다면 통신을 할 수 없습니다.
예로 만약에 image.jpg 파일을 받고 싶다면
GET / image.jpg HTTP/1.0 을 요청하게 된다면 해당 데이터를 전달받아 HTTP/1.0 200 OK로 데이터를 보내게 됩니다.
서버 내부에도 프로토콜은 존재합니다. USB형 마우스를 PC에 연결할 때에도 USB 프로토콜을 이용해야 합니다.
또한 저장소에서 데이터를 읽을 때도 SCSI 라틑 프로토콜을 이용하기도 합니다.
CPU 내에서도 각 코어들이 서로 통신을 하는데 프로토콜을 이용합니다.
4. TCP/IP 네트워크
인터넷을 포함해서 현재 네트워크를 지탱하는 것은 TCP/IP 및 관련 프로토콜입니다.
위에 OSI 모델을 작성했는데, 네트워크 역할 분담을 계층화한 모델입니다.
OSI 참조 모델에서는 7계층으로 분할했지만, TCP/IP에서는 반드시 이 7계층이 분명하게 나누어지는 것은 아닙니다.
TCP/IP 4계층 모델 등으로 불리며, OSI 7계층의 1~2계층을 모아서 링크 계층, 5~7계층을 모아서 애플리케이션으로 취급하기도 합니다.
TCP/IP는 4계층을 숫자로 부를 때는 OSI 참조 모델의 7계층 방식으로 부르는 경우가 많습니다.
· 링크 계층(이더넷 계층): 레이어2, L2
· IP계층: 레이어3, L3
· 전송 계층(TCP 계층): 레리어4, L4
· 애플리케이션 계층: 애플리케이션 레이어, L7
5. 애플리케이션 계층 프로토콜 HTTP
애플리케이션이 없으면 통신이 시작되지 않습니다.
애플리케이션이 사용하는 프로토콜을 모두 애플리케이션 계층 프로토콜이라 합니다.
브라우저에 URL을 입력해서 요청이 웹 서버에 도달하면 응답으로 HTML 파일이 반환됩니다.
브라우저는 이 파일을 해석해서 파일 내에 추가 이미지나 스크립트 등이 포함돼 있으면 다시 웹 서버에 이들을 요청합니다.
요청(Request)
서버에 던지는 명령으로, 헤더 부분에는 다양한 부가 정보가 들어가며 세밀한 제어를 위해 사용(GET, POST)합니다.
응답(Response)
요청에 대한 결과와 그에 대한 상태 정보를 가지고 있고, 메시지 바디에 실제 데이터를 저장합니다.
6. 전송 계층 프로토콜 TCP
TCP의 역할은 애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 확실하게 전달하는 것입니다.
TCP는 어디까지나 서버가 송신할 때와 서버가 수신할 후 애플리케이션에게 전달할 때로, 상대 서버까지 전송하는 부분은 하위 계층인 IP에 모두 위임합니다.
TCP 기능
|
포트 번호를 이용해서 데이터 전송
|
연결 생성
|
데이터 보증과 재전송 제어
|
흐름 제어와 폭주 제어.
|
커널 공간 내의 TCP 처리
소켓에 기록된 데이터는 큐를 경유해서 커널 내 네트워크 처리 부분에 전달됩니다.
커널에 전달된 데이터는 ‘소켓 버퍼’라는 메모리 영역에서 처리됩니다.
데이터에 TCP 헤더를 붙여서 TCP 세그먼트를 생성한다. TCP 헤더에는 목적 애플리케이션 포트 번호 신호를 포함해 TCP 기능에 필요한 다양한 정보가 기록됩니다.
하나의 TCP 세그먼트로 전송할 수 있는 최대 크기를 MSS라고 한다. MSS를 초과한 데이터는 자동적으로 분할돼서 복수의 TCP 세그먼트가 생성됩니다.
TCP 연결 생성
클라이언트는 서버 측 OS에게 가상 경로를 열도록 의뢰를 합니다.
서버 측에서 리슨하고 있는 포트 번호로 통신 요구가 온다. 서버는 문제가 없으면 열어도 된다는 응답을 합니다.
클라이언트 측도 확인했다는 메시지를 보내며, 이때 처음으로 통신용 가상 경로가 열립니다.
데이터 보증과 재전송 제어
연결이 생성된 후에야 데이터 송수신이 시작되는데, TCP에는 데이터가 확실히 전달되도록 보증하는 기능이 있습니다.
· 데이터 손실 방지: 확인 응답과 재전송에 의해 구현됩니다(ACK).
· 데이터 순서 보증: 각 TCP 세그먼트에 시퀀스(sequence) 번호를 붙여서 구현합니다.
흐름 제어와 폭주
데이터를 보내고 ACK를 기다리는 처리를 반복(동기 처리)하다 보면 시간이 많이 걸립니다.
TCP는 어느 정도의 세그먼트 수라면 ACK를 기라디지 않고 전송하는 윈도우라는 개념을 가지고 있으며, ACK를 기다리지 않고 전송가능한 데이터 크기를 윈도우 크기라고 합니다.
7. 네트워크 계층의 프로토콜 IP
TCP 세그먼트가 만들어지면 다음은 IP 처리가 시작됩니다.
IP의 역할
· IP 주소를 이용해서 최종 목적지에 데이터 전송
· 라우팅(routing)
커널 공간의 IP 처리 흐름
TCP 세그먼트에 IP 헤더를 붙여서 IP 패킷을 생성합니다. 대상 서버까지는 이 IP 패킷 형태로 네트워크를 경유해서 도달합니다. IP 헤더에는 최종 목적지 서버의 IP 주소가 기록됩니다.
IP 주소를 이용한 최종 목적지로의 데이터 전송
IP 주소는 32비트로 표현된 숫자 집합입니다. 사람이 읽기 쉽도록 8비트 단위로 마침표를 찍어서 표현합니다.
IP 주소는 네트워크부와 호스트부로 나뉩니다. 네트워크부는 어떤 네트워크인지를 가리키고, 호스트부는 해당 네트워크 내에 있는 컴퓨터를 가리킵니다.
네트워크부를 구분하기 위해 ‘/24’와 같은 CIDR(사이더) 표기를 사용한다. 또는 서브넷 마스크(subnet mask)라고 해서 255.255.255.0과 같이 표현하기도 합니다.
IP 주소 중 호스트부의 비트가 모두 0인 것을 네트워크 주소, 모두 1인 것을 브로드캐스트(broadcast) 주소라고 합니다.
8. 데이터 링크 계층의 프로토콜 이더넷
IP 패킷이 만들어지면 계속해서 링크 계층의 처리가 시작됩니다.
이더넷을 포함한 링크 계층 프로토콜의 역할은 ‘동일 네트워크 내(링크 내) 데이터 전송’ 입니다.
이더넷은 동일 네트워크 내, 즉 자신이 포함된 링크 내에서만 데이터를 전송할 수 있습니다. 이때 사용되는 주소가 MAC(맥) 주소입니다.
커널 공간의 이더넷 처리 흐름
IP 패킷에 이더넷 헤더와 푸터를 붙여서 이더넷 프레임을 만듭니다다. 헤더에는 링크 계층 주소인 MAC 주소가 기록되어 있습니다. 목적지 IP 주소에 따라 라우팅 테이블을 이용해서 어떤 NIC에서 보내야 할지를 결정합니다.
송신 큐에 넣은 후 장치 드라이버 경유로 NIC에 전달합니다.
커널 처리를 끝낸 프레임은 버스를 통해서 NIC로 보냅니다.
NIC에 연결된 장비로 프레임이 전송됩니다.
'Develop > Infra' 카테고리의 다른 글
무정지를 위한 인프라 구조 (0) | 2022.05.08 |
---|---|
인프라 응용 이론 (0) | 2022.05.08 |
인프라 이론 (0) | 2022.05.08 |
3계층형 시스템 (0) | 2022.05.08 |
인프라 아키텍처 (0) | 2022.05.08 |