TCP/IP Socket Programming 3

다나·2022년 12월 23일
0

컴퓨터 네트워크

목록 보기
6/6
post-thumbnail

1. 인터넷 주소 (IP 주소) 🖥️

  • 다음 글로 업로드될 IP 관련 이론 부분에 더 자세한 사항 참고 바랍니다.

인터넷 주소는 인터넷상에서 컴퓨터를 구분하는 목적으로 사용되는 주소이다.
ex) IPv4 : 4byte 주소 체계, IPv6 : 16byte 주소 체계

2. 소켓의 구분에 활용되는 Port 번호 🤔

즉, IP는 컴퓨터를 구분하는 용도이지만, Port 번호는 소켓을 구분하는 용도이다.

특징 1) 하나의 프로그램 내에서는 둘 이상의 소켓이 존재할 수 있고, 하나의 포트하나의 프로그램에 할당한다.

특징 2) Port 번호 : 16bits로 표현한다. (0~65535)
특징 3) Port 번호 중 0~1023 번호는 이미 잘 알려진 Port 번호(well-known port)로 이미 용도가 결정되어 있다.

3. 주소 정보의 표현 🖌️

IPv4 기반의 주소표현을 위한 구조체 : sockaddr_in

struct sockaddr_in
{
	sa_family_t		sin_family;		//주소 체계
    uint16_t		sin_port;		//port 번호
    struct in_addr	sin_addr;		//32비트 IP주소
    char			sin_zero[8];	//사용되지 않음
};
struct in_addr
{
	in_addr_t	s_addr;			//32비트 IPv4 인터넷 주소
};

3-1. 구조체 sockaddr_in의 멤버에 대한 분석

1) sin_family : 주소 체계 정보를 저장한다.

  • AF_INET : IPv4 인터넷 프로토콜에 적용하는 주소 체계

2) sin_port : 16bits의 Port번호를 저장한다.

  • 네트워크 바이트 순서로 저장한다.

3) sin_addr : 32bits의 IP주소를 저장한다.

  • 네트워크 바이트 순서로 저장한다.
  • sin_addr의 구조체 자료형에서 in_addr은 32bits 정수 자료형이다.

4) sin_zero : 현재는 특별한 의미를 지니지 않아서 사용되지 않는다.

3-2. 사용하는 경우

1) 서버(Server) : 자신의 IP주소 Port 번호를 구조체에 저장한다.

  • bind() 함수 호출시 사용

2) 클라이언트(Client) : 접속할 서버의 IP주소 Port 번호를 구조체에 저장한다.

  • connect() 함수 호출시 사용한다.

3-3. 활용 예시

  • sockaddr_in은 IPv4의 주소 정보를 저장하고 사용하기 편리하므로 sockaddr_in에 관련 정보를 저장하고 나서, bind 함수의 인자 타입(struct sockaddr*)에 맞게 형변환을 해준다.
struct sockaddr_in serv_addr;
....
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1)
	error_handling("bind() error");
profile
컴퓨터공학과 학생이며, 백엔드 개발자입니다🐰

0개의 댓글