각 OSI 계층별 상세 정리 및 소켓 프로그래밍에 대한 정리 입니다.
물리 계층(Physical Layer)은 네트워크 통신에 필수적인 물리매체를 나타낸 계층입니다.
정보를 전달하는 매체에 따라 유도매체와 비유도매체로 구별되고 세부내용은 다음과 같습니다.
유도매체로는 꼬임쌍선(Twisted-Pair): 2개의 절연체를 꼬아서 전기간섭을 최소화 한 선입니다.
UTP(Unshielded Twisted Pair)는 금속으로 보호하지 않은(즉, 전선 두 가닥을 단순히 꼬아서 만든)선을 말합니다. 오늘날 랜 선은 대부분 UTP를 사용합니다.
STP(Shielded Twisted Pair)는 금속으로 보호해서 차폐를 한 선을 말합니다.
기업에서는 랜 선의 전기간섭도 치명적일 수 있기 때문에, STP를 사용하는 편입니다.
이외에도 동축 케이블(Coaxial Cable), 광섬유(Fiber Optics)도 자주 사용되며, 해저 케이블은 속도와 보안의 측면때문에, 고속 광섬유에 금속막을 수십겹을 덧대서 사용합니다
TP는 전송속도와 대역폭으로 카테고리(CAT)를 나누어 사용되고 있습니다.(CAT.5, CAT.5e, CAT.6등)
비유도매체로는 전파(Radio Wave)를 사용하는 Radio Channel(라디오 및 무선 전화) 및 Wi-Fi Channel이 있습니다.
일반적으로 장파(주기가 긴 전파)는 에너지 손실이 적어 멀리까지 전송되지만 전송 량이 적은 대신에 단파(주기가 짧은 전파)는 빠르게 에너지 손실이 일어나 거리가 짧아지지만 전송 량이 높아서 최신 기술은 이 둘의 장점을 다양하게 활용하여 고속 전송 기술을 고안하고 있습니다.
링크 계층(Link Layer)은 물리 계층과 네트워크 계층을 연결하는 계층으로 물리적으로 연결된 두 장치의 통신을 가장 LowLevel로 수행하는 계층이라 볼 수 있습니다.
링크 계층의 PDU는 프레임(Frame)으로 대표적인 프로토콜로는 Ethernet, Wi-Fi가 있습니다.
링크 계층이 가지는 채널로는 다음 네 가지가 있습니다
브로드캐스트 채널(Broadcast Channel)
하나의 송신자가 여러 수신자에게 데이터를 전송하는 방식입니다.
브로드캐스트 프레임은 연결된 모든 장치에 전파되며, 각 L2수신자는 자신에게 해당된 프레임이라 판단되면 받아서 넘기거나 처리하고 아니면, 폐기하는 방식을 사용합니다.
점대점 통신 링크(Point-to-Point Communication Link)
하나의 송신자가 하나의 수신자에게 데이터를 전송하는 방식입니다. 둘 사이의 전용채널을 구성/사용하는 구조이기 때문에 독립적이고, 높은 안정성과 신뢰성을 가집니다. 점대점 연결은 PPP, PPTP, L2TP등의 프로토콜로 주로 VPN에 사용됩니다.
멀티캐스트 채널(Multicast Channel)
하나의 송신자가 특정한 수신자 집단에 데이터를 전송하는 방식입니다.
애니캐스트 채널(Anycast Channel)
하나의 송신자가 가장 가까운 수신자에게만 데이터를 전송하는 방식입니다.
링크계층 프로토콜을 사용하는 장치들을 노드(Node)라고 표현하고,
노드를 연결하는 통신채널을 링크(Link)라고 표현합니다.
네트워크 계층(Network Layer)은 호스트를 구별하는 프로토콜인 IP를 사용하여 둘 이상의 호스트가 상호 통신이 가능하도록 연결해서 TCP/UDP 소켓을 효율적으로 사용할 수 있도록 해주는 계층입니다.
네트워크 계층의 PDU는 데이터 그램(Data Gram)으로 대표적인 프로토콜은 IPv4, IPv6가 있습니다.
L1과 L2계층은 랜 선과 랜 카드에 가까운 물리적인 연산을 수행하지만,
L3계층은 이 보다는 조금 더 소켓에 가까운 프로그래밍을 수행 할 수 있고,
모든 호스트를(IP를 통해) 구별 할 수 있는 가장 낮은 Layer입니다.
IPv4는 (10진법 0 ~ 255) 세 자리(8비트) * 4 로 구성되어 총 32비트 길이입니다 (대략 43억 개)
이 중에서 192.168.X 나 127.0.0.1, 0.0.0.0등의 선 정의된 IP들이 이미 있거나 여타 규칙으로 인한 사용불가 IP들이 있기 때문에, 공인IP로 할당가능한 경우의 수는 조금 더 줄어들어 모든 장치마다 하나씩 할당하기에는 무리가 있어 오늘날에는 IPv6나 DHCP등을 적절히 활용하는 편입니다.
IPv6는 (16진법 0 ~ FFFF) 네 자리(16비트) * 8 로 구성되어 총 128비트 길이입니다 (대략 43억의 4승 개)
DHCP는 L3에서 IP를 편하게 관리(할당 및 연결)를 수행해주는 프로토콜로
오늘날 IPv4의 한계점이 눈에 띄게 보이면서 점점 더 사용비중이 늘어나는 네트워크 프로토콜입니다.
트랜스포트 계층(Transport Layer)은 서로 다른 호스트에서 동작하는 응용 계층 프로세스들 간의
논리적 통신을 제공해주는 계층입니다.
L1, L2, L3까지는 물리적 ~ 호스트 특정까지 수행해주기 때문에,
L4계층은 실질적인 논리 통신을 수행하게 해주는 계층이라 볼 수 있습니다.
L3까지는 최선형(Best-effort) = 즉 안전한 통신을 노오력 하지만 보증은 못하는 프로토콜이기 때문에,
L4계층에서는 이를 완전하게 보장하도록 프로토콜을 설계합니다(신뢰적 전달 보장이라고 표현함)
트랜스포트 계층의 PDU는 세그먼트(Segment)로 대표적인 프로토콜은 TCP, UDP가 있습니다
TCP(Transmission Control Protocol)는 전송제어 프로토콜의 표준으로
L4계층에서 신뢰적 전달을 보장하는 프로토콜이기에, 대부분의 통신이 TCP를 사용하는 편입니다
UDP(User Datagram Protocol)는 사용자 데이터 그램 프로토콜로
L3계층의 데이터 그램을 거의 그대로 넘기는 것에 초점을 맞춘 프로토콜이기에,
PDU의 크기가 보다 작고(헤더가 작고) 비 신뢰적 전달 프로토콜의 특성을 지녀서
데이터를 빠르게 보내는 경우나 안정적인 네트워크 통신이 보장된 경우,
실시간(시간 민감)정보를 받아와야 하는 경우에 많이 사용합니다.
L4계층 부터는 소켓이라는 논리구조를 가지고 프로그래밍 할 수 있는 계층입니다
응용 계층(Application Layer)은 호스트가 사용하는 프로그램이 해당 정보를 사용가능 하도록, 또는 정보를 사용하는 규칙을 정하는 계층입니다.
L4까지는 신뢰적 전달이 보장되고 데이터는 바로 사용가능한 상태로 올 것이기 때문에,
L5는 데이터 포맷(형식)을 정하는 규약이라 볼 수도 있습니다.
응용 계층의 PDU는 메시지(Message)로
대표적인 프로토콜에는 HTTP(S), DNS, SSH, (S)FTP, SMTP등이 있습니다
HTTP(Hyper Text Transfer Protocol)는 오늘날 웹 프로토콜로 유명한 HTTP/1.1으로
요청 메소드(GET,POST,PUT,DELETE)와 헤더(Header), 바디(Body)로 구성되며
주로 사용하는 Json데이터 및 HTML내용은 바디에 들어가고 쿠키는 헤더에 넣고 요청을 보냅니다.DNS(Domain Name System)는 호스트의 IP식별을 도메인(별칭)으로도 사용 가능하도록,
일대일 대응 시켜주는 프로토콜입니다.SSH(Secure SHell)은 기존 원격 쉘에 사용한 프로토콜인 Telnet의 보안 취약점(리버스 쉘, MITM공격)등에 의해 키 페어를 사용한 암호접근과 SL(Secure Layer)등을 첨가하여 보안을 강화한 원격 쉘 전용 프로토콜입니다.
SFTP(Secure File Transfer Protocol)은 기존 파일 전송 프로토콜(FTP)의 보안 취약점(MITM공격, 방화벽 우회)등에 의해 SSH프로토콜의 힘을 일부 빌려 보안을 강화한 파일 전송 전용 프로토콜입니다.
SMTP(Simple Mail Transfer Protocol)은 메일 전용 프로토콜로 HELO, MAIL FROM, RCPT TO 등의 요청을 보냅니다.
소켓 프로그래밍은 L4 세그먼트와 L3의 데이터 그램을 추상(논리)화하여 사용하는 프로그래밍 방법으로 언어에서 제공하는 소켓관련 함수들을 잘 활용해서 L3, L4를 비교적 간단하게 조작하며, L5의 메시지를 작성하거나 읽을 수 있도록 할 수도 있습니다.
소켓 프로그래밍은 크게 네 가지로 추상화 해볼 수 있습니다.
소켓을 생성(Create)
소켓파일을 생성합니다.소켓을 실제 커널(IP:Port)에 빙의(Bind)
커널을 직접 만질 수는 없기 때문에 소켓을 빙의 하도록 요청을 보냅니다.타인의 소켓을 내 커널에 부착(Accept)
Listen을 통해 무한대기를 타다가 타인이 다가오면, 빙의 한 커널에 데이터가 보내지도록 세팅합니다.또는 내 소켓을 타인의 소켓에 부착(Connect)
Listen중인 서버 소켓에 접속해서 연결상태로 만듭니다.소켓을 통한 정보 송수신(Send/Recv)
연결된 두 소켓을 파일 입출력 방식으로 정보를 송수신 합니다.소켓을 소멸(Close)
다 쓴 소켓을 커널로부터 분리시키고 제거합니다