• 05. 소켓을 작성한다

    2021. 9. 28.

    by. ahntree

    728x90

    1. 프로토콜 스택의 내부 구성

    프로토콜 스택은 OS에 내장된 네트워크 제어용 소프트웨어이다. 크게 두 부분으로 나눌 수 있다.

     

     

    1-1. TCP / UDP 프로토콜

    TCP와 UDP 프로토콜을 이용해 데이터를 송 · 수신하는 부분이다. 일반적으로 애플리케이션을 이용한 통신은 TCP를, DNS 서버 조회 같은 짧은 제어용 데이터를 송 · 수신할 때는 UDP를 사용한다.

     

     

    1-2. IP 프로토콜

    IP 프로토콜을 이용하여 패킷 송 · 수신 동작을 제어하는 부분이다. 크기가 큰 데이터를 한 번에 보낼 수 없어 잘게 쪼개서 보내게 되는데 나눈 조각을 패킷이라고 한다. 이 부분 안에는 ICMPARP라는 프로토콜을 다루는 부분도 포함되어 있다.

     

    • ICMP: 패킷 운반 중 발생하는 오류 통지 & 제어용 메시지 통지
    • ARP: IP 주소에 대응하는 이더넷의 MAC 주소를 조사할 때 사용

     

     

     

    2. 소켓의 실체는 통신 제어용 제어 정보

    프로토콜 스택은 내부에 제어 정보를 기록하는 메모리를 가지고 있다. 통신 상대의 IP 주소, 포트 번호, 진행 상태 등이 담겨 있으며 이 정보들을 소켓이라고 봐도 무방하다.

     

    netstat

     

    위는 netstat 명령어를 입력했을 때의 화면이다. 현재 활성화된 소켓들에 대한 정보가 나와 있다. 통신 동작을 제어하기 위한 여러 가지 제어 정보가 담겨 있는 것을 볼 수 있다. 여기에 나와 있는 모든 행이 하나의 소켓을 나타낸다고 보면 된다. 소켓을 만든다는 건 새로운 정보 행을 추가한다는 것과 동일한 의미다.

     

     

    3. Socket을 호출했을 때의 동작

    Socket 라이브러리에서 소켓을 작성하기 위해 socket 프로그램을 호출하면 프로토콜 스택은 먼저 소켓 1개 분량의 메모리 공간을 확보한다. 이후 해당하는 제어 정보를 확보한 공간에 기록하고 초기 상태임을 나타내는 제어 정보 또한 기록한다. 이 과정을 통해 소켓이 만들어진다.

     

    소켓이 만들어지면 애플리케이션에게 소켓의 디스크립터를 알려 준다. 소켓 안에 통신에 필요한 모든 정보가 들어있기 때문에 애플리케이션은 디스크립터만 알고 있으면 통신이 가능해지는 것이다.

     

    728x90

    댓글