210122 개발일지(46일차) - 컴퓨터 시스템 11장 웹서버 프로젝트(2) : 소켓(socket) 인터페이스, Network Byte Order

고재개발·2021년 1월 22일
0

Computer System

목록 보기
9/13

Network Byte Order

네트워크 바이트 순서는 빅엔디안(Big-Endian) 방식만 사용하기로 약속돼있다.
왜냐하면 CPU에 따라 byte를 읽어들이는 순서가 다른데(빅엔디안, 리틀엔디안) 이를 통일하기 위해 네트워크 바이트 순서는 반드시 빅엔디안이다.
빅엔디안과 리틀엔디안에 대한 설명은 아래 블로그에 설명이 잘 돼있다.
https://jhnyang.tistory.com/226

소켓 인터페이스(Socket Interface)

  • 소켓(socket)은 전산분야에서, 소프트웨어로 구현시킨 추상적인 '포트(port)'를 말한다.
  • 소켓 인터페이스는 함수들의 집합이라고 생각하면 된다. 이는 각 운영체제들(window, unix, mac등)에 대부분 구현되어 있다고 한다. 즉 socket(), bind(), connect(), listen, accept()등을 포함한다.
    또, 이 자체는 TCP/IP 표준이 아니다.

0. 소켓 주소 구조체(sockaddr)

우리가 위에 언급한 bind(), connect() 등의 함수를 사용하기 위해서는 소켓 주소가 필요하다. 이를 통상적으로 sockaddr_in과 sockaddr 구조체로 만들어 활용

1. socket()

소켓 descriptor를 만들기 위해 사용

2. bind()

소켓 descriptor를 지정된 IP주소/포트번호와 결합

3. listen()

클라이언트의 접속 요청 대기

4. accept()

클라이언트의 접속 허용

5. connect() 

클라이언트가 서버에 접속 요청

이 외에도 더 많은 함수들이 있다.

소켓의 종류

소켓의 종류는 더 있다고 하지만 대표 3가지만 알아보자.

1. 스트림(Stream) 소켓

스트림 소켓은 양방향으로 바이트 스트림을 전송 할 수 있는 연결 지향형 소켓으로 양쪽 어플리케이션이 모두 데이터를 주고 받을 수 있다는것을 의미한다. 스트림소켓은 오류수정,전송처리,흐름제어등을 보장해 주며 송신된 순서에 따른 중복되지 않은 데이터를 수신하게 된다. 이 소켓은 각 메세지를 보내기 위해 별도의 연결을 맺는 행위를 하므로 약간의 오버헤드가 존재한다. 그러므로 소량의 데이터보다는 대량의 데이터를 보내는 경우에 적당하다. 스트림소켓은 이러한 품질의 통신을 수행하기 위해서 TCP를 사용한다.

2. 데이터그램(Datagram) 소켓

명시적으로 연결을 맺지 않으므로써 비연결형 소켓이라고 한다. 메세지는 대상 소켓으로 전송되며 대상 소켓은 메세지를 적절히 수신한다. 스트림소켓을 사용하는것이 데이터그램 소켓을 사용하는것보다 더 신뢰성이 높은 방법이지만 연결을 수립하는데 드는 오버헤드는 무시할 수 없다. 데이터그램 소켓을 사용하려면 클라이언트에서 서버로 데어터를 전송할 때 UDP를 사용한다. 이 프로토콜에서는 메세지의 크기에 약간의 제한이 있으며 메세지의 확실한 전달 역시 보장하지 않으며 통신 중 데이터를 읽어 버리더라도 오류를 되돌리지 않는다.

3. 로우(Raw) 소켓

RAW소켓은 패킷을 가져오면 TCP/IP스택상의 TCP,UDP계층을 우회하여 바로 어플리케이션으로 송신하는 소켓이다. 이런 소켓에서 패킷은 TCP/IP필터를 통해 전달 되지 않으으로 원형 그대로의 패킷을 볼 수 있다. 이는 모든 데이터를 적절히 처리하거나 헤더를 제거하고 이를 파싱하는 과정은 모두 수신 어플리케이션에서 담당해야 하는 것이다. 실제 RAW소켓을 이용하여 프로그래밍을 하는 일은 거의 드물며 만약 시스템 소프트웨어나 패킷을 분석하는 프로그램을 개발할 경우 필요 할수도 있다.

profile
고재개발

0개의 댓글