IT엔지니어를 위한 네트워크 입문을 공부하고 정리한 내용입니다.
1. 프로토콜
프로토콜은 인터넷상에서 데이터를 주고받기 위한 규약이다.
데이터를 송수신하는 방식과 데이터의 형식 등을 명시한다.
최근에는 복잡하고 산재되어 있던 여러 가지 프로토콜이 이더넷-TCP/IP 기반 프로토콜들로 뭉치고 있다.
- 물리적 측면 : 데이터 전송 매체, 신호 규약, 회선 규격 등. → 이더넷이 널리 사용됨.
- 논리적 측면 : 장치들끼리 통신하기 위한 프로토콜. → TCP/IP가 널리 사용됨.
TCP/IP는 프로토콜이라긴보단 프로토콜 스택에 해당한다.
함께 사용되는 프로토콜들의 집합을 뜻한다.

2. OSI 7계층
현재는 대부분의 프로토콜이 TCP/IP 프로토콜 스택 기반으로 한다.

하지만 여전히 OSI 7 계층은 네트워크 동작을 나눠 이해하고 개발하는데 도움이 된다.
과거 통신용 규약이 표준화되지 않았던 시절 서로 간의 호환성이 나빴다.
이를 해결하고자 국제 표준화 기구(ISO)에서 개발했다.
총 7계층 구성으로 구성되어 있다.
- 1 ~ 4 계층 : 데이터 플로 계층 / 하위 계층
- 5 ~ 7 계층 : 애플리케이션 계층/상위 계층
계층별 PDU(Protocol Data Unit)

1 계층(피지컬 계층)
물리적 연결과 관련된 정보를 정의한다.
전기 신호를 그대로 잘 전달하는 것이 목적이다.
전기 신호가 들어오면 재생성하여 내보낸다.
주소의 개념이 없어서 전기 신호가 들어온 포트를 제외하고 모든 포트에 재생성한 전기 신호를 전송한다.


트랜시버
2 계층(데이터 링크 계층)
전기 신호를 우리가 알아볼 수 있는 데이터의 형태로 처리한다.
주소 정보를 정의하고 정확한 주소로 통신하는 것이 목적이다. (MAC 주소라고 한다.)
1 계층과 달리 2 계층은 출발지와 도착지 주소를 확인하고 자신이 처리해야 하는지 확인한 후에 데이터를 처리한다.
전기 신호를 모아서 데이터 형태로 처리하므로 데이터에 대한 에러를 탐지하고 고치는 역할을 수행하기도 한다.
이더넷 기반 네트워크 2 계층에서는 에러를 탐지하는 역할만 수행한다. (← 과거에 비해서 네트워크 환경이 개선됨)
주소를 정의함에 따라서 여러 명과 동시에 통신할 수 있고 여러 명이 망을 공유한다.
통신하고자 할 때 공유하고 있는 망을 사용할 수 있는지 확인하는 작업을 수행해야 한다.
이를 플로 컨트롤(flow control)이라고 한다.

3 계층(네트워크 계층)
IP 주소와 같은 논리적인 주소가 정의됩니다.
2 계층의 물리적 주소인 MAC와 더불어 데이터 통신을 위해서 사용됩니다.
또한 조금 더 복잡하고 멀리 위치한 목적지로 찾아갈 수 있는 경로 지정 능력이 있다.

4 계층(트랜스포트 계층)
하위 계층인 1, 2, 3 계층은 신호와 데이터가 올바른 위치로 보내고 받는 것에 초점을 둔다.
하지만 4 계층은 실제 해당 데이터들이 정상적으로 잘 보내지도록 확인하는 역할을 수행한다.
패킷이 유실되거나 순서가 바뀐 경우에 4 계층에서 해결한다.
패킷을 보내는 순서 Sequence Number와 받은 순서 Acknowledgement Number을 사용한다.
또한 포트 번호를 사용해서 데이터가 오고 갈 상위 애플리케이션을 구분합니다.

5 계층(세션 계층)
양 끝단의 응용 프로세스가 연결을 성립하도록 돕고 연결이 안정적으로 유지되도록 관리하고 작업이 완료되면 연결을 끊는다.
에러로 중단된 통신에 대한 에러 복구와 재전송도 수행한다.
6 계층(프레젠테이션 계층)
표현 방식이 다른 애플리케이션이나 시스템 간의 통신을 돕기 위해서 하나의 통일된 구문 형식으로 변환, 번역한다.
MIME 인코딩, 암호화, 압축, 코드 변환과 같은 동작이 여기에 해당된다.
7 계층(애플리케이션 계층)
애플리케이션 프로세스를 정의, 서비스한다.
대표적인 프로토콜로 FTP, SMTP, HTTP, TELNET이 있다.
3. TCP/IP
TCP/IP는 프로토콜이라기 보단 프로토콜 스택에 해당한다.
함께 사용되는 프로토콜들의 집합을 뜻한다.


출처 : https://fiberbit.com.tw/tcpip-model-vs-osi-model/
4. 인캡슐레이션과 디캡슐레이션
현대의 네트워크는 대부분 패킷 기반 네트워크로 하나의 통신이 회선 전체를 점유하지 않고 동시에 여러 단말이 통신할 수 있다.
데이터를 패킷으로 쪼개고 네트워크를 이용해 목적지로 보내고 받는 쪽에서는 이를 다시 큰 데이터 형태로 결합해 사용한다.
애플리케이션에서 생성한 데이터를 데이터 플로 계층(1~4 계층)으로 내려보내면서 데이터를 쪼개고 네트워크 전송을 위한 정보를 헤더에 붙인다.
이 과정을 인캡슐레이션이라고 한다. (Encapsulation****)****
아래는 네트워크를 통해서 단말에서 단말로 데이트를 전송하는 과정이다.

출처 : https://slideplayer.com/slide/14026373/
받는 쪽에서는 디캡슐레이션(Decapsulation)을 수행한다.
2 계층에서 2계층 헤더를 확인하고 MAC 주소를 확인하고 자신에게 온 패킷인지 확인한다.
확인한 자신에게 온 패킷이 맞다면 헤더는 제거하고 나머지 정보를 상위 계층으로 전달한다.
3 계층에서는 IP주소를 확인해 자신에게 온 패킷인지 확인한다.
확인한 자신에게 온 패킷이 맞다면 헤더는 제거하고 나머지 정보를 상위 계층으로 전달한다.
4 계층에서는 데이터를 올바른 상위 애플리케이션의 포트로 전달한다.
상위 계층 → 하위 계층, 하위 계층 → 상위 계층의 과정을 거쳐서 데이터가 전달된다.
가. 상위 프로토콜 지시자
각 계층의 헤더에 두 가지 정보는 반드시 포함
- 현재 계층에서 정의하는 정보
- 상위 프로토콜 지시자
필요한 이유.
디캡슐레이션의 경우 인캡슐레이션과는 달리 별다른 지정이 없으면 어떤 상위 프로토콜로 전달할지 알 수 없다.
동작하는 계층보다 한 계층 위의 정보가 제공할 필요하다.
