네트워크가 컴퓨터끼리 선을 이어 주는 것만으로는 부족하다. 실제로 대화하는 것은 컴퓨터 안의 응용 프로그램이라서, 두 프로그램 사이에 전용 통로(채널)가 있는 것처럼 보이게 해 줘야 한다. 목표는 멀리 있는 상대와 주고받아도 같은 컴퓨터 안에서 주고받는 것처럼 느끼게 하는 것이다. 그런데 실제 망에서는 비트가 깨지고 패킷이 버려지고 순서가 뒤바뀌므로, 누군가 그 차이를 메워야 한다.
예시로 보기
노트북의 웹 브라우저가 서버의 웹 서버 프로그램과 대화한다. 노트북에는 메신저와 음악 앱도 돌고 있다. 인터네트워크가 해 주는 일은 노트북과 서버라는 호스트 사이를 잇는 것까지다. 브라우저가 원하는 것은 자기와 웹 서버 사이의 통로다. 망을 구름으로 그리면, 구름을 가로질러 두 프로그램을 곧장 잇는 선이 이 통로다.
실행 중인 프로그램을 프로세스라 부르고, 이 선을 채널이라 부른다. 채널을 쓰는 응용은 망 안의 경로가 어떤지, 링크가 몇 개인지 몰라도 된다. “상대 프로세스에게 보낸다”만 알면 된다.
flowchart LR
subgraph L["노트북"]
B["웹 브라우저"]
M["메신저"]
A["음악 앱"]
end
subgraph S["서버"]
W["웹 서버 프로그램"]
end
L === NET(("인터네트워크")) === S
B -.-|"채널"| W
굵은 선은 인터네트워크가 잇는 호스트 사이의 연결이다. 점선은 그 위에 만든 브라우저와 웹 서버 사이의 통로다. 같은 노트북의 메신저와 음악 앱은 이 통로를 쓰지 않는다.
실제 망에서 생기는 일과 응용의 기대를 나란히 놓으면 메워야 할 차이가 보인다.
| 응용이 기대하는 것 | 망에서 실제로 생기는 일 |
|---|---|
| 보낸 비트 그대로 | 비트 수준 오류 (전자기 간섭·방해) |
| 빠짐없이 | 패킷 수준 오류 (혼잡으로 버려짐), 링크·노드 고장 |
| 곧바로 | 메시지 지연 |
| 보낸 순서대로 | 순서가 바뀐 전달 (out-of-order) |
| 둘만 알게 | 제삼자의 도청 |
정의
네트워크의 통신 서비스는 호스트 사이의 연결을 프로세스 사이의 통신 형태로 바꿔 주는 것이다. 즉 네트워크는 프로세스와 프로세스 사이의 채널을 지원한다. 원격 통신이 로컬 통신과 구별되지 않을 만큼 되면 충분한 서비스로 본다. 이를 네트워크 투명성이라 한다. 망이 투명한 유리처럼 있어도 없는 것처럼 느껴진다는 뜻이다1.
채널은 한 컴퓨터의 프로그램이 보낸 메시지를 다른 컴퓨터의 프로그램에게 건네주는 통로다. 실제 선이 아니라 그렇게 보이게 만든 통로(추상적 통로)다.
기호로 쓰면. 서로 다른 호스트에서 도는 프로세스 \(\pi_1\)과 \(\pi_2\)(파이 1, 파이 2) 사이의 채널은, \(\pi_1\)이 보낸 메시지를 \(\pi_2\)에게 전달하는 추상적 통로다. 채널이 어떤 성질(오류 없음, 빠짐없음, 순서 유지, 비밀 유지 등)을 약속하는지는 서비스마다 다르다2.
아래의 망이 주는 것과 채널이 약속하는 것 사이의 거리를 메우는 일이 통신 기술의 핵심이다. 이 일은 통신망의 협조와 호스트 소프트웨어가 함께 해서 완성한다.
| 채널이 약속할 수 있다 (위에서 메워서) | 아래 망만으로는 보장하지 않는다 |
|---|---|
| 오류 없는 전달, 빠짐없는 전달, 순서대로 전달 | 비트·패킷 오류, 손실, 순서 |
| 상대만 읽을 수 있는 전달 | 도청 방지 |
| 지연의 상한2 |
연결
- 선수: 인터네트워크(호스트 사이의 연결)
- 이 차이를 층으로 나눠 메우는 방법: 계층화. 네트워크를 4층으로 나눈 그림에서는 “Process-to-process channels”가 한 층이다.
- OSI에서 프로세스 사이의 신뢰성 있는 전달은 트랜스포트 계층이 맡는다: OSI 참조 모델
- 패킷 수준 오류의 원인인 혼잡: 패킷 스위칭
확인 문제
C1 네트워크가 응용에게 제공해야 하는 통신 서비스를 한 문장으로 쓰고, 네트워크 투명성이 무엇인지 쓰라.
답: 호스트 사이의 연결을 프로세스 사이의 통신(채널) 형태로 바꿔 준다. 네트워크 투명성은 원격 통신이 로컬 통신과 구별되지 않아서 응용이 네트워크의 존재를 느끼지 않는 상태다.
흔한 오답: “호스트끼리 연결해 준다”에서 멈추는 것. 통신의 주체는 호스트가 아니라 응용 프로그램(프로세스)이다.
C2 다음은 위 표의 통신 장애 중 무엇인가? (a) 번개로 케이블의 비트가 뒤집혔다 (b) 라우터 버퍼가 넘쳐 패킷이 버려졌다 (c) 두 패킷이 서로 다른 경로로 가서 뒤 패킷이 먼저 도착했다 (d) 카페 와이파이에서 옆 사람이 오가는 데이터를 엿봤다
답: (a) 비트 수준 오류 (전자기 간섭). (b) 패킷 수준 오류 (혼잡). (c) 순서가 바뀐 전달. (d) 제삼자의 도청.
흔한 오답: (b)를 링크 고장으로 보는 것. 링크는 멀쩡하고 노드의 저장 공간이 모자란 것이다.
C3 장애 극복을 통신망 안에서만 끝내지 않고 호스트 소프트웨어가 함께 맡는 이유는 무엇인가?
답: 응용이 무엇을 기대하는지(예: 빠짐없음이 중요한지, 빠름이 중요한지)는 양 끝의 호스트만 안다. 망 안의 노드가 링크마다 완벽하게 전달해도, 노드 자체가 고장 나거나 버퍼가 넘치면 데이터는 잃는다. 그래서 끝까지 제대로 갔는지는 결국 끝의 호스트가 확인해야 한다3.