시스템을 연결하는 네트워크 구조
6.2 계층 구조(계층 모델)
데이터나 기능 호출 흐름에 따라 계층 간 역할이 나누어진다.
계층 모델의 대표적인 예가 ‘OSI 7계층 모델’이다.
OSI 자체는 현재 사용되고 있지 않지만, 이 계층 구조 개념은 다양한 분야에서 공통적으로 참조할 수 있는 ‘참조 모델’로 현재도 사용되고 있다.
OSI 7계층 모델
- 애플리케이션 계층(application layer): 애플리케이션 처리
- 프레젠테이션 계층(presentation layer): 데이터 표현 방법
- 세션 계층(session layer): 통신 시작과 종료 순서
- 전송 계층(transport layer): 네트워크의 통신관리
- 네트워크 계층(network layer): 네트워크 통신 경로 선택
- 데이터 링크 계층(data link layer): 직접 접속되어 있는 기기 간 처리
- 물리 계층(physical layer); 전기적인 접속
시스템을 구성하는 서버 역시 계층 구조로 되어 있다.
서버 계층 구조
- 자바 애플리케이션
- 애플리케이션 서버
- Java VM
- 커널
- 하드웨어
6.3 프로토콜(protocol)
컴퓨터가 서로 소통하기 위해 정한 규약을 가리킨다.
‘통신 매체가 되는 통신 프로토콜’과 ‘의미를 전달하는 통신 프로토콜’로 나눌 수 있다.
6.4 TCP/IP를 이용하고 있는 현재의 네트워크
인터넷을 포함해서 현재 네트워크를 지탱하는 것은 TCP/IP 및 관련 프로토콜(TCP/IP protocl suite)이다.
OSI 참조 모델에서는 7계층으로 분할했지만, TCP/IP에서는 반드시 이 7계층이 분명하게 나누어지는 것은 아니다.
TCP/IP 4계층 모델 등으로 불리며, OSI 7계층의 2계층을 모아서 링크 계층, 5계층을 모아서 애플리케이션으로 취급하기도 한다.
HTTP 통신의 경우
- HTTP(애플리케이션 계층)
- TCP(전송 계층)
- IP(IP 계층)
- 이너넷(링크 계층)
TCP/IP는 4계층을 숫자로 부를 때는 OSI 참조 모델의 7계층 방식으로 부르는 경우가 많다.
TCP/IP
- 애플리케이션 계층: 애플리케이션 레이어, L7
- 전송 계층(TCP 계층): 레이어4, L4
- IP계층: 레이어3, L3
- 링크 계층(이더넷 계층): 레이어2, L2
6.5 [레이어7] 애플리케이션 계층의 프로토콜 HTTP
애플리케이션이 없으면 통신이 시작되지 않는다.
애플리케이션이 사용하는 프로토콜을 모두 애플리케이션 계층 프로토콜이라 부른다.
애플리케이션 계층 프로토콜은 자신이 통신을 하는 것이 아니라 통신 자체는 모두 OS, 즉 TCP/IP에 맡긴다.
브라우저에 URL을 입력해서 요청이 웹 서버에 도달하면 응답으로 HTML 파일이 반환된다.
브라우저는 이 파일을 해석해서 파일 내에 추가 이미지나 스크립트 등이 포함돼 있으면 다시 웹 서버에 이들을 요청한다.
6.5.1 요청(request)과 응답(response)
요청: 서버에 던지는 명령. 헤더 부분에는 다양한 부가 정보가 들어가며 세밀한 제어를 위해 사용(GET, POST).
응답: 요청에 대한 결과와 그에 대한 상태 정보를 가지고 있다. 또한, 메시지 바디에 실제 데이터를 저장한다.
6.6 [레이어4] 전송 계층 프로토콜 TCP
TCP의 역할은 애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 확실하게 전달하는 것이다.
TCP가 담당하는 것은 어디까지나 서버가 송신할 때와 서버가 수신할 후 애플리케이션에게 전달할 때로, 상대 서버까지 전송하는 부분은 하위 계층인 IP에 모두 위임한다.
6.6.1 TCP의 기능(서비스)
- 포트 번호를 이용해서 데이터 전송
- 연결 생성
- 데이터 보증과 재전송 제어
- 흐름 제어와 폭주 제어.
6.6.2 커널 공간의 TCP 처리 흐름
- 소켓에 기록된 데이터는 큐를 경유해서 커널 내 네트워크 처리 부분에 전달된다.
- 커널에 전달된 데이터는 ‘소켓 버퍼’라는 메모리 영역에서 처리된다.
- 데이터에 TCP 헤더를 붙여서 TCP 세그먼트를 생성한다.
TCP 헤더에는 목적 애플리케이션 포트 번호 신호를 포함해 TCP 기능에 필요한 다양한 정보가 기록된다. - 하나의 TCP 세그먼트로 전송할 수 있는 최대 크기를 MSS라고 한다.
MSS를 초과한 데이터는 자동적으로 분할돼서 복수의 TCP 세그먼트가 생성된다.
6.6.4 TCP 연결 생성(TCP/IP의 3-way handshaking)
- 클라이언트는 서버 측 OS에게 가상 경로를 열도록 의뢰한다.
- 서버 측에서 리슨하고 있는 포트 번호로 통신 요구가 온다.
서버는 문제가 없으면 열어도 된다는 응답을 한다. - 클라이언트 측도 확인했다는 메시지를 보내며, 이때 처음으로 통신용 가상 경로가 열린다.
6.6.5 데이터 보증과 재전송 제어
연결이 생성된 후에야 데이터 송수신이 시작되는데, TCP에는 데이터가 확실히 전달되도록 보증하는 기능이 있다.
데이터 손실 방지: 확인 응답과 재전송에 의해 구현된다(ACK).
데이터 순서 보증: 각 TCP 세그먼트에 시퀀스(sequence) 번호를 붙여서 구현한다.
6.6.6 흐름 제어와 폭주
데이터를 보내고 ACK를 기다리는 처리를 반복(동기 처리)하다 보면 시간이 많이 걸린다.
TCP는 어느 정도의 세그먼트 수라면 ACK를 기라디지 않고 전송하는 윈도우라는 개념을 가지고 있으며, ACK를 기다리지 않고 전송가능한 데이터 크기를 윈도우 크기라고 한다.
6.7 [레이어3] 네트워크 계층의 프로토콜 IP
TCP 세그먼트가 만들어지면 다음은 IP 처리가 시작된다.
6.7.1 IP의 역할
IP 주소를 이용해서 최종 목적지에 데이터 전송 – 라우팅(routing)
6.7.2 커널 공간의 IP 처리 흐름
TCP 세그먼트에 IP 헤더를 붙여서 IP 패킷을 생성한다. 대상 서버까지는 이 IP 패킷 형태로 네트워크를 경유해서 도달한다. IP 헤더에는 최종 목적지 서버의 IP 주소가 기록된다.
6.7.3 IP 주소를 이용한 최종 목적지로의 데이터 전송
IP 주소는 32비트로 표현된 숫자 집합이다.
사람이 읽기 쉽도록 8비트 단위로 마침표를 찍어서 표현한다.
IP 주소는 네트워크부와 호스트부로 나뉜다.
네트워크부는 어떤 네트워크인지를 가리키고,
호스트부는 해당 네트워크 내에 있는 컴퓨터(소유자)를 가리킨다.
네트워크부를 구분하기 위해 ‘/24’와 같은 CIDR(사이더) 표기를 사용한다.
또는 서브넷 마스크(subnet mask)라고 해서 255.255.255.0과 같이 표현하기도 한다.
IP 주소 중 호스트부의 비트가 모두 0인 것을 네트워크 주소, 모두 1인 것을 브로드캐스트(broadcast) 주소라고 한다.
6.8 [레이어2] 데이터 링크 계층의 프로토콜 이더넷
IP 패킷이 만들어지면 계속해서 링크 계층의 처리가 시작된다.
이더넷을 포함한 링크 계층 프로토콜의 역할은 ‘동일 네트워크 내(링크 내) 데이터 전송’이다.
이더넷은 동일 네트워크 내, 즉 자신이 포함된 링크 내에서만 데이터를 전송할 수 있다. 이때 사용되는 주소가 MAC(맥) 주소다.
6.8.2 커널 공간의 이더넷 처리 흐름
- IP 패킷에 이더넷 헤더와 푸터를 붙여서 이더넷 프레임을 만든다.
헤더에는 링크 계층 주소인 MAC 주소가 기록돼 있다.
목적지 IP 주소에 따라 라우팅 테이블을 이용해서 어떤 NIC에서 보내야 할지를 결정한다. - 송신 큐에 넣은 후 장치 드라이버 경유로 NIC에 전달한다.
- 커널 처리를 끝낸 프레임은 버스를 통해서 NIC로 보낸다.
- NIC에 연결된 장비로 프레임이 전송된다.