2009. 8. 5. 14:43ㆍ언어/TCP-IP
Internet Address : 인터넷 상에 존재하는 호스트를 구분하기 위한 32비트 주소체계
네트워크 주소 = Network ID + Host ID
Network ID 1byte | A Class | 0~127 |
Network ID 2byte | B Class | 128~191 |
Network ID 3byte | C Class | 192~223 |
클래스를 나누어 놓은 이유 : Network와 호스트의 크기를 구분하기 위해
네트워크와 네트워크를 연결 -> 게이트웨이(Router)
Port란? 호스트 내에서 실행되고 있는 프로세스를 구분 짓기 위해 16비트의 논리적 할당
논리적 할당 : 소프트웨어로 구현하다.
주소 정보의 표현.
IPv4의 주소 체계를 나타내는 구조체
struct sockaddr_in{
sa_family_t sin_family; // 주소체계(address family)
uint16_t sin_port; //port 정보
struct in_addr sin_addr; //32비트 IPv4 주소
char sin_zero[8]; // 사용하지 않음
struct in_addr{
uint32_t s_addr;
}
Data type | Description | Header |
int8_t uint8_t int16_t uint16_t int32_t uint32_t | signed 8-bit int sinsigned 8-bit int(unsigned char) signed 16-bit int unsigned 16-bit int(unsigned short) signed 32-bit int unsigned 32-bit int(unsigned long) | <sys/types.h> |
sa_family_t socklen_t | address family length of struct | <sys/socket.h> |
주의점 : 모든 데이터는 네트워크 바이트 순서로 저장 되어야 한다.
네트워크 바이트 순서
- Big-endian : highbyte부터
- Little-endian : lowbyte부터
네트워크 바이트 순서는 Big-endian방식만 사용하기로 약속되어있다.
예제1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
void ErrorHandling(char *message);
int main(int argc, char **argv)
{
WSADATA wsaData;
short hostOrdPort = 0x1234;
short netOrdPort;
long hostOrdAdd = 0x12345678;
long netOrdAdd;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorHandling("WSAStartup() error!");
netOrdPort=htons(hostOrdPort);
netOrdAdd=htonl(hostOrdAdd);
printf("Host ordered port : %x \n", hostOrdPort);
printf("Network ordered port : %x \n\n", netOrdPort);
printf("Host ordered Address : %x \n", hostOrdAdd);
printf("Network ordered Address : %x \n\n", netOrdAdd);
WSACleanup();
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
자신이 쓰고 있는 시스템이 Big-endian방식이라고 해도 반드시 변환 함수를 사용해서 네트워크 바이트 순서로 변환하는 과정을 거쳐야 한다.
그 이유는 이식성을 위해서다.
'언어 > TCP-IP' 카테고리의 다른 글
TCP 기반 서버/클라이언트 (0) | 2009.08.06 |
---|---|
소켓의 생성과 프로토콜의 설정 (0) | 2009.08.05 |
네트워크 기초 (0) | 2009.07.31 |