OSI 7 Layers란?
OSI 프로토콜
은 국제표준화기구(International Organization for Standardization, ISO)에서 만든 프로토콜 입니다. OSI 프로토콜은 서로 다른 컴퓨터 간의 통신 기능을 7 Layer로 구분하여 각 계층마다 표준화된 서비스와 프로토콜을 규정한 모델이고 우리가 꼭 알아두어야 할 프로토콜입니다. 하지만 실제로는 사용되지 않고 이론적으로만 우리가 참조하고 공부하는 모델이고 그래서 참조 모델이라고도 부릅니다.
전 세계에서 가장 많이 사용하는 프로토콜은 TCP/IP 프로토콜
이고 이 프로토콜은 표현 계층과 세션 계층이 응용(Application) 계층 하나로 합쳐져있습니다.
네크워크를 계층으로 나눈 이유?
네트워크는 많은 요소들로 구성되어 복잡합니다. 그래서 OSI 및 TCP/IP 프로토콜은 각각의 계층별로 기능이 정의되어 있고 독립적으로 구현이 되어있습니다. 그러므로, 한 계층의 구현이 변경된다고해도 다른 계층과 시스템에는 영향을 주지 않습니다. 그래서 독립적이라는 특징 덕분에 네트워크 통신에 대한 관리를 편하게 하는 것에 이점을 가지게 해줍니다. (예를들면, 통신하면서 문제가 발생하면 그 문제가 어떤 계층의 문제인지 정의할 수 있습니다.)
OSI 7 Layers 구조
캡슐화(Encapsulation)
캡슐화(Encapsulation)
는 출발지(Source) 컴퓨터에서 데이터를 보낼 때 응용 계층 -> 물리 계층으로 내려가면서 목적지(Destination)에 도달하게 하기 위해 자신의 계층에서 필요한 정보들을 header에 계속 덧붙이는 과정입니다.
2, 3, 4 계층에서 캡슐화에 대한 예시를 들면 아래와 같습니다.
전송 계층
-> 데이터가 원하는 프로세스에 도착을 해야하는데 데이터가 호스트까지는 잘 도착했다고 하더라도 그 호스트에는 여러개의 프로세스가 존재할 것이기 때문에 어떤 프로세스에 도착해야 하는지 정보가 필요합니다. 그래서 결국, 프로세스를 구분하는 Process number 정보가 필요하고 이 number를 포트(Port) 번호라고 합니다. 즉, Transport 계층에서 header에는 포트 번호가 추가됩니다.
네트워크 계층
-> 데이터를 목적지 호스트까지 찾아가게 해야하는데 호스트까지 찾아가려면 라우팅(routing)을 해야하므로 목적지 주소가 필요합니다. 네트워크 레이어에 해당하는 주소가 IP 이므로 IP 주소가 header에 추가 됩니다.
데이터링크 계층
-> 데이터를 인접한 시스템(노드)로 전송시켜야 하므로 Wifi를 사용한다면 Wifi 모뎀의 MAC 주소, Ethernet을 사용한다면 Ethernet LAN카드의 MAC 주소가 header에 추가됩니다.
역캡슐화(Decapsulation)
역캡슐화(Decapsulation)
는 목적지(Destination) 컴퓨터에 도착한 데이터를 물리(Physical)계층부터 각각의 계층에서 데이터가 이상이 없는지 확인하고 하나씩 header를 제거하면서 응용(Application) 계층으로 올려보내는 과정입니다.
2, 3, 4 계층에서 역캡슐화에 대한 예시를 들면 아래와 같습니다.
예를 들면, 데이터링크 계층
에서는 Wifi 모뎀 주소를 확인하고 header를 제거하고 네트워크 계층
에서는 IP주소를 확인하고 헤더를 제거하고 전송 계층
에서는 포트(Port) 번호를 확인하고 헤더를 제거합니다. 결국 목적지의 Application에는 원본 데이터만 전달이 되는 것 입니다.
1 계층 - 물리 계층(Physical Layer)
물리 계층(Physical Layer)
은 두 시스템 간에 데이터가 전송되는 전기적, 기계적, 기능적 특성을 정의합니다.
물리 계층의 특성은 데이터 링크 계층에서 전송한 0과 1로 구성된 비트(bit)열의 데이터(프레임)을 받아서 물리적 매체를 통해 전기 신호로 변환한 후 전송 매체를 통해 다른 시스템에 보냅니다. 그러면 수신측의 물리 계층은 전기 신호를 0과 1로 구성된 비트열로 복원하여 데이터 링크 계층에 전송합니다.
LAN 카드, 허브, 라우터, 케이블 등의 물리적인 것, 그리고 데이터 전송에 사용하는 전압이 물리 계층에 속합니다.
컴퓨터는 어떻게 0과 1의 데이터를 어떻게 전기신호로 변환할까?
컴퓨터에는 기본적으로 네트워크를 통해 데이터를 송수신 할 수 있도록 메인보드에 내장형 LAN 카드를 가지고 있습니다. 그래서 0과 1로 이루어진 데이터가 컴퓨터 내부의 LAN 카드로 전송되면 LAN 카드는 0과 1을 전기신호로 변환합니다.
허브란?
허브는 리피터 허브라고도 부르며 통신하는 통로인 포트가 여러개이므로 여러 컴퓨터와 통신할 수 있는 접속 장치입니다. 허브는 일그러진 전기 신호를 복원하고 증폭시키며, 컴퓨터에서 보낸 전기 신호가 허브에 도착하는 동안 잡음의 영향으로 파형이 변경되기도 하는데 이러한 파형을 정상적으로 되돌립니다.
허브
는 특정 포트로부터 데이터를 받으면 그 데이터를 해당 포트를 제외한 나머지 포트로 전송하는 특징이 있습니다. 이러한 특성 때문에 더미 허브라고 불리기도 하는데 다른 포트에 불필요한 데이터가 전송되어 비효율적이기 때문에 이를 해결하기 위해 데이터 링크 계층에서 동작하는 스위치가 등장하게 되었습니다.
2 계층 - 데이터 링크 계층(Datalink Layer)
데이터 링크 계층(Datalink Layer)
은 네트워크를 통해 데이터를 전송하는 전송로 역할을 합니다. 즉, 라우터들 사이의 네트워크 링크에서(hop-by-hop) 데이터 전송이 잘 이루어지도록 관리하는 계층 입니다. 데이터 링크 계층에서는 비트를 프레임(Frame)
이라는 논리적 단위로 구성합니다.
네트워크 유형에 따라 프레임의 헤더와 트레일러에 들어가는 정보는 다르지만, 일반적으로 프레임(Frame)
의 헤더에는 전송하려는 데이터에 인접한 시스템(노드)의 주소인 MAC 주소가 더해집니다. 이 주소는 최종 수신지의 주소가 아니라 전송되는 다음 노드의 주소입니다. 네트워크에서는 여러 개의 노드가 있으며 노드간의 통신을 통해 최종 수신지로 데이터가 전송됩니다. 이웃한 네트워크 요소들 간의 데이터 전송을 hop-by-hop 이라고도 부릅니다.
또한, 프레임의 트레일러에는 물리 계층에서 발생하는 에러를 검출하고 복구하는 체크섬(Checksum), CRC(Cyclic redundancy check) 등의 에러 제어 기능, 과도한 데이터를 한 번에 전송하지 않도록 데이터의 양을 조절 할 수 있는 동기화(synchronized), 흐름 제어 정보 등을 포함하며 합니다.
-> 프레임(Frame)
: 헤더(출발지 주소 + 인접 노드의 MAC 주소) + 네트워크 계층의 데이터 + 트레일러(제어 정보)
데이터 링크 계층은 시스템 간의 오류 없이 데이터를 전송하기 위해 네트워크 계층으로 받은 데이터 단위(패킷)를 프레임(Frame)으로 구성하여 물리 계층으로 전송합니다. 즉, 네트워크 계층으로부터 데이터 단위를 받아 MAC 주소와 제어 정보 같은 의미 있는 비트를 시작 부분과 끝 부분에 추가합니다.
요약하자면 데이터 링크 계층의 기능은 아래와 같습니다.
주소 지정
-> 이 계층에서 데이터에 추가된 프레임(Frame)의 헤더(header)에는 데이터가 지나온 노드와 다음 노드의 주소가 포함됩니다. 이 주소를 MAC 주소라고 합니다.
순서 제어
-> 데이터를 순차적으로 전송하기 위해 프레임 번호 부여 기능을 수행하고 수신 노드에서 식별 번호를 추가하여 프레임의 순서를 제어합니다.
흐름 제어
-> 한 번에 전송할 수 있는 데이터의 양을 제어하며 연속으로 프레임을 전송할 때 수신 여부를 확인하는 기능을 수행합니다.
오류 처리
-> 체크섬(Checksum) 등의 에러 검출 기능과 에러 정정 기능을 수행하며 오류가 발생한 경우 프레임의 재전송을 요구할 수 있습니다.
프레임(Frame)
-> 데이터를 전송할 때 처리가 쉽도록 프레임 단위로 전송합니다.
동기화
-> 프레임의 헤더에는 수신 측에 프레임이 도착했음을 알리는 비트가 존재하며, 트레일러에는 에러를 제어하는 비트와 프레임의 끝을 나타내는 비트가 존재합니다.
데이터 링크 계층 링크의 두 종류
point-to-point 방식
-> PPP, Ethernet 스위치와 호스트 사이의 point-to-point
Broadcast(매체를 공유하는) 방식
-> 케이블형 Ethernet, 무선 LAN (Wifi, 802.11)가 있습니다.
point-to-point 방식과는 다르게 Broadcast 방식일 경우 충돌이 일어날 가능성이 존재하므로 충돌을 방지하기 위한 분산 알고리즘 및 프로토콜을 사용해서 특정 노드가 언제 전송할 것인가를 결정해줍니다.
충돌을 방지하기 위한 프로토콜의 종류로는 채널 분할(channel partitioning), 랜덤 접속(random access), 순번(taking turns) 프로토콜이 존재합니다.
MAC(Multiple Access Control) 주소
MAC 주소
는 데이터 링크 계층에서 사용하는 주소입니다.
네트워크 계층의 IP 주소와는 다르게 네트워크 인터페이스 카드(LAN or 모뎀)에 하드웨어적으로 찍혀서 생산되기 때문에 변경할 수 없는 물리적인 주소입니다. 그러므로, MAC은 두 개 이상의 주소가 존재할 수 없는 Unique한 주소입니다.
MAC 주소 표기법
MAC 주소는 대부분 48 bit의 주소를 사용합니다. 일반적으로 16진수로 표기하기 때문에 12개의 4bit 숫자로 표기합니다.
e.g) 1A-3B-4C-5D-80-BD
데이터 링크 계층의 주소 이름이 MAC인 이유
데이터 링크에서 사용하는 주소 이름인 MAC은 Multiple Access Control
의 약자입니다. 대부분의 LAN은 Broadcast 네트워크, 즉, 같은 전송 매체를 공유하는 시스템이기 때문에 여러개의 호스트가 동시에 같은 링크를 사용할 수 있고 두 개 이상의 호스트가 동시에 전송을 하면 데이터의 충돌이 일어나기 때문에 양 쪽 모두 데이터의 전송이 실패합니다. 이 것을 충돌(collision)이라고 하고 데이터링크 계층에서는 이러한 충돌이 일어나지 않도록 한 번에 하나의 호스트만 전송할 수 있도록 허용합니다. 그래서 다중 접속이지만 동시에 둘 이상이 접속하지 않고 한 순간에는 하나의 호스트만 데이터 전송을 허용한다는 것이 링크 계층에서 사용하는 중요한 기능이며 주소의 이름이 Multiple Access Control의 약자인 MAC인 이유 입니다.
근거리 네트워크(LAN)의 종류
ARP(Address Resolution Protocol) 프로토콜
-> 어떤 인터페이스의 IP 주소를 알 때, 해당 인터페이스의 물리적 주소(MAC)를 가지고 오는 프로토콜입니다. 일반적으로 LAN 상의 IP 노드(호스트, 라우터)는 IP주소와 MAC 주소가 매핑되어 있는 테이블을 가지고 있으므로 가져올 수 있게 됩니다. (단, IP주소와 MAC 주소 매핑의 유효기간인 TTL이 존재합니다.)
이더넷(Ethernet)
-> 가장 널리 사용되고 가장 단순한 유선 LAN 기술이며 빠른 전송속도를 가지고 있습니다. 이더넷의 특징은 비연결형(Connectionless)으로 송수신자 간의 핸드쉐이킹을 하지 않으며 비신뢰적(Unreliable)이며 에러가 없다는 것을 보장해주지 않습니다.
스위치(Switch)
-> 스위치가 프레임을 받으면 자가학습하여 송신자/위치 쌍을 스위치 테이블에 기록해서 하나의 링크로만 선택적인 전송 할 수 있도록 통신합니다.
VLANs
-> Virtual Lans의 약자로 여러개의 물리적 랜을 Virtual하게 그룹지어서 그룹마다 다른 랜으로 취급하도록 따로 관리할 수 있도록 구현합니다.
3 계층 - 네트워크 계층(Network Layer)
네트워크 계층(Network Layer)
은 IP로 대표되는 계층이며 전송계층의 TCP or UDP로부터 데이터 전송을 요청 받고 요청받은 데이터를 목적지 호스트까지(end-to-end) 최선의 경로를 선택해서 데이터를 전달하는(routing) 역할을 수행합니다.
네트워크 계층은 두개의 기능으로 구분합니다.
제어 평면(network routing)
-> 제어 영역의 기능. 목적지까지의 최선의 경로를 선택하는 기능이며 control plane 이라고도 부릅니다.
데이터 평면(data forwarding)
-> 데이터 영역의 기능. 최선의 경로를 따라서 실제로 데이터를 전달하는 기능이며 data plane 이라고도 부릅니다.
제어 영역 또한 두 가지 방식으로 나눌 수 있습니다.
분산형 방식
-> 전통적인 방식이며 모든 각각의 라우터들은 forwarding table을 가지고 있고 forwarding table을 따라서 데이터를 전송하면 최선의 경로를 따라서 데이터가 목적지까지 전달됩니다. 여기서 forwading table을 구성하는 것이 제어 영역의 동작이고, forwarding table을 따라서 데이터를 전달하는 것이 데이터 영역의 동작입니다.
중앙 집중형 방식
-> 최근 경향인 방식이며 forwarding 방식은 같으나 제어 영역에서 하나의 서버에서 최선의 경로를 찾는 알고리즘을 수행하고 파악한 결과를 각각의 라우터에게 전달해줍니다. 예시로는 SDN(Software Defined Network)이 있습니다.
라우터(Router)
-> 라우팅(routing)을 수행하며 데이터 패킷을 전송하는 것은 라우터입니다. 라우터에는 라우팅 테이블(routing table)을 통해 경로 정보를 등록하고 관리하고 최적의 경로를 지정합니다. 이 과정은 라우터 혼자서 결정하는 것이 아니라 실제로는 데이터에 IP가 헤더에 포함되어 있기 때문에 가능한 일 입니다.
데이터 링크 계층과 네트워크 계층의 차이점
데이터 링크 계층과의 차이점은 데이터 링크 계층은 인접한 두 노드 사이의 데이터 전송을 담당하는 반면에, 네트워크 계층은 각 패킷이 송신지에서 최종 수신지까지 정확하게 전송되도록 경로를 책임집니다. 또한, 데이터 링크 계층의 주소는 한 노드에서 다음 노드로 프레임이 이동할 때 마다 변경되는 현재와 다음 노드의 물리 주소인 반면에, 네트워크 계층에서는 논리 주소인 IP 주소를 헤더에 포함하여 전송하기 때문에 송신지에서 최종 수신지까지의 주소가 도중에 바뀌지 않고 유지됩니다.
-> 즉 요약하자면, 데이터링크 계층은 인접한 두 노드의 전송을 담당하고 네트워크 계층은 최종 수신지까지의 전송을 담당합니다.
IP (인터넷 프로토콜)
인터넷 프로토콜(IP, Internet Protocol)
은 목적지까지 데이터를 전달하는 기능을 수행하고 동시에 주소를 관리하는 기능을 수행합니다.
집 주소가 있어야 우편을 보낼 수 있듯이, 네트워크에 접속된 각 컴퓨터에도 고유한 식별 번호가 있어야 정확하게 데이터를 송수신할 수 있습니다. 따라서 인터넷에 연결된 모든 컴퓨터에는 고유 주소가 부여되는데 이것이 IP 주소 입니다.
이 포스트에서는 간략하게만 설명하였고 IP 프로토콜에 대한 자세한 개념 정리 및 동작 원리는 아래 포스트에 정리했습니다.
[네트워크] IP 프로토콜 개념 정리(IPv4, IPv6)
단편화(fragmentation) 및 재결합(reassembly)
-> 큰 MTU 사이즈를 가진 라우터에서 작은 MTU 사이즈를 가진 라우터로 데이터를 이동시켜야 한다면 데이터를 잘게 쪼개야 합니다. 그것을 단편화(fragmentation)라고 하고 쪼개진 데이터를 다시 합치는 것을 재결합(reassembly)이라고 합니다.
IPv4 주소체계
IPv4
는 32비트(bit)로 구성되어있으며 한 칸당 10진수 8bit의 IP 주소로 구성되어 있습니다. e.g) 223. 92. 0. 1
이 IP 주소는 호스트 / 라우터 네트워크 인터페이스마다 하나씩 존재하며 대응됩니다.
즉, 호스트 한대당 1개의 IP 주소가 할당되는 것이 아니라 호스트에 달려있는 네트워크 인터페이스 갯수만큼의 IP주소가 존재합니다.
ex) 컴퓨터가 있으면 Ethernet LAN 카드의 IP 주소 및 Wifi LAN 카드의 IP 주소 등이 추가로 존재합니다.
DHCP(Dynamic Host Configuration Protocol)
DHCP(Dynamic Host Configuration Protocol)
는 클라이언트에게 동적으로 IP 주소를 할당하는 방법을 제공하는 프로토콜입니다.
DHCP의 특징
- 사용중인 주소의 대여기간 갱신(연장) 가능
- 주소의 재사용 가능
- 네트워크에 접속하고자 하는 이동 사용자 지원
NAT(Network Address Translation)
NAT(Network Address Translation)
는 라우터 등의 장비에서 다수의 사설 IP(Private IP)를 외부 IP(Public IP)로 네트워크 주소를 변환하는 기술을 말합니다.
NAT를 사용하는 이유?
만약, 어떤 라우터를 기준으로 사설 네트워크가 존재하고 네트워크 안에 엄청 많은 호스트가 있다면 호스트마다 IP 주소를 할당하면 굉장히 많은 IP 주소가 필요할 것 입니다. 하지만, 실제로는 외부 인터넷이 라우터 하나에 IP 하나를 할당해주므로 외부에서 보기에는 IP 주소가 하나만 있는 것으로 보이고 많은 IP의 할당이 필요하지 않습니다. 하지만 내부적으로는 호스트마다 다른 IP 주소를 사용하고 있습니다. 이 IP를 사설 IP 주소라고 부르고 이 주소는 내부 네트워크에서만 사용할 수 있는 IP 주소 입니다.
-> 그래서 이 내부 IP 주소를 외부 IP로 변환 및 매핑시켜주는 것이 NAT 입니다.
IPv6 주소체계
IPv6
는 128-bit로 구성되어있으며 한 칸당 16-bit를 4자리의 16진수로 표현하여 8조각으로 구성된 IP 주소로 구성되어 있습니다.
ex) 2001:0db8:85a3:08d3:1319:8a2e:0370:7334
-> IPv4의 32-bit 길이의 IP 주소 공간(약 43억 개)은 이미 고갈된 상태이므로 128-bit 길이의 IPv6가 등장 하였고 IPv6는 2^128개의 주소공간을 수용할 수 있으므로 주소 부족의 문제를 해결하였습니다.
장점
1. 주소 공간이 엄청나게 많음.
2. header 형식 개선으로 우선순위 및 품질 따라 순차적 할당 기능 등의 QoS 지원.
3. 보안 기능을 기본적으로 제공.
터널링(turnneling)
-> 현재 IPv4와 IPv6를 동시에 사용하고 있지만, 옛날의 기술은 최신 기술의 존재를 모르듯이 IPv4는 IPv6의 존재를 알지 못하므로 IPv4는 IPv6의 기능을 지원할 수 없습니다. 이를 해결하기 위해 터널링(turnneling)이라는 기법을 사용합니다. 터널링은 IPv4 라우터에서 IPv4의 datagram의 payload에 IPv6의 datagram을 넣어서 전달함으로써 IPv6와의 호환성을 해결합니다.
네트워크 계층의 여러 프로토콜
TCP/IP에서 네트워크 계층의 IP 프로토콜 외에 ARP, ICMP, IGMP등이 존재합니다.
ARP(Address Resolution Protocol)
-> 송신측 시스템에서 수신 측 시스템으로 패킷을 전송할 때 이 패킷은 물리적인 네트워크를 통과하므로 논리 주소인 IP 주소 뿐만 아니라 물리 주소인 MAC 주소가 필요합니다. 그러므로, ARP는 IP 주소를 받아서 LAN 카드의 물리주소인 MAC 주소로 변환하는 프로그램입니다. RARP는 반대로 물리 주소인 MAC 주소를 논리 주소인 IP 주소로 변환하는 역주소변환 프로토콜입니다.
ICMP(Internet Control Message Protocol)
-> ICMP는 네트워크의 호스트나 라우터에서 예상치 못한 오류가 발생할 때 라우터에서 발생한 오류를 송신 측으로 전송하는데 사용하는 프로토콜입니다. 일반적으로 ICMP는 네트워크 계층에서 상주하지 않고 IP 데이터그램에 캡슐화되어 인터넷으로 전송됩니다.
IGMP(Internet Group Management Protocol)
-> IGMP는 서브넷(로컬 네트워크) 상의 멀티캐스팅 멤버십 제어(그룹 관리)를 위한 프로토콜 입니다. 인터넷에서 IPTV 와 같은 멀티캐스트 실시간 전송을 위해서 사용합니다.
4 계층 - 전송 계층(Transport Layer)
전송 계층(Transport Layer)
은 서로 다른 호스트의 프로세스들 간에 논리적 통신(logical communication)을 제공합니다. 즉, 전송 계층은 종단 시스템(end system)에서만 구현이 되어 있고 중간에있는 라우터들은 전송 계층을 구현할 필요가 없습니다.
전송 계층의 역할은 출발지(send side)의 프로세스와 도착지(rcv side)의 프로세스 사이를 연결하는 것 입니다. 즉, 네트워크 계층에서 IP 주소를 보고 목적지 호스트에 도착하면 수 많은 프로세스가 존재하는데 Port#를 보고 원하는 프로세스까지 찾아가게 해줍니다.
대표적인 프로토콜은 TCP와 UDP가 있습니다.
네트워크 계층 (Network Layer) vs 전송 계층(Transport Layer) 차이
네트워크 계층 -> 호스트 간의 논리적 통신 (IP 주소)
전송 계층 -> 프로세스 간의 논리적 통신 (Port 번호)
전송 계층의 프로토콜 TCP와 UDP 차이 Overview
TCP
- 신뢰적이고 순차적인 전달
(에러 없이 전달)
- 혼잡 제어
- 흐름 제어
- 연결 설정
UDP
- 비신뢰적이고 비순차적 전달
(에러가 없는 것을 보장하지 않음)
- 'best effort'
(최선형, 데이터를 목적지에 전송하는 것을 최우선으로 함). IP 에 약간의 기능만 추가
이 포스트에서는 간략하게만 설명하였고 UDP와 TCP에 대한 자세한 개념 정리 및 동작 원리는 아래 포스트에 정리했습니다.
TCP/UDP segment format
TCP/UDP segment
에는 각각 16비트의 출발지(source) 포트넘버와 목적지(dest) 포트넘버가 있습니다. 전송계층에서는 이 포트넘버로 프로세스를 구분합니다.
즉, 네트워크 계층의 IP 주소로 목적지 호스트까지 찾아가고 호스트 안에서 전송계층의 포트넘버로 목적지 프로세스의 소켓을 찾아가는 것입니다. 그리고 소켓이란 목적지 프로세스가 전송 계층으로부터 데이터를 전달받는 부분을 말합니다.
특히, UDP와 같은 비연결형(connectionless) 프로토콜은 하나의 프로세스(소켓)가 여러개의 상대방 프로세스(소켓)와 통신이 가능합니다.
비연결지향형의 역다중화
-> 비연결형이기 때문에 목적지의 IP와 포트넘버만 알면 통신 가능.
연결지향형의 역다중화
-> 연결형이기 때문에 소위 4-tuple이라고 부르는 출발지의 IP와 포트넘버 그리고 목적지의 IP와 포트넘버를 알아야 통신 가능합니다. 비지속 연결인 HTTP의 경우에는(웹서버의 포트번호 80번) 하나의 소켓을 사용하지 않고 각 클라이언트의 연결에 대해 다른 소켓을 사용하여 역다중화 합니다.
UDP(User Datagram Protocol)
UDP(User Datagram Protocol)
는 RFC 768 문서에 정의된 비연결 지향 프로토콜로 TCP와 달리 흐름제어, 단편화 및 전송 보장등의 기능을 제공하지 않습니다.
책에서는 'no frills(장식이 없고)', 'bare bones(빼빼 마른)' 이라고 설명하는데 쓸데없는 기능을 전부 빼고 데이터를 목적지에 도달시키는 것만을 목적으로 필요한 기능만 있는 프로토콜이라는 뜻입니다.
UDP의 특징
'best effort'(최선형) 서비스 -> UDP segment는 사라지거나 순서가 바뀔 수 있습니다.
connectionless(비연결형) -> 송/수신측 사이의 handshaking이 없고 각 UDP의 segment는 목적지 주소만 가지고서 독립적으로 다뤄집니다.
UDP의 사용 예시
streaming multimedia apps
-> 손실을 허용하고 전송률에 민감하므로 스트리밍에 적합합니다. but 최근에는 HTTP, 즉 TCP를 사용하는 서비스가 많이 생겨나고 있습니다. (보안등의 이슈로 UDP 트래픽을 허용시키지 않는 도메인이 많고 버퍼링을 이용해서 TCP의 문제를 해결하여 사용합니다.)
DNS(Domain Name System)
-> 일반적으로는 UDP를 사용하지만 보안 및 신뢰성의 이유로 TCP를 사용하기도 합니다.
SNMP(Simple Network Management Protocol)
-> 네트워크 관리를 위한 프로토콜.
만약 UDP에서 신뢰적인 전송을 하고 싶다면? -> 전송 계층인 UDP에서는 해결할 수 없고 애플리케이션 계층에서 해주어야 합니다.
UDP가 존재하는 이유?
연결 설립이 없습니다. -> 지연을 유발하지 않습니다.
단순합니다. -> 송/수신자 간의 연결 상태를 유지하지 않습니다.
헤더 사이즈가 작습니다. -> 빠르게 데이터를 보낼 수 있습니다.
혼잡 제어가 없습니다 -> 빠르게 데이터를 보낼 수 있습니다.
TCP(Transmission Control Protocol)
TCP(Transmission Control Protocol)
은 연결 지향형(connection-oriented)이며 신뢰성 있는 바이트 스트림을 제공하는 프로토콜입니다.
여기서 연결지향형이란 응용 프로그램이 데이터를 교환하기 전에 TCP 연결을 통해 데이터를 송수신할 수 있는 연결 통로를 만들고 데이터를 전송해야 함을 의미하고, 신뢰성이 있다는 말은 데이터를 성공적으로 수신했거나 오류가 발생했음을 알려주는 것을 의미합니다.
즉, 상대방과 통신할 때 연결상태를 확인 후 데이터 전송을 시작하고 통신 종료때까지 연결 상태를 유지하며 오류가 발생하면 수신자에게 알려주는 프로토콜 입니다.
TCP의 특징
점대점(point-to-point)
-> 1:1 연결로 단일 송신측, 단일 수신측의 통신입니다.
신뢰적이고 순서가 유지된 Byte Stream
-> '메시지 경계'가 없습니다. 신뢰적이라는 말은 에러가 없다는 것을 보장하고 에러가 있다면 재전송한다는 의미이고, 연결을 하고 데이터를 흘려보내기 때문에 Byte Stream이라는 용어를 사용합니다.
파이프 라이닝(Pipelining)
-> TCP의 혼잡 제어 및 흐름 제어를 통해 윈도우 크기를 설정합니다. acknowledge 없이도 연속으로 데이터를 보낼 수 있지만 데이터는 최대 사이즈를 넘을수 없게 보냅니다. 여기서 데이터의 최대 사이즈를 윈도우라고 부르며 흐름제어에서 사용합니다.
전이중(full-duplex) data
-> 한 연결에 양방향 데이터를 전송합니다. (MSS: maximum segment size)
연결 지향(connection-oriented)
-> handshaking (제어 메시지의 교환)으로 송수신 측의 상태를 초기화한 후 데이터를 교환합니다.
흐름 제어(flow control)
-> 수신 측의 속도를 감안해 송신합니다.
혼잡 제어(congestion-control)
-> 망이 혼잡해지면 송신 측 속도를 낮춥니다.
제공하지 않는 것
-> 시간 보장, 처리율 보장, 보안
흐름 제어(flow control)
흐름 제어(flow control)
는 송신측이 수신측을 제어해서, 수신측이 너무 빨리 보내서 송신측의 버퍼가 넘치지 않게 해주는 기법입니다. (수신측의 능력에 맞게 송신측의 데이터 속도를 조절해야 함.)
흐름 제어가 필요한 이유
만약, TCP socket의 버퍼(buffer)에 쌓이는 속도가 가져가는 속도보다 빠르다면 결국 나중에는 buffer가 꽉차서 더 이상 저장할 수 없기 때문에 데이터 손실(loss)가 생길 것입니다. 그래서 흐름 제어를 통해 송신측의 데이터를 전달하는 속도를 조절해서 TCP socket의 버퍼에 쌓는 속도가 너무 빠르지 않도록 조절하는 것 입니다.
Sliding Window
-> TCP에서 window size를 통해서 흐름제어 하는 기법.
흐름 제어는 receiver의 window size를 조절해서 송신측의 데이터 속도를 조절합니다.
(window size란 송신측에서 ACK 없이 한번에 보낼수 있는 데이터의 양을 말합니다.)
TCP 연결 - handshake란?
TCP는 connection-oriented 프로토콜이기 때문에 데이터 전송 전에 연결을 설립하는 핸드쉐이크(handshake)
과정을 수행합니다.
즉, TCP에서 데이터 교환 전에, 송/수신 측이 연결 조건(connection parameters)에 합의 하는 과정
여기서 핸드쉐이킹은 2-way handshake와 3-way handshake가 두 가지가 존재합니다.
2-way handshake의 단점
- 지연 시간이 가변적입니다.
- 메시지 손실 때문에 메시지를 재전송할 수 있습니다.(e.g. req_conn(x))
- 메시지 순서가 바뀔 수 있습니다.
- 상대방의 상황을 볼 수 없습니다.
-> 서버가 클라이언트에게 클라이언트의 연결 설립 응답 메시지를 보냈다고 하더라도 클라이언트가 응답을 잘 받았는지 알 수 없습니다.
그래서 2단계의 핸드쉐이킹으로는 양쪽의 connection 설립을 확인할 수 없습니다. 그래서 이러한 단점 때문에 3-way handshaking을 많이 사용합니다.
3-way handshake
3-way handshake
는 2-way 핸드쉐이킹 과정에서 서버에 대한 클라이언트의 응답과정을 추가하여 서버의 응답을 잘 받았는지의 과정을 추가합니다. 이렇게 하면 클라이언트, 서버 측에서 모두 연결 설립이 되어있는지 알 수 있습니다.
TCP 연결 닫기
TCP 연결 닫기는 데이터 전송까지 마쳤을 때 4-way handshake를 해서 연결을 해제하는 과정입니다.
클라이언트, 서버는 각자 자기 쪽의 연결을 닫습니다. (연결할 때는 3-way handshake를 통해서 서로 합의하에 한번에 설립했지만 연결을 해제할 때는 양방향 통신이기 때문에 동시에 각자 자기쪽에서 전송되는 connection을 닫아도 됩니다.)
혼잡 제어(congestion control)
혼잡 제어(congestion control)
는 네트워크의 혼잡 상황을 해결하기위한 기법입니다. 여기서 혼잡 상황이란, 네트워크 traffic이 엄청나게 늘어나서 네트워크가 데이터를 처리하기에는 데이터 전송 속도가 너무 빠른 상태를 말합니다.
혼잡상황이 발생할 때의 소견(manifestation)
- lost pacakets -> buffer에 데이터를 보관할 공간이 없어서 데이터 손실(loss)
- long delay -> buffer에서 대기시간이 증가함. (queueing delay 증가)
-> 혼잡상황을 해결할 수 있는 방법은 송신측의 전송 데이터의 속도를 줄여서 트래픽을 줄이는 한 가지 방법밖에 존재하지 않습니다.
바로 window size를 줄여가며 해결하는 방법입니다. 다만, window size를 너무 줄이면 TCP의 성능에 문제가 생기므로 Slow Start라는 기법을 사용합니다.
Slow Start
-> cwnd(congestion window)의 크기를 처음에는 천천히 늘리지만, 나중에는 기하급수적으로 늘려보는 방법. (하지만 어느정도 수준까지 올라가면 additive increase, linear increase로 변경) 이 기법을 사용하면 cwnd에 대한 그래프가 마치 톱날 모양(saw tooth)과 같은 모양이 형성됩니다.
5 계층 - 세션 계층(Session Layer)
세션 계층(Session Layer)
은 응용 프로그램의 계층간의 통신을 제어하는 구조를 제어하기 위해 응용 프로그램 계층 사이의 접속을 설정, 유지, 종료하는 역할을 하는 계층입니다. 사용자와 전송 계층간의 인터페이스 역할을 하며, LAN 사용자가 서버에 접속할 때 이를 관리하는 기능도 수행합니다. 세션 계층에서는 데이터 단위를 전송 계층으로 전송할 순서를 결정하고, 데이터를 점검 및 복구하는 동기화(synchronization) 기능을 제공합니다. 또한, 세션을 종료할 필요가 있으면 종료할 적절한 시간을 수신자에게 알려줍니다.
세션 계층의 기능을 정리하면 아래와 같습니다.
동기화(synchronization)
-> 전송 계층으로 전송할 순서와 전송할 때 수신자 확인이 필요한 곳을 결정합니다.
세션 연결의 설정과 종료
-> 세션 연결의 설정과 종료 및 관리 절차를 정의합니다.
대화 제어
-> 누가 언제 보내는지를 결정합니다.
6 계층 - 표현 계층(Presentation Layer)
표현 계층(Presentation Layer)
은 데이터 표현의 차이를 해결하기 위해 다른 형식으로 변환하거나 공통 형식을 제공하는 계층입니다.
송신 측에서는 수신 측에 맞는 형태로 변환(아스키코드 -> EBDCDIC)하고, 수신 측에서는 응용 계층에 맞는 형태로 변환합니다.
또한, 그래픽은 JPEG, 동영상은 MPEG 형식으로 변환하여 송수신하는 기능과 데이터 압축 및 암호화 기능을 제공합니다.
표현 계층의 기능을 정리하면 아래와 같습니다.
암호화
-> 데이터의 보안을 위해 암호화와 복호화를 수행합니다.
압축
-> 데이터의 효율적인 전송을 위해 데이터 압축 및 압축 해제를 수행합니다.
코드 변환
-> 전송에 사용할 수 있도록 메시지(데이터)를 상호 간에 수용할 수 있는 형식으로 변환한 후 수신자에게 수신자가 이해할 수 있는 형식으로 변환합니다.
7 계층 - 응용 계층(Application Layer)
응용 계층(Application Layer)
은 서로 다른 종단 시스템(end-system)에서 실행되는 어플리케이션의 계층입니다. 예를 들면, HTTP를 사용하는 웹 브라우저를 사용해서 웹서버에 접속한다고 했을 때 클라이언트와 서버 사이의 동작만을 의미하며 중간의 네트워크 코어 부분의 라우터나 스위치의 동작은 응용 계층에서 신경쓸 필요가 없는 계층입니다.
어플리케이션 계층의 구조는 크게 2 가지로 나눌 수 있습니다.
1. Client-Server 구조
2. Peer-to-Peer(P2P) 구조
Client-Server 구조
Client-Server 구조는 사용자가 Client가 되고 사용자에게 서비스를 제공하는 쪽이 Server가 되는 비대칭적인 구조입니다. 대부분의 어플리케이션이 Client-Server 구조를 사용합니다.
서버(Server)의 특징
- 항상 켜져 있습니다.
- 고정 IP 주소를 사용합니다
- 확장성을 위해 데이터 센터에 존재합니다.
클라이언트(Client)의 특징
- 서버와 통신
- 간헐적으로 접속할 수 있습니다.
- 유동 IP 주소를 사용합니다.
- 클라이언트끼리 직접 통신하지는 않습니다.
P2P(Peer-to-Peer) 구조
P2P의 특징
- 항상 켜져있는 서버가 없음
- 임의의 종단 시스템끼리 직접 통신
- peer는 다른 peer에게 서비스를 요청하고 제공
- peer들은 간헐적으로 연결되고 IP주소가 유동적 -> 관리가 복잡
예시
- 파일 배포 (BitTorrent)
- Streaming (KanKan)
- VoIP (Skype)
프로세스 간 통신(IPC)
프로세스(process)
: 호스트에서 실행되는 프로그램
- 한 호스트 내에서 두 프로세스는 IPC(inter-process communication)를 통해 통신함.
- 다른 호스트에 있는 프로세스들은 메시지(message)를 교환함으로써 통신 함.
client와 server
client process -> 통신을 초기화하는 프로세스
server process -> 접속을 기다리는 프로세스
P2P 어플리케이션에서는 한 프로세스가 클라이언트, 서버 양쪽의 역할을 전부 수행
소켓(Sockets)
소켓(Sockets)
이란 프로세스간에 데이터를 주고 받을 수 있도록 전송 계층에 놓여진 양방향 통신 링크의 한 끝점(endpoint)입니다
프로세스는 소켓을 통해 메시지를 주고 받습니다. 소켓이 있어야만 TCP or UDP 프로토콜로부터 데이터를 내보내거나 받을 수 있고 소켓이 없다면 어플리케이션의 네트워크는 동작하지 않습니다.
어플리케이션 계층 프로토콜이 정의하는 것
1. 교환되는 메시지의 타입: e.g.) request, response
2. 메시지의 문법: 메시지 내 필드(field)들과 구별
3. 메시지의 의미: 필드 내 정보의 의미
어플리케이션을 위한 트랜스포트 서비스
어플리케이션의 특징에 따라 어떤 특징을 가진 프로토콜을 사용할 지 결정해야 합니다.
데이터 신뢰성(data integrity)
-> 어플리케이션이 에러가 있으면 안될 때 e.g.) 파일 전송, 웹 작업
시간(timing)
-> 어플리케이션이 타이밍이 중요한지가 중요할 때. e.g.) 실시간(real-time) vs 비실시간(non-real-time)
처리율(throughtput)
-> 어플리케이션이 최소한의 처리율이 충족되어야 효과적일 때. e.g.) BPS가 어느정도 보장되어야만 실시간 전송이 가능
보안(security)
-> 암호화, 데이터 무결성이 중요할 때.
어플리케이션에서 사용하는 전송 계층 프로토콜
TCP 서비스
송수신 프로세스 간의 신뢰성 있는 전송.
연결 지향(connection-oriented)
-> handshaking (제어 메시지의 교환)으로 송수신 측의 상태를 초기화한 후 데이터를 교환합니다.
흐름 제어(flow control)
-> 수신 측의 속도를 감안해 송신합니다.
혼잡 제어(congestion-control)
-> 망이 혼잡해지면 송신 측 속도를 낮춥니다.
제공하지 않는 것
-> 시간 보장, 처리율 보장, 보안
UDP 서비스
송수신 프로세스 간의 비신뢰적 전송. 대부분의 기능은 제공하지 않으나 여러 어플리케이션에서 시간(timing)이 중요할 때 UDP를 사용합니다.
제공하지 않는 것
-> 신뢰성, 흐름 제어, 혼잡 제어, 시간 보장, 처리율 보장, 보안, 연결 설정
인터넷 어플리케이션과 트랜스포트 프로토콜
응용 | 어플리케이션 계층 프로토콜 | 하위 트랜스포트 프로토콜 |
전자 메일 |
SMTP [RFC 2821] | TCP |
원격 터미널 접속 |
Telnet [RFC 854] | TCP |
웹 |
HTTP [RFC 2616] | TCP |
파일 전송 |
FTP [RFC 959] | TCP |
멀티 스트리밍 |
HTTP (e.g. Youtube), RTP [RFC 1889] | TCP or UDP |
인터넷 전화 |
SIP, RTP, 사설 프로토콜 (e.g. Skype) | TCP or UDP |
HTTP 프로토콜
HTTP(HyperText Transfer Protocol)
란 인터넷에서 하이퍼텍스트 문서인 HTML로 만든 웹페이지를 전송하기 위해 사용되는 어플리케이션 계층 프로토콜입니다. HTTP는 주로 전송 계층의 TCP를 사용하여 데이터를 교환하며 기본적으로 80번 포트를 사용합니다.
이 포스트에서는 간략하게만 설명하였고 아래 포스트에 HTTP 프로토콜에 대해 자세하게 정리하였습니다.
HTTP 프로토콜의 특징
웹 페이지는 객체(objects)들로 구성
됩니다. -> 객체는 HTML 파일, JPEG 이미지, java applet, 오디오 파일 등입니다. 웹 페이지는 보통 참조 객체들이 포함된 기본 HTML 파일이며 각 객체는 URL로 참조합니다.
HTTP는 TCP를 사용
합니다. -> 클라이언트는 소켓을 만들고 서버의 80번 포트에 TCP 연결 요청 후에 서버가 요청을 수락하면 브라우저와 서버 사이에 HTTP 메시지를 교환하고 TCP를 닫는 과정을 수행합니다.
HTTP는 비상태(stateless)
입니다. -> 상태(state)를 유지하는 프로토콜은 복잡하며 서버나 클라이언트가 다운되면 정보의 일관성을 잃게 되므로 서버는 클라이언트의 과거 요청에 대한 정보를 유지하지 않습니다. 그래서 쿠키(cookie) 혹은 웹 캐시를 사용합니다.
최근에는 대부분 지속 연결(persistent) HTTP을 사용
합니다. -> 지속 연결을 통해 한번의 TCP 연결을 통해 여러 객체를 전송합니다.
쿠키 (Cookies)
쿠키(Cookies)
란 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일을 말합니다. 쿠키는 사용자 호스트에 저장하며 브라우저가 관리하고 웹 사이트는 서버의 데이터베이스에서 이를 확인하여 쿠키에 해당하는 이벤트를 수행합니다. 예를들면, 권한과 장바구니등에 사용되며 개인 사생활 침해에 대한 이슈를 가지고 있습니다.
웹 캐시 (Web cache)
웹 캐시(Web cache)
는 서버 지연을 줄이기 위해 웹 페이지, 이미지, 기타 유형의 웹 멀티미디어 등의 웹 문서들을 임시 저장하기 위한 정보기술입니다. 웹 캐시는 컴퓨터 메모리에서의 캐시와 같습니다. 쿠키와 다르게 리소스를 캐시에 저장해서 사용하면 서버에 접근할 필요 없으므로 시간 단축을 할 수 있습니다.
웹 캐시의 특징
캐시는 서버와 클라이언트의 역할을 동시에 수행 합니다. -> 웹 캐시가 서버와 클라이언트 중간에 위치하기 때문에 클라이언트에게는 서버처럼 동작하고 서버에게는 클라이언트처럼 동작합니다.
캐시는 주로 ISP에 의해 설치 됩니다. (대학, 회사, 가정 ISP) -> 일반적으로 웹 캐시는 컴퓨터 내에 존재하는 것이 아니라 한 ISP 내에 존재하므로 여러 클라이언트에서 같은 캐시를 사용할 수 있습니다.
웹 캐시 사용 이유?
- 클라이언트 요청에 대한 응답 시간 감소
- 기관 접속 링크의 트래픽 감소
- 인터넷에서 캐시가 많이 사용됨: "poor(가난한)" 콘텐츠 제공자가 효과적으로 파일을 전달할 수 있도록 해줍니다.
SMTP(Simple Mail Transfer Protocol) 프로토콜
SMTP(Simple Mail Transfer Protocol)
는 인터넷에서 이메일을 보내기 위해 이용되는 어플리케이션 계층의 프로토콜 입니다. SMTP는 주로 전송 계층의 TCP를 사용하여 데이터를 교환하며 기본적으로 80번 포트를 사용합니다.
SMTP의 특징
- SMTP는 지속(persistent) 연결을 사용
- SMTP는 메시지가(header & body 모두) 7-bit ASCII로 구성될 것을 요구합니다.
- SMTP 서버는 CRLF.CRLF 를 보고 메시지의 끝임을 판단합니다.
HTTP와의 차이
HTTP: pull 방식. 클라이언트가 서버에 접속해서 원하는 데이터를 가져오는(pull) 형태 -> 각 객체는 자체적 응답 메시지에 캡슐화합니다.
SMTP: push 방식. 클라이언트가 서버에 접속해서 이메일 메시지를 push하는 형태 -> 여러 객체가 한 메시지에 담겨서 보내집니다.
DNS(Domain Name Server)
-> 도메인 이름을 IP 주소로 매핑시켜주는 역할을 합니다. 도메인 이름을 사용하는 이유는 IP 주소는 32-bit의 숫자로 되어있기 때문에 사람이 기억하기 쉬운 이름으로 사용하기 위해 도메인 이름을 사용합니다. 분산된 데이터베이스는 여러 계층의 name server들로 구현되어있습니다. 어플리케이션 계층 프로토콜이 호스트와 네임 서버들은 주소와 이름의 변환을 위해 통신 합니다.
비디오 스트리밍(Video Streaming)과 CDNs
Netflix, Youtube, Amazon Prime
-> 가정용 ISP에서 download 트래픽의 80%를 차지
문제점: 사용자가 엄청 많으므로 서버에 트래픽이 몰리고 혼잡상황이 발생할 수 있습니다.
문제점: 확장성 -> 수십 억 사용자를 어떻게 수용할 것인가?
-> 단일 고성능 서버로는 불가능합니다.
문제점: 다양성
-> 사용자마다 환경이 다릅니다. (e.g. 유선 대 무선, 고 대역폭 대 저 대역폭)
이러한 문제점들의 해결책은 버퍼링, 분산된 서버가 존재합니다.
DASH(Dynamic, Adaptive, Streaming over HTTP)
DASH(Dynamic, Adaptive, Streaming over HTTP)
는 전통적인 HTTP 웹 서버로부터 전달되는, 인터넷을 경유하는 미디어의 고품질 스트리밍을 가능케 하는 적응 비트레이트 스트리밍 기술 중 하나입니다.
server
-> 비디오 파일을 여러 Chunk로 분할하여 여러 rate로 코딩되어 저장. (manifest file: chunk에 대한 URL 제공)
client
-> 주기적으로 서버-클라이언트 간 대역폭을 측정 후, Manifest 파일을 참조하여 한 번에 한 chunk씩 제공. 현재 주어진 대역폭에서 유지할 수 있는 최대 coding rate를 선택(네트워크 상태에 따라 유동적으로)
특징: "지능적인" client
1. 언제 chunk를 요청할지 -> 버퍼가 비거나 넘치지 않도록
2. 어떤 encoding rate를 요청할지 -> 대역폭이 허용하는 한 고화질로
3. 어디에 chunk를 요청할지 -> 클라이언트에서 가깝거나 대역폭이 큰 서버를 선택하도록
CDN(Content Delivery Network)
CDN(Content Delivery Network)
은 사용자 위치와 서버 위치를 기준으로 콘텐츠(웹페이지, 동영상, 이미지)를 최종 사용자에게 전송할 수 있는 분산 노드로 구성된 네트워크입니다.
만약 네트워크를 한 곳에서만 사용한다면?
- 한 곳이 고장 나면 전체가 중단됨.
- 네트워크에 서버 부하 증가 및 체증 발생 .
- 원거리 클라이언트의 품질 저하
- 비디오가 같은 링크를 통해 반복 전송
-> 따라서 CDN을 사용하면 모든 사용자의 모든 요청을 원본 서버로 보내는 대신 분산 노드로 보내므로 원본 서버의 부하가 최소화됩니다.
CDN의 두가지 방법
enter deep
-> 접속 네트워크(edge) 깊이 들어가서 CDN 서버를 구축
- 사용자로부터 가까워짐.
- Akamai라는 CDN 회사의 방식. 1700 곳
bring home
-> 수십 개의 대형 cluster IXP에 구축
- Limelight라는 CDN 회사의 방식
References
James Kurose, Keith W Ross, "Computer Networking: A Top-Down Approach", Pearson(2016)