열혈 TCP/IP 소켓 프로그래밍 내용 확인문제 chap.03

1. IPv4와 IPv6의 차이점

IPv4는 4바이트 주소 체계이고 IPv6는 16바이트 주소 체계이다. IPv4로 표현할 수 있는 IP주소의 수는 약 43억 개인데, 이것이 고갈되기 시작하면서 IPv6이 등장하였다.

2. IPv4의 네트워크 부/호스트 부

IPv4 기준으로 IP주소는 네트워크 부호스트 부로 이루어져 있다. IP주소의 형태에 따라서 A,B,C,D,E 클래스로 분류되는데, 클래스 A,B,C의 특징은 문제 4의 <표>와 같고, 클래스 D는 멀티캐스트 IP주소이며, 클래스 E는 예약되어 있는 주소체계이다. 개인 컴퓨터로 전송된 데이터는 먼저 네트워크 주소를 보고 그 컴퓨터가 속한 네트워크로 전달된다. 해당 네트워크를 구성하는 라우터는 호스트 주소를 보고 전달받은 데이터를 최종 수신자에게 전달한다.

3. IP/PORT

개인 컴퓨터로 데이터를 전송할 때 먼저 IP주소의 네트워크 주소를 이용해서 해당 네트워크로 전송하고, 해당 네트워크를 관장하는 라우터는 호스트 주소를 참조해서 알맞은 수신자에게 전달한다. IP주소를 이용하면 이렇게 컴퓨터까지 데이터를 전달할 수 있지만, 최종 목적지에 해당하는 응용 프로그램까지 전달할 수는 없다. 우리는 컴퓨터를 사용하면서 한 가지 일만 진행하지 않는다. 예를 들어, 게임을 하면서 동영상 스트리밍을 할 수 있고, 친구와 메신저를 주고받을 수도 있다. 이렇듯 컴퓨터를 사용하면서 여러 서버와 통신하기 때문에 데이터를 최종 목적지까지 잘 전달하려면 IP주소 외에 또 다른 정보가 필요하고, 이것이 PORT번호이다. PORT번호를 이용하면 데이터를 최종 목적지인 응용 프로그램까지 전달할 수 있다.

4. IP주소의 클래스

C,A,B

클래스네트워크 주소 길이호스트 주소 길이IP주소 첫 번째 바이트 범위
A1 byte3 byte0-127
B2 byte2 byte128-191
C3 byte1 byte192-223

5. 라우터/스위치

외부로부터 전달받은 데이터를 호스트에게 전달하고, 호스트가 전달하고자 하는 데이터를 외부로 보내는 역할을 한다.

6. Well-known PORT

Well-known PORT란 특정 프로그램에 이미 할당되어진 포트 번호를 뜻하며 0-1023번 포트를 뜻한다. HTTP는 80, FTP는 20,21번이다. 포트 번호는 0부터 65535까지의 값을 가진다.
TCP/UDP의 포트 목록

7. sockaddr_in 구조체

sockaddr 구조체를 보면 다음과 같다

struct sockaddr
{
  sa_family_t   sin_family;
  char   sa_data[14];
}

sa_data안에 port번호와 IP주소를 넣어야 하는데 사용하기 불편하게 되어있다. 이를 IPv4기준으로(port 번호 2바이트, IP주소 4바이트) 동일한 바이트 열을 편하게 구성할 수 있도록 만든 것이 sockaddr_in 구조체이다.

struct sockaddr_in
{
  sa_family_t   sin_family;
  unit16_t   sin_port; //16비트
  struct   in_addr sin_addr; //32비트
  char   sin_zero[8] // 0으로 채워줘야 한다.
}

struct in_addr
{
  in_addr_t  s_addr;
}

8. 빅 엔디안(Big Endian)/리틀 엔디안(Little Endian)

엔디안은 1차원 공간에서 데이터를 배열하는 방식을 뜻하며, 빅 엔디안은 작은 수가 뒤에 오는 방식이고 리틀 엔디안은 작은 수가 앞에 오는 방식이다. 이를 메모리에 저장된 데이터의 관점에서 설명하면, 작은 단위의 수가 큰 번지수에 저장되면 빅 엔디안, 작은 번지수에 저장되면 리틀 엔디안이다. 따라서 같은 숫자라도 빅 엔디안 시스템과 리틀 엔디안 시스템에서 서로 다르게 해석되기 때문에 이러한 문제를 해결하고자 네트워크 바이트 순서를 빅 엔디안 방식으로 규정하고 있다.

9. 빅 엔디안(Big Endian)/리틀 엔디안(Little Endian)

네트워크 바이트 순서는 빅 엔디안 방식을 따르기 때문에 빅 엔디안을 사용하는 컴퓨터에서 데이터를 보낼 때는 그대로 전송하면 된다. 수신처가 리틀 엔디안 방식을 사용하더라도 전송받은 데이터가 빅 엔디안을 사용한다는 사실을 알고 있기 때문에, 이를 고려하여 데이터의 순서를 뒤집어서 사용하면 된다.

10. 루프백 주소(loopback address)

127.0.0.1로 표현되며 이는 컴퓨터 자신의 주소를 의미한다. 하나의 컴퓨터가 서버 겸 클라이언트로 동작할 때 사용되며 루프백 주소 대신에 컴퓨터의 실제 IP주소를 넣어도 똑같이 동작한다. 루프백 주소로 데이터를 전송하면, 데이터를 전송한 컴퓨터와 동일한 컴퓨터에 데이터가 저장된다.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now