Skip to content

Network Programming

네트워크 프로그래밍의 상세 분야

네트워크 프로그래밍에 대한 내용을 정리한다.

개발에 앞서, OSI 모델인터넷 프로토콜 스위트에 대한 기본지식이 필요하다.

Category

Game network libraries

These high-level, cross-platform network libraries all look like they’re appropriate for game development:

  • Raknet
  • Ice
  • PocoProject

Here are some other high-level libraries I looked at but don’t think are appropriate:

  • Zoidcom – no pricing available on the site, which is a hassle up front.
  • Torque Network Library (TNL) – no longer supported.
  • TNL2 – also appears dead; GPL license prevents use in commercial game clients.
  • ENet – lacking high-level documentation.
  • ACE – looks dauntingly complex.

And here are some lower-level or more purpose-specific libraries:

  • ZeroMQ – great for server-to-server but I wouldn’t use it for client->server: not robust against hacking.
  • Boost ASIO – solid and complete, but (flame) using boost is a religious issue for some because it is especially hard-to-read C++ code, and can dramatically increase build-time (/flame).
  • LibEvent – doesn’t support Windows well (only uses select, not IOCP).
  • LibEv – doesn’t support Windows
  • Google Protocol Buffers
  • Apache Thrift

AF vs PF

AF 와 PF의 차이점에 대하여 설명한다.

  • PF_INET: 프로토콜 체계(프로토콜 패밀리)중 하나이다.
  • AF_INET: 주소 체계(주소 패밀리)중 하나이다.

프로토콜 패밀리(Protocol Family)는 대표적으로 아래와 같은 종류가 있다. 이 들은 주소 구조체 안에 주소 패밀리를 정의할 때 사용합니다.

PF_INET

IPv4인터넷 프로토콜.

PF_INET6

IPv6인터넷 프로토콜.

PF_LOCAL

LOCAL 통신을 위한 UNIX 프로토콜.

PF_PACKET

Low level socket을 위한 인터페이스.

PF_IPX

IPX 노벨 프로토콜.

주소 체계(Address Family)는 대표적으로 아래와 같은 종류가 있다.

AF_INET

IPv4인터넷 프로토콜.

AF_INET6

IPv6인터넷 프로토콜.

AF_LOCAL

LOCAL 통신을 위한 UNIX 프로토콜.

소켓을 만들 때는 소켓이 사용될 환경을 고려해 프로토콜을 설정해 주어야한다. 다시 말해 프로토콜 패밀리는 소켓을 생성할 때 이 소켓이 어떤 프로토콜을 사용해 통신을 할지 정해준다. 참고로 소켓은 네트워크 통신을 할때만 사용되는 것이 아니다. 유닉스 계열의 시스템에서 시스템 내부의 프로세스들끼리 통신을 하기 위해서도 사용된다. 자주 사용되는 PF_INET는 프로토콜 패밀리중 하나이다. 프로토콜 체계를 나타내는 PF_INET와 주소체계를 나타내는 AF_INET 는 같은 상수 값을 가지고 있다. 그렇다고 해서 주소정보를 설정하는 부분에 PF_INET를 사용하고 프로토콜 패밀리 정보를 설정하는 부분에 AF_INET를 넣는 것은 좋지않다.

결과적으로,

  • 프로토콜 체계를 설정하는 부분은 PF로 시작하는 상수를 사용하고,
  • 주소 체계를 설정하는 부분은 AF로 시작하는 상수를 사용하는 것이 좋다.

실제 코딩 부분에서 socket()에 프로토콜 패밀리에 AF_INET를 넣어도 되지만 PF_INET를 넣는게 바람직하고 sockaddr_in 구조체에 주소 체계를 넣을 때에도 PF_INET 를 넣어도 되지만 AF_INET를 넣는게 바람직하다.

See also

Favorite site

References


  1. Hello_world_»_Understand_TCP_IP_Network_stack.pdf 

  2. Tangentsoft.net-Winsock_Programmers_FAQ.zip