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

in ipv4 •  6 years ago  (edited)

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주소를 넣어도 똑같이 동작한다. 루프백 주소로 데이터를 전송하면, 데이터를 전송한 컴퓨터와 동일한 컴퓨터에 데이터가 저장된다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @syou! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!