학습 날짜
•
20210108(금)
학습 시간
•
09:00 ~ 22:00 (자가)
학습 범위 및 주제
•
Netwhat
동료 학습 방법
•
온라인(Discord를 활용) 스터디 진행
학습 목표
•
네트워크에 대한 전반적인 이해
상세 학습 내용
Basic Concept
•
Protocol 이란?
정확히 3가지를 기억하면 된다.
◦
Format
◦
Order
◦
Action
많은 블로그에서는 프로토콜이란 Sender, Receiver의 상호 간의 규약 (통신을 효율적으로 혹은 특정 목적을 달성하기 위한) 이라고 명시를 해둔다. 그렇다면 그 규약이 무엇을 정의하고 있는지가 중요할텐데, 그것이 위의 3가지 키워드이다.
통신에 있어서 메세지의 형식이 어떠한지
네트워크 개체 간에 해당 메세지를 어떤 순서로 받을 것인지
자신이 해당 메세지를 받거나 전달했을 때 어떤 행동을 수행할 것인지
를 명시한 것이 Protocol 입니다.
결과적으로...
1.
메세지에 대해서는 정확한 형식을 지키지 않으면 해석 자체가 불가능하며
2.
메세지의 형식이 올바르더라도 주어진 순서를 지키지 않으면 프로토콜에 대한 행동 수행이 불가능하고
3.
메세지 행동이 명확하지 않으면 형식과 순서를 지켜도 어떤 행동을 할지 알 수 없게 되어 무용지물이 된다는 것이다.
•
protocol layering이란?
특정 프로토콜로 사용자와 통신을 하는 과정에서 메세지의 Delivery가 발생했다고 하면, Delivery외의 잡다한 일을 한 장치에서 모두 수행하지 않는다. 이 때 프로토콜이 수행하는 특정 행위 외의 모든 것들을 하위 프로토콜에게 맡긴다.
그렇다면 하위 프로토콜은 다시 하위 프로토콜에게 위임하고... 이런 Recursive Relationship이 발생하는데, 이 때의 논리구조를 Protocol Stack이라고 부른다. (층층이 둔다는 Layering의 의미와 동일)
그렇다면 Layering이 필요한 이유는 무엇인지 Single Layer 구조와 Triple Layer 구조를 통해 살펴보자.
Single Layer Protocol (대면의 경우로 생각하자)
이 때의 요구 조건은 서로가 만났을 때 인사를 해야하며, 서로의 관계에 따른 할 말을 골라야하며, 상대가 말할 때는 침묵을 해야하고, 서로가 헤어질 때는 잘가라는 인사를 해줘야 한다.
Triple Layer Protocol (비대면의 경우로 생각하자)
이 때의 요구 조건은 만나지 않아도 (육체적으로 멀어도) 소통이 가능하고, 서로가 하고 싶은 말이 있다면 동시에 소통을 해도 되며, 암호화 덕에 둘 외에 다른 사람들은 소통에 참여를 할 수가 없으며, 내가 쓰고 싶은 말을 쓰기만 하면 직접 전달하지 않아도 전달이 보장된다.
즉, Layering을 하게 되면 한 층에서 프로토콜이 수행해야하는 행동 범위가 많이 줄어들면서 각자 자신의 임무만 명확히 수행하게 될 수 있는 장점이 생긴다. 따라서 Protocol Layering이라는 것의 정의는 복잡한 업무를 작은 일의 단위로 나누어 간단한 업무를 부담하게 하는 것으로 볼 수 있다.
비록 간단한 업무가 복잡해질 수 는 있더라도 Protocol Layering을 했을 때 다음과 같은 기대 효과를 얻을 수 있다.
1.
프로토콜 간에 상호 독립적인 기능성만 둘 수 있다. (각 프로토콜의 독립적인 수정이 가능)
2.
각 프로토콜의 내부를 일종의 블랙박스라고 여길 수 있다. (내부 동작 원리에 대해서 전혀 지식이 없더라도 Input을 넣었을 때 Output을 볼 수 있다.)
Protocol Layering의 원칙은 다음과 같다.
1.
Bidirectional (양방향성) 통신을 해야하는 경우에 각 Layer는 송신과 수신 두 가지에 대해서 수행할 수 있어야 한다. (Sender, Receiver를 수행할 수 있어야 한다는 것)
2.
두 객체 아래의 Layer들은 동일하게 쌓여 있어야 한다.
•
OSI 7계층이란? OSI 7 계층은 매우 잘 정의된 개념적 구조라고 보면 된다. 각 프로토콜의 보편적인 역할을 설명하기 위해 사용된다. OSI 7 Layer는 ISO (International Organization for Standardization)에서 만들었으며, 이름 그대로 7개의 계층을 이룬다. 각 계층별 역할은 다음과 같다. 간혹 편의를 위해 아래 계층들을 4개의 Layer로 보기도 하는데, 1계층과 2계층을 묶은 Link Layer / Network Layer / Transport Layer / 5계층과 6계층 그리고 7계층을 묶은 Application Layer로 표현하기도 한다.
1.
Physical (Physical Communication / LAN or NIC Hardware)
매채를 통해 비트 데이터를 Stream의 형태로 전송하고 받는 역할을 수행하여 기계적 전기적인 특성을 제공하는 Layer이다.
Data Link Layer로부터 받은 Frame을 실제 비트로 해석할 수 있도록 비트 스트림으로 만들어서 역할을 수행한다.
역할을 수행할 때는 비트를 Electrical Signal, Light Signal, Radio Signal 등으로 처리를 한다. 이 때 처리의 단위가 비트가 아닌 Signal인 이유는 여러 비트를 한 Signal에 넣어서 이용하고 이를 통해 처리 횟수를 줄일 수 있기 때문이다.
2.
Data Link (Hop to Hop / NIC Driver)
비트 데이터 혹은 Packet을 Frame화 하여 기기 간 Hop-to-Hop 전달하는 역할을 수행해주는 Layer이다.
Hop-to-Hop으로 전달한다는 의미는 서로 속한 네트워크가 같으면서 인접한 기기 (Adjacent Node)에게 데이터를 전달한다는 것이다.
기기가 가진 실제 주소(MAC 주소)를 이용한다.
Data Link Layer는 Network Layer의 인터페이스로 작용된다. (즉, 성공적으로 데이터를 보내기 위해선 Network Layer는 목적지에 대한 명확한 Data Link Layer의 주소를 명시할 수 있어야 한다는 것이다.)
또한 Hop-to-Hop으로 인접한 기기에 전송된 데이터들은 Error가 없도록 전달된다. 즉, 수신 측 기기에서는 이미 올바른 데이터들이 무조건 받게되어 있다는 것이다. 이 덕에 수신한 데이터를 수신 측에서 상위 Layer로 올릴 때 Error Free를 가정할 수 있다. (이미 올바른 데이터들을 받아 놓은 상태므로 Error Detection만 가능하다면 Error Correction의 여지가 충분하므로 Error Free라고 할 수 있다.)
Transport Layer와 같이 Flow Control, Error Detection, Error Correction이 가능하다. 하지만 이는 Transport Layer의 것과는 조금은 다르다. Tranposrt Layer는 인터넷 상에서 Logical Connection 상태에서의 Layer 간 전달에서 일어나는 것이고, Data Link Layer에서는 네트워크 내의 기기간 전달에서 일어나는 것이다.
3.
Network (Host to Host / Kernel Space of OS)
상호 간의 네트워킹을 위해 Packet이라는 형태로 출발지에서 목적지로 운송하는 역할을 수행하는 Layer이다.
단순히 목적지까지의 운송 역할만 수행하는 것이 아니라 정확히 따지자면, Network Layer는 Routing과 관련이 있다. (상호 작용이 가능한 네트워크들을 구성하기 위해 독립적으로 운영되는 네트워크를 묶게 되면, 출발지에서 목적지까지 도달하기 위한 여러 경로(Multiple Routes)들이 생긴다. 이 때, Network Layer는 출발지에서 목적지까지 데이터를 보내는데 있어서 가장 좋은 경로를 결정하게 된다. 이렇게 찾아내는 기능 자체를 Routing이라고 보면 된다.)
IP에 해당하는 것들이 Network Layer에 해당하는데, 이 때 IP는 Connectionless이며 단순히 목적지를 찾아가기 위한 용도의 Internetworking 서비스라고 보면 된다. IP 역시 기본적으로는 End-to-End의 Delivery를 보장해주진 않는다. (하지만 최선은 다한다. 이를 Best Effert Delivery라고 한다.) 위에서 언급된 Internetworking이란 일종의 인터페이스 (기기) 간의 Packet 송수신을 말한다. 즉, Endpoint 간의 Packet 송수신이 아니더라도 다른 네트워크의 Gateway 혹은 Router 간의 Packet 송수신도 이에 해당한다.
Network Layer에서 사용하는 주소는 IP Address로 일종의 Logical Address이다. ( 말 그대로 기기에 대한 실질적인 주소는 아니다.) Public IP와 같이 사용되는 IP 주소는 사용자에 대해서 Uniquely, Universally Distinguishable하게 해준다.
4.
Transport (Process to Process / Kernel Space of OS)
신뢰성 보장 등을 위해 정해진 순서대로 메세지를 구성하여 넘겨주어 에러에 대한 발견이나 수정을 수행해줄 수 있는 Layer이다.
Transport Layer의 가장 기본적인 기능은 Unreliable Data Delivery이다. (신뢰성을 보장해주지 않은채로 전달하는 것이 가장 기본적인 기능이라는 소리이다.) 즉, Connection-Oriented Protocol (TCP, SCTP, RTP 등)과 Connectionless Protocol (UDP) 중에서 후자가 Transport Layer의 가장 기본적인 기능을 수행하는 프로토콜이라고 보면 된다.
Connectionless Protocol과 달리 Connection-Oriented Protocol의 주된 5가지 기능은 다음과 같다.
a.
Connection Management (TCP의 경우 3 Hand-Shaking)
b.
Connection Multiplexing (Port를 이용한)
c.
Segmentation (SCTP의 Chuck)
d.
Reliable Delivery
e.
Flow Control(수신 측에서 수행), Congestion Control (송신 측에서 수행)
5.
Session (Peer to Peer / User Space of OS)
Session 대한 생성, 관리, 종료를 담당하는 Layer이다. (Session이라 함은 인간이 일하는 단위를 말한다. 또한 Connection을 담고 있는 것들이라서, 이 Connection을 관리한다.)
Endpoint를 사용하는 사용자 간의 Application Process들 사이에 Session을 열고 닫고 관리하는 메커니즘을 수행한다. 따라서 두 호스트 사이에 첫 Connection을 열기도 하고, 이렇게 열린 Session을 통해서 정해진 시간동안 데이터 송신과 수신을 가능하게 해준다.
예를 들면, VoIP(Voice over IP)에서 사용되는 SIP가 (Session Initiate Protocol) 이에 해당한다.
이러한 Session Layer가 중요한 이유는, Endpoint간 메세지 송신 수신을 진행하면서 Dialog Control(End의 Token을 이용하여 누가 전송할 차례인지에 대한 순서 조정 및 관리)과 Synchronization(Stream으로 들어오는 데이터에 대해서 동기화 지점을 기록)이 가능하도록 만들어주기 때문이다.
이러한 Session Layer에는 여러 경우들이 있는데.
One to Many의 경우 가장 일반적인 경우라고 보면 된다.
6.
Presentation (Peer to Peer / User Space of OS)
데이터에 대한 Translate, Encrypt (Decrypt), Compress (Decompress) 등을 수행하는 Layer이다. (참고로 네트워크에서는 Big Endian을 사용한다.)
데이터를 Network Format에서 Application Format으로 바꾸거나, Application Format에서 Network Format으로 바꾸는 역할을 한다.
예를 들어서 송신 시에 Encoding, Compressing을 작업 했다면, 수신 측에서는 Decoding, Decompressing 작업을 수행한다.
7.
Application (Peer to Peer / User Space of OS)
네트워크 자원에 접근할 수 있도록 해주는 Layer이다.
7개의 Layer 중에서 가장 위에 있는 Layer로써, 사용자와 직접 상호작용을 하며 동작하기 때문에 사용자에게 보이는 부분이다.
송신과 수신을 위한 데이터를 네트워크에 제공하는 역할을 수행한다.
예를 들면 Internet Explorer 혹은 Google Chrome과 같은 Browser가 있을 수 있고, Gmail과 같은 Email Client가 있다.
송, 수신 시에 송신 측에서는 7, 6, 5, 4, 3, 2, 1 계층을 거쳐 수신 측의 1, 2, 3, 4, 5, 6, 7 계층을 지나서 메세지가 전달된다. 이 때의 주고 받는 메세지의 데이터 형식은 아래와 같다.
그렇다면 OSI 7 Layer를 이용했을 때 장점은 무엇이 있을까?
1.
한 계층에서의 수정이 다른 계층에 대한 수정을 야기하는 것을 방지할 수 있다.
2.
산업적으로 표준화를 이끌어 낼 수 있다.
3.
네트워크 통신 과정을 여러 작은 요소로 쪼갬으로써 개발, 디자인, 문제 해결 등을 용이하게 한다.
4.
네트워크 구성 요소의 표준화를 통해 네트워크에 대한 여러 공급 업체를 개발할 수 있다.
5.
네트워크 관리자에게 네트워크 관리를 용이하게 할 수 있다. (문제가 생겼을 때 전체를 탐색하는 것이 아니라 해당 Layer만 찾아보는 식으로 빠르고 효율적으로 대처를 할 수 있다.)
학습 내용에 대한 개인적인 총평
네트워크를 구성하는 프로토콜과 계층에 대해 공부하였다. 하나의 계층을 공부하거나 프로토콜을 공부할 때마다 모르는 단어들이 계속 생겨서 점점 더 공부할게 늘어나서 힘든 부분이였다. 한번 알고 넘어가면 다음 부분을 공부할 때 도움이 많이 되는 핵심적인 부분이다 보니 더 완벽하게 알고 넘어가야겠다고 생각했다. 원리를 알아야 하는 부분도 많았지만 암기를 필요로 하는 부분도 있었다.
다음 학습 계획
다음 며칠동안은 계속 네트워크에 대한 깊은 공부를 이어나갈 계획이다. 네트워크를 끝낸 이후 순차적으로 전처리과정에 대한 공부와 printf에 대한 공부를 할 예정이다.