0. 학습 목표
- OSI 참조 모델과 인터넷 통신망 구조를 비교하여 설명할 수 있다.
- OSI 참조 모델의 7계층을 순서대로 나열할 수 있다.
- 계층화의 목적과 원칙을 설명할 수 있다.
- TCP/IP의 기본 구조를 설명할 수 있다.
- 인터넷 주소의 종류(클래스)를 설명할 수 있다.
1. 컴퓨터 통신망 구조의 개요
01) 컴퓨터 통신망 구조
- 네트워크 아키텍처
- 기본 뼈대를 이루는 컴퓨터 통신망의 핵심
- 눈에 보이는 뼈대가 아니라, 추상화된 약속들이 모여있는 것. 예를들어 데이터링크 계층은 데이터를 보내기 위해 어떤 약속들을 하는지를 모아놓은 것.
- 컴퓨터 통신망의 물리적 요소들과 기능, 구성, 동작 원칙, 절차, 통신 프로토콜 등을 위한 프레임워크
- IBM의 SNA, DEC의 DNA, Honeywell의 DSA
- 원래는 각 회사들이 자기 회사 안에서 통신하기 위해 사용되던 방식들.
- SMA (System Network Architecture)
- IBM 컴퓨터 간에 데이터 통신과 메시지 전송을 위해 설계된 폐쇄형 네트워크
- DNA (Digital Network Architecture)
- DNA (Distributed System Architecture)
02) 통신망 구조의 개요
- 초기에는 보안상 문제로 자원을 공유하지 않았지만 점차 사용자가 자원 공유의 이점을 발견 후 상호간의 접속을 자유롭게 할 수 있는 개방형 네트워크 아키텍처가 등장
- 개방형 네트워크 아키텍처
- OSI 참조 모델
- 인터넷 통신망 구조 (TCP/IP)
03) 개방형 구조 모델 비교

2. OSI 참조 모델
01) OSI 모델의 목적
목적
- ISO 7498 (1983년)
- 이기종 시스템간의 통신이 가능하도록 표준 제정
- mac, hp, ibm 등등 서로 다른 다양한 노트북 기기들이 서로 다른 컴퓨터이지만 데이터를 공유할 수 있도록 하려는 목적으로 "표준"을 설정함.
- 개방(형) 시스템: 적용 가능한 표준을 상호 인정하고 지원
OSI 참조 모델
- 우편 시스템

누군가 한국에서 영국에 있는 친구에게 편지를 보낼 때, 그저 우체통에 편지를 넣기만 하면 됩니다. 그 편지가 어떤 경로로, 어떤 수단을 통해 친구의 집 앞까지 도달하는지 우리는 정확히 모릅니다.(또 몰라도 괜찮습니다.) 이렇게 사용자가 내부 과정을 몰라도 되게 만드는 것을 컴퓨터 과학에서는 "투명성(transparency)"이라고 부릅니다. 여기서의 투명성은 내부 과정을 굳이 알 필요 없이, 사용자가 할 일만 하면 나머지는 시스템이 알아서 처리한다는 의미입니다.
우편 시스템에서는 각각의 역할(집배원, 트럭 운전사, 우체국 직원 등)과 기능이 명확히 정해져 있습니다. 이와 유사하게, 컴퓨터 네트워크에서는 이메일이나 다른 데이터가 송신자로부터 수신자에게 전송되기까지의 과정을 구성하는 여러 절차가 있습니다. 이러한 절차들을 체계적으로 정리한 것이 바로 컴퓨터 네트워크의 아키텍처입니다.
특히, 네트워크 통신을 위해 국제적으로 표준화된 모델인 OSI 7계층 모델은 이러한 통신 과정을 7개의 다른 계층으로 나눠서 설명합니다. 이 계층들은 각각 특정한 역할과 기능을 가지고 있으며, 이를 통해 데이터가 어떻게 전송되는지를 보다 명확하게 이해할 수 있게 해줍니다.
간단히 말해, 우리가 편지를 우체통에 넣는 것처럼, 컴퓨터에서 이메일을 보낼 때 우리가 해야 할 일은 그저 '보내기' 버튼을 누르는 것뿐입니다. 그 뒤의 복잡한 전송 과정은 컴퓨터 네트워크 아키텍처와 OSI 7계층 모델이 알아서 처리해 줍니다. 이렇게 사용자는 복잡한 내부 과정을 몰라도 되는 편리함을 누릴 수 있습니다.
02) OSI 모델의 계층
7계층의 OSI 참조 모델
중계 개방 시스템을 갖는 계층


- 구름 형태는 두개의 전송 단말을 연결하는 중간 노드들의 망을 의미.
두개의 개방 시스템 사이가 라인하나로 연결될 수도 있겠지만, 다른 중간노드들(리피터, 게이트웨어, 스위처)도 존재 할 수 있다. 중계 되는 중간 노드들도 뭘 써도 상관없도록, 어떤 시스템을 사용해도 좋도록 개발을 했다. 그래서 중계 "개방"시스템이라고 불림.
03) 각 계층이 필요한 이유
모듈러 설계방법(modular approach)

- 모듈러 설계방법(modular approach)
- 무전기(데이터 송수신 장치)를 예로 들면, 안테나를 통해 송신한 데이터를 어떻게 받아야하고 관리해야 하는지 기능별로 쪼개서 생각하는 것을 말한다.
- 방대한 포로토콜을 다루는 문제에 있어서도, 그 방대한 프로토콜들을 어떤 형태로든 구분해서 계층(모듈)으로 다루자는 modular approach개념을 도입해 본 것이다.
- 이때, 어떤 이유와 기준으로 해당 계층을 나눴는지에 대해 이야기해보자.
계층별 구분 이유
- 물리 계층: 종단 간을 연결하려면 다양한 물리적 매체를 사용하는 구조가 필요함
- 데이터 링크 계층: 전화 회선, 광섬유 등의 물리적 통신 매체를 사용할 경우에 서로 다른 데이터링크 제어 절차가 필요함
- 다 구리선(꼬임선 케이블)을 쓰는거면 몰라도, 어디서 어디는 꼬임선, 어디서 어디는 광섬유, 어디서 어디는 동축 케이블 쓰고, 이렇게 물리적 매체가 다 다를 때 그 상단에서 이것들을 컨트롤 해 동일한 효과가 나오도록 하는 데이터링크 제어절차가 필요함.
- 네트워크 계층: 전송 주체(송신자, 수신자) 사이에 중간 노드가 있는 경우에도 전송 주체 간의 연결 통로(네트워크 연결)를 제공하여야 함.
- 전송 계층: 발신지 시스템에서 목적지 시스템까지의 신뢰성 있는 데이터 이동을 제어할 필요가 있음.
- 세션 계층: 대화를 조직하고 동기화하거나 데이터 교환을 관리할 필요가 있음
- 표현 계층: 응용 프로그램의 구조화된 데이터를 표현하고 조정하는 기능이 필요함
- ex) IBM에서는 한 문자를 8비트로 쓰는데 상대방은 아스키코드를 사용해 (7비트 + 패리티 비트)로 사용하는 경우, 이를 표현하는 데이트 포맷을 어떻게 무난하게 전송해줄 것이냐의 문제. 이러한 문제는 프리젠테이션(Presentation), 즉 데이터를 어떻게 표현하느냐에 관련된 것. 문자일 때도 잇고, 몇개의 필드이거나 수치데이터(실수 값일 때 몇 바이트를 사용하느냐) 등등을 맞춰주는 것.
- 응용 계층: 응용 프로그램을 위한 프로토콜을 함께 관리할 필요가 있음.
- 실제로 내가 무슨 프로그램을 써서 저쪽과 통신할 것인가, 에 대한 문제.
04) 계층의 분리 원칙
- 너무 많은 계층으로 분리함으로써 각 계층에 대한 설명과 이들에 대한 조합이 필요 이상으로 많지 않아야 한다.
- 서비스의 양이 적고 경계를 중심으로 최소의 상호 작용이 일어나도록 경계를 정해야 한다.
- 수행하는 일의 측면에서나 필요로 하는 기술의 측면에 있어서 명백히 서로 다른 기능들을 다룰 수 있도록 계층을 설정한다.
- 비슷한 기능들은 같은 계층에 존재하도록 한다.
- 과거의 경험에 의해 성공적이라 판단되는 곳에 경계를 설정한다.
- 쉽게 세분화되는 기능을 하나의 계층으로 한다.
- 필요한 경우 표준화된 인터페이스를 가지 수 있는 곳에 경계를 설정한다.
- 데이터에 대한 조작, 즉 구문(syntax), 의미(semantic)등의 추상적 개념에 대해 서로 다른 수준을 필요로 하는 곳에서 계층을 설정한다.
- 각 계층은 단지 상위 계층과 하위 계층에 경계를 갖도록 한다. 즉, 다른 계층과는 전혀 무관하도록 한다.

- 맞닿아있는 계층끼리만 영향을 미치고, 그 외 계층에서는 영향을 미쳐서는 안된다.
- 위에서 아래는 요구(reqest)하고, 아래에서는 위로 서비스(service)한다고 호칭한다.
05) 캡슐화
- 캡슐화(Encapsulation)
- 데이터에 각 계층의 제어정보를 추가하는 것
- Service Data Unit + Protocol Control Information => Protocol Data Unit
- 위에서 전달받은 데이터(Service Data Unit) + 그 앞에 추가되는 헤더나 테일(Protocol Control Information) = Protocol Data Unit을 만들어서 아래층에 내려줌

AH(Application Header). A에서 계속 하위로 데이터를 전송하면서, Header가 계속 추가되어 데이터의 크기가 커진다. 가장 하위의 물리계층에서 실제로 데이터를 의미하는 부분은 작은 일부분이고, 그 외에는 오버헤드들이다. 이처럼 하위계층으로 내려가면서 계속 헤더와 테일을 붙이는 것을 캡슐화(Encapsulation)이라고 한다. 반대로, 이 헤더들과 테일을 떼가면서 최종적으로 필요한 데이터를 만들어가는 과정을 역캡슐화(Decapsulation)라고 한다.
3. 인터넷 통신망 구조(TCP/IP)
01) TCP/IP의 등장(역사)
- Internetworking Technology
- 네트워크들을 상호 연결하는 기술
- 서로 다른 네트워크에 연결되어 있는 컴퓨터 사이의 통신이 가능
- DoD(미국국방부) 산하기구인 ARPA(Advanced Research Project Agency)의 프로젝트
- Transmission Control Protocol/Internet Protocol
- TCP/IP Internet Protocol Suite
- 1970년대 Robert Kahn과 Vinton Cerf 등에 의해 개발
- 1982년 미군 컴퓨터 네트워킹의 표준으로 제정
02) TCP/IP 기본 구조
DoD모델 (DARPA 모델)

- OSI에서 물리계층이 빠져있음
- DoD는 4계의 계층으로 되어있음
- 핵심은 TCP/IP. 가장아래에서는 하드웨어 인터페이스가 위치하면서, 광케이블을 사용하거나 동축 케이블을 쓰느냐 하는 문제를 의미한다. TCP는 전송계층, IP는 인터넷 계층의 프로토콜. 연결지향형 전송, 비연결형 전송. 연결지향형 전송은 수신지와 송신지 사이에 연결을 먼저 설정해두고 회선을 설립한 후 데이터를 보내고 나서 연결을 해제하는 3개의 단계를 거친다. 따라서 데이터가 손실되거나 순서가 뒤바뀔 일이 없다. 그에비해 비연결형은 그냥 알아서 목적지를 쫓아 데이터를 보내는데, 없어질 수도 있고 순서가 바뀔수도 있다. 대신에 속도도 빠르고 구현이 쉽다. 이같은 연결형, 비연결형의 차이점이 TCP/UDP 선택으로부터 갈린다.
- ARP, RARP는 데이터링크 계층, 인터넷 계층에 걸쳐져 있다고 생각하는 것이 좋다.
TCP/IP 주요 특징
- 연결형 서비스 및 비연결형 서비스 제공
- 패킷 교환 (메시지를 일정 사이즈로 잘라서 동일하게 보내는 것)
- 동적 경로 할당 (그때그때 가장 traffic이 적은쪽으로 이동)
- 공통의 응용 프로그램 제공
- CASE(Common Application Service Element)
- 응용에 무관하게 개방 시스템 접속을 위한 방법을 제공함
- 어떤 응용 프로그램을 사용하든, 응용 프로그램과 무관하게 시스템 접속을 위해 필요한 응용프로그램들이 있는데, 그것을 모아놓은 것을 CASE라고 부른다.
TCP/IP 계층의 역할

- ARP, RARP는 데이터링크, 인터넷 계층 사이에 걸쳐있음.
- 응용계층에 포함되는 프로토콜. 이런게 잘 나옴
- 데이터링크 계층
- 네트워크 인터페이스
- device driver와 interface card로 데이터 통신 처리
- 대표적 프로토콜
- ARP(Address Resolution Protocol): [IP주소 -> 물리주소]
- IP주소를 주고 물리주소를 물을때, 이를 해결(Resolution)해주는 것
- RARP(Reverse ARP): [물리주소 -> IP주소]
- 물리주소를 주고 IP주소를 물을때, 역으로(Reverse) 이를 해결(Resolution)해주는 것
- 인터넷 계층
- 네트워크 상에서 패킷의 이동을 처리(패킷 라우팅 등)
- 대표적 프로토콜
- IP(Internet Protocol)
- ICMP(Internet Control Message Protocol)
- 키워드는 Control Message. IP 프로토콜을 이용해 Datagram 서비스를 진행하는 경우 비연결형 데이터전송이 이루어지는데, 그때 오류 발생 시 Router나 송신자에게 해당 오류여부 제어 메시지(Control Message)를 Report해주는 프로토콜.
- IGMP(Internet Group Management Protocol)
- 전체 노드가 아니라 특정 노드 그룹에만 데이터를 보내주는 것

- unicast: 한명에게만 데이터 전송
- broadcast: 전체에게 데이터 전송
- multicast: 전체 중, 특정 몇몇 그룹에게만 데이터 전송
- 전송 계층
- 호스트 컴퓨터 사이의 데이터 전송 서비스
- 대표적 프로토콜
- TCP(Transmission Control Protocol)
- UDP(User Datagram Protocol)
- 응용계층
- 응용 프로세스를 위한 프로토콜
- 대표적 프로토콜
1) TCP 이용: FTP, SMTP(Simple Mail Transfer Protocol), Telnet 등
2) UDP 이용: TFTP(Trivial FTP), DNS(Domain Name System), BOOTP(Bootstrap Protocol) 등
3) IP 직접 이용: traceroute 프로그램
4) ICMP 직접 이용: ping 프로그램
03) 인터넷 주소
호스트 식별
- 인터넷에 연결되어 있는 호스트 식별
- 3가지 종류의 주소
- 물리주소
- 하나의 네트워크 내에서 호스트를 식별하는 물리적 하드웨어 주소로서 네트워크 인터페이스 주소
- 인터넷 주소 (IP 주소)
- 서로 다른 네트워크 간에 호스트를 식별하는 논리 주소
- 포트 주소
IP 주소(IPv4)

- 클래스A: 첫 비트가 0인게 특징. 즉, "IP주소입니다. 근데 제일 앞이 0입니다" = 클래스A
- 1바이트의 첫
0
으로 클래스를 구분하고, 나머지 7bit로 2의 7승개의 네트워크를 구분한다.
- 그리고 2의 7승개의 네트워크에 대해 각 네트워크에 연결되어있는 호스트의 개수는 나머지 2~4 Byte를 사용한다.

- 클래스B, 클래스C: 네트워크가 너무 많아서 7비트로 식별이 힘든 경우, 네트워크 식별자를 더 길게 둘 수 있는데, 이런경우 클래스B,C를 사용 가능하다.
- 네트워크 식별자가 C가 더 길어서 더욱 많은 길이가 필요할때는 클래스C를 사용
- 첫번째 비트는 둘다 1이고, 두번째 비트로 두 클래스를 구분한다.
- 클래스D: 멀티캐스팅, IGMP에서 사용되는 클래스
- 클래스E: 아직 어디에 쓸지 결정 안된(예약)된 상태

- IPv6: 16비트를 써서 ip를 구분하는 것. 즉, 2의 128승개의 주소가 사용 가능하다. 전세계의 휴대폰을 포함한 인터넷에 접속 가능한 모든 단말기에 각 주소를 할당하려고 하니, ip주소 고갈현상이 나타났다. 특히 IoT로 모든 물건에 인터넷이 붙은 사물인터넷을 위해 더 많은 IP주소가 필요한 상황. 실제 고갈되기 전에, IPv6으로 전환 중.
포트 주소
- 포트번호(port number)
- TCP 및 UDP에 의해 응용 프로그램을 식별
- 2바이트 (16비트)로 구성

- FTP 서버(TCP 21번), TFTP 서버(UDP 69번), Talnet 서버(TCP 23번), SMTP 서버(TCP 25번), X.400서버(TCP 103번)
04) 캡슐화

- 캡슐화(Encapsulation)
- 데이터의 각 계층의 제어정보를 추가하는 것
- Service Data Unit + Protocol Control Information -> Protocol Data Unit
- 역캡슐화(Decapsulation)
- 수신측 시스템의 해당 계층에서 수행되는 캡슐화의 반대 과정
- 물리 계층 이외의 모든 계층에서 수행됨
Reference