Chapter 2. The OSI Model and the TCP/IP Protocol Suite

2.1 Protocol Layers

- 마리아와 앤, 두 개의 엔티티가 있고 커뮤니테이션을 원한다
- 마리아와 앤이 사용하는 언어는 다르지만 만나서 커뮤니케이션을 할 수 있는 사인(프로토콜)이 존재한다
- 복잡하지 않은 커뮤니케이션 방법

- 마리아와 앤이 만날 수 없는 상황이 됐을 때, 커뮤니케이션은 복잡해진다
- 각 언어를 번역기를 통해 코드로 만들고, 그 코드를 편지로 전달
- 커뮤니케이션이 단순하지 않을 땐, 커뮤니케이션 과정을 여러 레이어로 나누게 된다
- 각 레이어는 커뮤니케이션을 위한 프로토콜이 존재
2.2 The OSI Model
- ISO(International Standards Organization)
- 1947년에 설립된 전세계적인 국제 표준화 기구
- open system
- 서로 다른 두 시스템이 아키텍처에 상관없이 통신할 수 있게 해주는 포로토콜의 집합
- OSI(Open Systems Interconnection) model
- 네트워크 통신의 모든 부분을 다루는 ISO 표준
- 1970년대 후반에 처음 소개
- 서로 다른 두 시스템이 하드웨어, 소프트웨어의 변경없이 원활하게 통신할 수 있게 하는 것이 목적
- 모델 자체는 프로토콜이 아니다
- OSI 스택에 맞춰 프로토콜을 만드는 것을 의도

- 7개의 레이어로 이루어진 프레임워크
- 각 레이어는 네트워크 상의 정보 전달 프로세스 중 한 부분을 정의한다
Layered Architecture

- 디바이스 A에서 B로 레이어를 거치며 메시지를 전달
- 중간 노드에선 1, 2, 3 레이어만 거쳐간다
- 데이터 전달 과정을 관련된 네트워크 기능들끼리 레이어로 나눴다
- 각 레이어의 기능은 다른 레이어와 구별된다
- 레이어는 바로 위의 레이어에게 서비스를 제공하고, 바로 아래의 레이어의 서비스를 이용한다
- 다른 시스템의 x번째 레이어는 오직 다른 시스템의 x번째 레이어와 커뮤니케이션한다
- 레이어끼리 커뮤니케이션하는 규칙과 방법 = 프로토콜
Layer-to-Layer Communication
- 메시지를 보내면 레이어 7에서 레이어 1로 내려온다
- 레이어 1에서 전체 패키지는 전송할 수 있는 형태로 변환된다
- 메시지를 받으면 레이어 1에서 레이어 7로 올라간다
- Interfaces between Layers
- 인접한 레이어 사이의 데이터 이동이 가능한 이유는 인터페이스
- 인터페이스는 레이어가 제공해야할 정보와 서비스를 정의
- 레이어가 무슨 서비스를 제공하는지 알고있으면, 구체적인 구현은 주변 레이어의 변경없이 수정 가능
- Organization of the Layers
- 7개의 레이어는 세 개의 서브그룹으로 묶어서 생각할 수 있다
- 레이어 1, 2, 3 : 네트워크 지원
- 디바이스 사이 데이터 이동의 물리적인 부분을 처리
- 레이어 5, 6, 7 : 유저 지원
- 관련없는 소프트웨어 시스템 사이의 상호 운용성 제공
- 레이어 4 : 위 두 개의 서브그룹을 연결
- 아래 서브그룹에서 전송한 것이 위 서브그룹이 사용할 수 있는 것을 보장
- 위쪽은 거의 소프트웨어로 구현, 아래쪽은 하드웨어와 소프트웨어의 조합, 레이어 1은 거의 하드웨어

- 프로세스는 레이어 7에서 시작해서 아래 레이어로 순차적으로 내려간다
- 각 레이어에서 데이터 유닛에 헤더 추가
- 레이어 2에선 트레일러가 추가될 수 있다
- 레이어 1에 데이터가 전달되면 전기적 신호로 변환 후 물리적 링크로 전달
- 레이어 1에 전기적 신호가 도착하면 디지털 신호로 변환
- 데이터는 레이어를 올라가면서 전달
- 헤더와 트레일러를 붙였던 레이어에 도착하면 그것을 제거 후 그 레이어가 해야할 일을 수행
- 레이어 7에 메시지가 도착하면 애플리케이션이 사용 가능한 형태
Encapsulation
- 위의 레이어에서 내려온 패킷 전체를 캡슐화한 후 밑의 레이어에 전달
- 레이어 N의 패킷은 레이어 N+1의 패킷을 포함
Layers in the OSI Model

- Physical Layer
- Data Link Layer
- network layer로부터 받은 비트를 프레임으로 만든다
- hop과 hop 사이의 신뢰성 있는 연결 책임
- 두 시스템 사이의 패킷 전달
- Network Layer
- 여러 네트워크를 거쳐 패킷을 최초 출발지에서 최종 목적지로 전달하는 것을 책임
- 두 시스템이 같은 링크로 연결 → network layer가 필요하지 않다
- 두 시스템이 다른 네트워크에 존재한다 → network layer가 필요하다
- Transport Layer
- 프로세스와 프로세스 사이의 전체 메시지 전달을 책임
- 메시지의 신뢰성을 보장하기 위해 순서 확인과 에러 컨트롤, 흐름 제어 등을 수행
- Session Layer
- 네트워크 통신 컨트롤러
- 시스템 사이의 상호작용 세션을 연결, 유지, 동기화
- Presentation Layer
- Application Layer
- 유저가 네트워크에 접속할 수 있게 해준다
- 유저 인터페이스 제공
- 메일, 파일 전송, 데이터베이스 관리 등의 네트워크 서비스 지원
2.3 TCP/IP PROTOCOL SUITE
- TCP/IP protocol suite이 OSI model보다 먼저 등장 → 레이어가 정확하게 매치되지 않는다
- 초기에는 4개의 레이어로 구성됐지만 현재는 5개의 레이어로 구성

Comparison between OSI and TCP/IP Protocol Suite

- TCP/IP Protocol suite에는 session, presentation 레이어가 없다 → application 레이어에 세 개의 레이어를 섞었다
- session, presentation 레이어가 없는 이유
- TCP/IP의 transport layer에 하나의 프로토콜이 더 추가됐는데 그것의 기능이 session layer의 기능과 겹친다
- application 레이어의 소프트웨어는 session과 presentation의 기능을 포함하여 개발 가능
Layers in the TCP/IP Protocol Suite
- 링크 : 컴퓨터들이 서로 통신할 수 있도록 연결된 네트워크
- 다른 링크들은 라우터나 스위치로 연결될 수 있다

- 위 그림은 6개의 링크, 4개의 라우터로 구성된 인터넷
Physical Layer

- TCP/IP는 physical layer를 위한 어떤 프로토콜도 정의하지 않는다 → 모든 프로토콜 지원
- 두 개의 홉 또는 노드 사이의 비트 전달을 담당
- 통신 단위는 하나의 비트
- 두 노드 사이의 연결이 성립되면 비트 스트림이 둘 사이에 흐른다
- 노드가 n개의 링크로 연결되면, n개의 physical-layer protocol이 필요 → 각 링크에 맞는 프로토콜로 비트를 전송
Data Link Layer

- data link layer에 대해서도 어떤 프로토콜도 정의돼 있지 않다 → 모든 프로토콜 지원
- physical layer와 마찬가지로 두 개의 홉 또는 노드 사이를 담당
- 통신 단위는 프레임
- network layer로부터 받은 데이터를 헤더, 트레일러와 함께 캡슐화 → 프레임
- 헤더는 프레임의 출발지와 목적지를 포함
- 출발지 : 응답, 일부 프로토콜의 요구를 승인을 위해 필요
- 목적지 : 여러 개의 노드가 링크로 연결돼 있기 때문에 필요
- 링크에 따라 프로토콜이 다르거나 다른 포맷의 프레임 요구할 수 있다 → 프레임을 받으면 다른 링크로 보낼 때 새로운 프레임을 만들어서 보낸다 → 각 링크의 프레임은 다를 수 있다
- 두 노드 사이의 data link를 통한 통신은 논리적 → 물리적으로 프레임이 움직이진 않는다 → data link 입장에서는 두 노드 사이의 프레임을 직접 보낸다고 생각
Network Layer

- TCP/IP에선 network layer에 Internet Protocol(IP)를 제공한다
- IP는 데이터그램이라는 패킷으로 데이터를 전송
- 데이터그램은 여러 라우터들을 거칠 수 있고 순서가 바뀌거나 중복될 수 있다
- IP는 경로를 추적하지 않고 목적지에 도착한 데이터그램에 대해 신경쓰지 않는다
- data link, physical layer는 node to node 통신이지만 network layer는 end to end 통신 → 컴퓨터 A에서 출발한 데이터그램 = 컴퓨터 B에 도착한 데이터그램
- 라우터의 network layer는 가장 좋은 경로를 찾기 위해 패킷의 출발지와 목적지를 확인할 수 있지만 패킷의 내용은 수정 불가
- 논리적 통신이 이루어진다 → network layer 입장에선 데이터그램을 직접 보내고 받는다고 생각, 실제론 데이터의 물리적 이동은 physical layer에서 이루어진다
Transport Layer

- network layer는 모든 노드가 사용하지만 transport layer는 두 개의 end computer만 사용
- network layer는 각각의 데이터그램 전송을 책임지고 transport layer는 전체 메시지 전송을 책임
- transport layer가 책임지는 전체 메시지 = 세그먼트, 유저 데이터그램, 패킷
- 세그먼트는 거의 없거나 10개 정도의 데이터그램으로 구성
- 세그먼트는 데이터그램으로 쪼개지고 각각의 데이터그램은 network layer로 전송
- 데이터그램마다 다른 경로를 가지므로 순서가 바뀌어 도착하거나 중간에 잃어버릴 수 있다 → transport layer는 모든 데이터그램이 도착할 때 까지 기다리고 올바르게 조합하여 세그먼트로 만든다
- transport layer 또한 논리적 통신이므로 이 레이어는 서로 세그먼트를 전달하여 통신한다고 생각, 실제론 physical layer에서 비트를 전달해 통신
- User Datagram Protocol(UDP)과 Transmission Control Protocol(TCP)을 사용
- 최근 Stream Control Transmission Protocol(SCTP) 등장
Application Layer

- TCP/IP의 application layer는 OSI model의 session, presentation, application의 조합과 같다
- 유저가 인터넷 서비스에 액세스할 수 있도록 해준다
- 많은 프로토콜이 존재 : 전자메일, 파일전송, WWW 등
- end to end 통신 → 컴퓨터 A의 메시지는 변경되지 않고 컴퓨터 B로 전달
2.4 ADDRESSING

- TCP/IP 프로토콜을 사용하는 인터넷은 네 단계의 주소 사용
- 각 주소는 TCP/IP의 하나의 레이어에 대응
Physical Addresses
- 링크 주소라고도 한다
- LAN 또는 WAN에 의해 정의된 노드의 주소
- data link layer가 사용하는 프레임에 포함
- 링크에 대한 권한 존재
- 네트워크에 따라 크기와 형식이 다양
- Ethernet은 network interface card(NIC)의 6-byte (48-bit) 물리 주소 사용

- 물리 주소가 10인 노드가 물리 주소 87인 노드에게 프레임을 전송
- 두 노드는 하나의 링크(LAN)으로 연결돼 있다
- 프레임의 헤더에 물리 주소 존재
- 대부분의 data link protocols의 헤더에 목적지 주소가 출발지 주소보다 먼저 온다
- 프레임이 LAN에 퍼지면, 물리 주소가 87이 아닌 컴퓨터는 목적지를 확인한 후 프레임을 버린다
- 물리 주소가 87인 컴퓨터는 프레임의 물리 주소가 자신의 물리 주소와 같은 것을 확인한 후 헤더와 트레일러를 버리고 데이터를 위쪽 레이어에 전달

- 대부분의 LAN에서 48-bit 물리 주소 사용 → 12개의 hexadecimal
- 각 byte는 콜론으로 구분
Logical Addresses
- 물리적으로 연결된 네트워크으로부터 독립적으로 통신을 원한다 → 속해 있는 물리적 네트워크와 상관없는 호스트 고유의 주소가 필요 → 논리 주소 등장
- 현재 인터넷의 논리 주소는 32-bit
- 인터넷에 연결된 고유한 호스트 정의 가능 → 인터넷에서 공식적으로 접근 가능한 호스트들은 같은 IP를 가질 수 없다

- 세 개의 LAN을 연결하는 두 라우터로 구성된 인터넷
- 각 디바이스는 논리 주소와 물리 주소를 소유
- 대부분의 프로토콜에서 논리 주소의 출발지가 목적지보다 먼저 온다 (물리 주소와 반대)
- network layer로 패킷을 전달하기 전에 다음 홉의 물리 주소를 알아야한다
- 라우팅 테이블로 다음 홉의 논리 주소를 알아낸다
- Addressing Resolution Protocol(ARP)로 다음 홉의 논리 주소에 대응되는 물리 주소를 알아낸다
- 물리 주소를 data link layer에 전달하면 물리 주소의 출발지와 목적지를 포함하여 캡슐화
- 프레임을 LAN 1의 모든 노드에 전파 → 라우터 1을 제외한 모든 노드는 프레임을 버린다
- 라우터 1이 패킷의 논리 주소를 확인 → 목적지 주소가 자신과 다른 것을 확인 → 다음 홉의 물리 주소를 알아내고 data link로 전달
- 물리 주소는 홉을 지날 때 마다 바뀌지만 논리 주소는 변하지 않는다
Port Addresses

- 현대 컴퓨터는 동시에 많은 프로세스가 돌아간다 → 데이터가 목적지 호스트에 도착해도 끝이 아니라 프로세스를 찾아서 데이터를 전달해야 한다 → 프로세스를 찾을 수 있는 주소 필요 → TCP/IP에선 16-bits의 포트 주소 사용
- sender의 포트 주소가 a인 프로세스는 receiver의 포트 주소가 j인 프로세스에게 데이터를 전달
- 두 컴퓨터가 같은 프로그램을 사용하더라도 포트 주소가 다를 수 있다
- transport layer는 application layer에서 전달된 데이터에 출발지, 목적지 포트 주소를 추가하여 캡슐화
- data link의 헤더는 hop을 지날 때 마다 바뀌기 때문에 그림에서 H2로 표현
- 논리 주소와 포트 주소는 변하지 않는다

- 포트 주소는 16-bit 주소로, 하나의 십진수 표현
Application-Specific Addresses
- 어떤 앱들은 특정 앱에 맞춰 디자인된 유저 친화적인 주소를 사용
- e-mail, Universal Resource Locator(URL) 등등