본문 바로가기
CS/네트워크

[윤성우의 열혈 TCP/IP 소켓 프로그래밍] 주소체계 & 데이터 정렬

by merona99 2019. 2. 2.
반응형

주소체계 & 데이터 정렬

 

 

IPv4 기준의 4바이트 IP주소는 트워크 주소호스트 주소로 나뉨

 

라우터&스위치 : 외부로부터 수신된 데이터를 호스트에 전달하고, 호스트가 전달하는 데이터를 외부로 송신해주는 물리적 장치

(스위치 : 라우터보다 기능적으로 작은 것)

  • 클래스 A의 첫 번째 비트는 항상 0으로 시작
  • 클래스 B의 첫 두 비트는 항상 10으로 시작
  • 클래스 C의 첫 세 비트는 항상 110으로 시작

IP는 데이터를 NIC(네트워크 인터페이스 카드)을 통해 컴퓨터 내부로 전송하는데 사용

운영체제는 PORT 번호를 활용하여 컴퓨터 내부로 전송된 데이터를 소켓에 적절히 분배하는 작업을 함

 

*PROT번호는 하나의 운영체제 내에서 동일한 PORT번호를 둘 이상의 소켓에 할당할 수 없음.

but TCP소켓과 UDP소켓은 PORT번호를 공유하지 않기 때문에 중복되어도 상관없음.

 

 

<구조체 sockaddr_in의 멤버>

 

IPv4의 주소정보를 담기 위해 정의된 구조체

 

 

1. sin_family : 주소체계 ex) AF_INET(IPv4)

2. sin_port : 16비트 TCP/UDP PORT번호

네트워크 바이트 순서로 저장

3. sin_addr : 32비트 IP주소

네트워크 바이트 순서로 저장

4. sin_zero[8] : 0으로 두면됨 (사용x)

 

 

<바이트 순서 & 네트워크 바이트 순서>

 

(cpu에 따라 다르게 저장)

빅 에디안 : 상위 바이트의 값을 작은 번지수에 저장하는 방식

리틀 에디안 : 상위 바이트의 값을 큰 번지수에 저장하는 방식

호스트 바이트 순서 : cpu별 데이터 저장방식을 의미

네크워크 바이트 순서 : 통일된 데이터 송수신 기준

 

*네트워크 에서는 빅 에디안 방식으로 통일함

 

 

<바이트 순서의 변환>

  • unsigned short htons (unsigned short)
  • unsigned short ntohs (unsigned short)
  • unsigned long htonl (unsigned long)
  • unsigned long ntohl (unsigned long)
ex) htons에서
h = 호스트(host) 바이트 순서
n = 네트워크(network) 바이트 순서

s = PORT번호의 변환에 사용

l = IP주소의 변환에 사용

 

 

//이러한 변환은 자동으로 된다고 한다... 다행이 아닐 수 없다 ㅠㅠ

이거 다 하나씩 변환할 생각하면 ...;; 끔찍.

 

 

 

 

<문자열 정보를 네트워크 바이트 순서의 정수로 변환>

 

사람이 보기편한게 문자열 형식의 123.123.123.12

소켓에 넣어줄려면 정수 형식이 필요함

따라서 변환해 주는 함수가 필요

 

  • in_addr_t inet_addr(const char * string);

성공 시 빅 에디안으로 변환된 32비트 정수 값 반환

(IP주소 초기화)

*INADDR_ARY = 재 실행중인 컴퓨터의 IP를 소켓에 부여할 때 사용되는 것

 

  • int inet_aton(const char * string, struct in_addr * addr);

string : 변환할 IP주소 정보를 담고 있는 문자열의 주소 값 전달

addr : 변환된 정보를 저장할 in_addr 구조체 변수의 주소 값 전달

(PORT번호 초기화)

 

  • char * inet_ntoa(struct in_addr adr);
성공 시 변환된 문자열의 주소 값 반환

inet_aton 함수의 반대기능 = 정수형 IP주소 번보를 문자열의 형태로 변환

 

 

 

루프백 주소 (127.0.01) = 클라이언트를 실행하는 컴퓨터의 IP주소를 의미

사용하는 이유 : 서버와 클라이언트를 한 대의 컴퓨터에서 실행시켰기 때문

 

 

 


참고 문서 : 윤성우의 열혈 tcp/ip 소켓 프로그래밍

 

 

//서울가는 버스에서 강의듣고 하는데 덜컹덜컹 거린다 ㅠㅠ

반응형

댓글