Study/Network

[열혈 TCP/IP 소켓 프로그래밍] Chapter3. 내용 확인문제

게임 만드는 나무꾼 2022. 9. 22. 17:58

01. IP주소체계 IPv4와 IPv6의 차이, IPv6의 등장배경

  • IPv4는 4Byte로 표현하는 주소체계, IPv6는 16Byte로 표현하는 주소체계이다.
  • IPv6는 IPv4 주소의 고갈을 염려하여 만들어졌다.

02. 로컬 네트워크까지 데이터가 전달되는 과정

  • IPv4의 Network ID를 통해 라우터까지 데이터가 전송
  • 라우터는 Host ID를 확인해 연결된 컴퓨터에 데이터 전송

03. 소켓의 주소가 IP와 PORT번호 두 개로 구성되는 이유

  • IP는 네트워크 상에서 연결되어 있는 컴퓨터를 식별하기 위한 주소이고, PORT는 OS에서 소켓을 식별하기 위한 주소이다.
  • IP를 통해 컴퓨터에 데이터가 도착하면, PORT를 통해 알맞은 소켓에 OS가 데이터를 보내주게 된다.

04. IP주소 클래스별 차이

  • 클래스는 4Byte중 몇 Byte가 Network ID로 할당되어있는지를 기준으로 나누어진다.
  • 어떤 클래스에 속하는지는 첫 바이트의 값에 따라 경계를 나누어놨으므로 판별 가능
  • 클래스 A의 경우 1Byte가 Network ID이고, 첫 바이트가 0~127이하이다.
  • B의 경우 2Byte할당, 첫 바이트는 129~191
  • C의 경우 3Byte할당, 첫 바이트는 192~223

05. 라우터와 스위치의 역할

  • 네트워크를 통해 전송되는 데이터들의 중계지 역할을 한다.
  • 들어온 데이터의 Host ID를 판별해, 어떤 컴퓨터로 데이터가 전송되어야 하는지 구분하고 전송하는 역할

06. Well-Known PORT란? 또한 이 값의 범위

  • Well-Known PORT란 특정 프로그램을 위해 할당하기로 예약된 PORT번호이다.
  • 0~1023까지의 값이 Well-Known PORT로 할당되어 있다.
  •  http는 80, https는 443, FTP는 21번에 할당되어 있다.

07. 소켓에 주소를 할당하는 bind 함수에서 sockaddr_in을 쓰는 이유

  • sockaddr은 IPv4만을 위한 구조체가 아니다.
  • sockaddr_in을 사용함으로써, 멤버 변수에 IPv4를 위한 데이터를 쉽게 할당할 수 있고, sockaddr이 요구하는 바이트 패턴을 만족시킬 수 있기 때문에 사용한다.

08. 빅 엔디안과 리틀 엔디안, 네트워크 바이트 순서가 무엇이고, 필요한 이유

  • 빅 엔디안과 리틀 엔디안은 메모리에 값을 저장하는 체계이다.
  • Big Endian의 경우 상위 바이트의 값을 메모리의 낮은 주소에 저장하고, Little Endian은 상위 바이트의 값을 메모리의 높은 주소에 저장한다.
  • 네트워크 바이트 순서(Network Byte Order)는 네트워크에서 데이터를 전송할 떄 쓰는 바이트 순서에 대한 약속이다.
  • 아키텍쳐마다 Big Endian을 쓸 수도 있고, Little Endian을 쓸 수도 있으므로, 이를 고려하지 않고 송신자 자신의 Byte Order로 데이터를 전송하면 받는 쪽에서 데이터가 왜곡될 수 있다. 따라서 Big Endian으로 네트워크 바이트 순서를 정하고 네트워크 통신 시 이 순서를 지켜 전송한다.

09. 빅 엔디안을 사용하는 컴퓨터에서 4Byte 12라는 값을 리틀 엔디안 기반 컴퓨터에 전송할 때의 과정

  1. Big-Endian이므로 0x0000000C 로 12가 메모리에 저장
  2. Network Byte Order는 Big-Endian이므로 그대로 전송
  3. Little Endian 컴퓨터에서는 Network Byte Order로 전송된 데이터를 ntohs함수를 통해 0x0C000000로 변환

10. 루프백 주소가 무엇이고, 어떻게 표현되는가?

  • 루프백 주소는 시스템 자신의 IP주소를 의미하며, 127.0.0.1이다.
  • 루프백 주소로 데이터를 전송하면, 다른 컴퓨터에서 전송된 것과 같은 방식으로 작동하지만, 결과적으로 자신이 데이터를 받게 된다.