[42CM] Network Protocol과 소켓 통신

·2024년 6월 22일

프로젝트-42CM

목록 보기
7/9
post-thumbnail

네트워크 통신의 기본 개념

인터넷이나 로컬 네트워크에서 컴퓨터, 스마트폰, 서버 등의 장치들이 서로 데이터를 주고받기 위해서는 네트워크 통신이 필요합니다. 이를 가능하게 하기 위해 다양한 규칙과 표준이 존재하는데, 이를 프로토콜이라고 부릅니다. 프로토콜은 데이터를 어떻게 포맷하고, 송수신하며, 오류를 처리할지 등을 정의합니다.

OSI 모델의 개요

네트워크 통신에서는 여러 종류의 프로토콜이 계층적으로 나누어져 작동합니다. 이 계층 구조를 OSI 모델(Open Systems Interconnection Model)이라고 합니다. OSI 모델은 7계층으로 구성되어 있으며, 각 계층은 특정한 네트워크 기능을 담당합니다.

물리 계층(1계층): 물리적인 하드웨어 연결을 다루는 계층.
데이터 링크 계층(2계층): 물리적으로 연결된 네트워크 장치 간의 데이터 전송을 처리.
네트워크 계층(3계층): 서로 다른 네트워크 간의 데이터 전송을 처리. 예: IP(Internet Protocol).
전송 계층(4계층): 장치 간의 데이터 전송의 신뢰성을 보장. 예: TCP, UDP.
세션 계층(5계층): 통신 세션을 관리.
표현 계층(6계층): 데이터 형식 변환을 담당.
응용 계층(7계층): 사용자가 접근할 수 있는 최종 애플리케이션을 처리.

추가로,

현대 네트워크에서는 TCP/IP 프로토콜 스위트(TCP/IP Protocol Suite)가 실질적으로 널리 사용되고 있습니다.
TCP/IP 프로토콜 스위트는 4계층 모델로, 각 계층은 네트워크 통신의 특정 기능을 담당합니다.

네트워크 인터페이스 계층(Network Interface Layer)
물리적 네트워크 인터페이스와 데이터 링크 계층 프로토콜을 처리합니다. OSI 모델의 물리 계층과 데이터 링크 계층에 해당합니다.

인터넷 계층(Internet Layer)
IP 주소를 사용하여 패킷을 라우팅하며, 주로 IP 프로토콜이 이 계층에서 작동합니다. 이는 OSI 모델의 네트워크 계층과 유사합니다.

전송 계층(Transport Layer)
호스트 간의 데이터 전송을 관리합니다. TCP와 UDP 같은 프로토콜이 이 계층에서 사용됩니다. 이는 OSI 모델의 전송 계층과 일치합니다.

응용 계층(Application Layer)
사용자와 네트워크 간의 인터페이스를 제공하며, HTTP, FTP, SMTP와 같은 프로토콜이 포함됩니다. 이는 OSI 모델의 응용 계층, 표현 계층, 세션 계층을 포함한 상위 계층 기능을 포괄합니다.


전송 계층과 주요 프로토콜

전송 계층(Transport Layer)은 데이터가 송신자에서 수신자로 신뢰성 있게 전달되도록 하는 중요한 역할을 합니다. 이 계층에서는 TCP와 UDP와 같은 프로토콜을 사용하여 데이터의 전송 방식을 결정합니다.


TCP란?

TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장하는 프로토콜입니다. 이는 연결 지향적이며, 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정합니다. 데이터가 손실되면 재전송하며, 올바른 순서로 데이터를 전달합니다. 웹 브라우징, 파일 다운로드 등에서 사용됩니다.


UDP란?

UDP(User Datagram Protocol)는 비연결 지향적이며, 빠르고 간단한 데이터 전송을 위한 프로토콜입니다. UDP는 데이터 전송의 신뢰성을 보장하지 않기 때문에 패킷이 손실되거나 순서가 뒤바뀔 수 있습니다. 그러나 낮은 오버헤드와 빠른 전송 속도가 필요할 때 유용합니다. 실시간 스트리밍, 온라인 게임, 화상 회의 등에서 UDP가 자주 사용됩니다.

전통적인 HTTP 통신 방식은 클라이언트가 요청을 보내고 서버가 응답을 보내는 방식으로 이루어집니다. 그러나 실시간으로 데이터를 주고받아야 하는 애플리케이션에서는 이 방식이 효율적이지 않을 수 있습니다. 이를 해결하기 위해 WebSocket 프로토콜이 도입되었습니다.


WebSocket 프로토콜이란?

WebSocket은 TCP를 기반으로 한 프로토콜로, 클라이언트와 서버 간에 지속적인 양방향 통신을 가능하게 합니다. WebSocket 연결은 한 번 설정된 후 계속해서 열려 있어, 클라이언트와 서버가 실시간으로 데이터를 주고받을 수 있습니다. 이 방식은 채팅 애플리케이션, 실시간 알림 시스템, 게임 등에서 매우 유용합니다.


iOS에서는 소켓 통신을 어떻게 구현할까?

여러가지 방법이 있습니다. 직접 구현해보는 방법이 일단 첫번째입니다. 베스트라고 생각하지만 시간이 부족하다거나 난이도가 어렵다고 생각드신다면 라이브러리를 사용해보는 방법이 있습니다. SocketIO, Starscream 등이 있어서 장단점을 잘 찾아서 골라 사용해보시면 될 것 같습니다.
42CM에서는 빠른 개발을 위해 SocketIO를 통해 구현하였는데, 추후 라이브러리 의존성을 없애고 직접 구현해볼 예정입니다 :)

0개의 댓글