티스토리 뷰
2020/03/22 - [분류 전체보기] - 네트워크 프로그래밍 - 윈속 카탈로그]
IPv4
인터넷이 사용하는 프로토콜로 LAN에서 WAN까지 널리 이용되고 있다.
미국방성의 ARPA에 의해 개발되었고 초기에는 실험적인 패킷 스위칭 네트워크로 개발되었던
이 무거운 프로토콜은 70년대 이후에 점차 향상되어 현재 TCP와 같은 기능을 가진 IPv4로 완성되었다.
주소 체계
IP 주소는 32비트이다. 구분하기 쉽게 10진수로 표시를 한다.
| 11000000 | 10101000 | 00000001 | 00001010 | |
컴퓨터가 이해할 수 있으려면 2진수가 필요하지만 사람도 읽기 쉬워야 하므로 위와 같이 8비트 단위로 나눠서 표시한다.
참고로 8비트를 옥텟(OCTEET)이라고 부르기도 한다.
조금 더 읽기 쉽게 위 8비트를 10진수로 변환하면 다음과 같다
| 11000000 | 10101000 | 00000001 | 00001010 | 192 168 1 10 |
IP주소는 네트워크 주소와 호스트 주소로 나눠져 있다.
네트워크 주소는 '어떤 네트워크'인지를 나타내고 호스트 주소는 '해당 네트워크의 어느 컴퓨터'인지를 나타낸다.
이 두가지 정보가 합쳐져셔 IP주소가 되는 것이다. 그리고 이 두 주소의 크기를 조정할 수도 있다.
IP 주소의 클래스
IP 주소는 네트워크의 규모에 따라 A~E 클래스로 나누어져 있다.
다음 표를 보면 IP 주소의 클래스가 어떻게 나누어져 있는지 볼 수 있다.
클래스 이름 | 내용 | 클래스 이름 | 내용 |
A 클래스 | 대규모 네트워크 주소 | D 클래스 | 멀티캐스트 주소 |
B 클래스 | 중형 네트워크 주소 | E 클래스 | 연구 및 특수용도 주소 |
C 클래스 | 소규모 네트워크 주소 |
일반 네트워크에선 A~C 클래스까지 사용할 수 있다.
A클래스는 처음 8비트가 네트워크 주소이고 다음 24비트가 호스트 주소이다
B클래스는 처음 16비트가 네트워크 주소이고 다음 16비트가 호스트 주소이다.
C클래스는 처음 24비트가 네트워크 주소이고 다음 8비트가 호스트 주소이다.
네트워크 주소와 네트워크 ID는 같은 말이고 또한 호스트 주소와 호스트 ID도 같은 말이다..
다음 표와 같이 각 클래스들은 IP범위를 가지고 있다.
이 IP주소의 범위는 또 공인 IP와 사설 IP로 구분되기도 한다.
유니캐스트(Unicast)
유니캐스트 어드레스는 각각의 컴퓨터의 네트워크 인터페이스에 지정된 어드레스를 말한다.
하나의 네트워크 인터페이스는 하나의 유니캐스트 어드레스를 사용할 수 있다.
다른 컴퓨터가 같은 어드레스를 사용하려고 하면 데이터가 정상적으로 전달되지 못한다.
클래스 A,B,C는 IPv4에서 유니캐스트 어드레스 영역에 속한다.
유니캐스트 어드레스는 정적으로 지정될 수도 있고 DHCP 서버에 의해 동적으로 지정될 수도 있다.
만약 DHCP 서버를 통해 주소를 얻을 수 없으면 시스템은 APIPA라고 부르는 169.254.0.0 범위
안에 있는 주소를 자동으로 지정한다.
숫자로 된 IP 어드레스를 대신해 DNS를 이용하여 컴퓨터를 사용할 수도 있다.
멀티캐스트
멀티캐스트 어드레스는 네트워크 인터페이스에 지정되지 않는다.
대신 멀티캐스트 그룹에 참여하고자 하는 컴퓨터는 어드레스에 가입(join)하게 된다.
그룹에 가입한 컴퓨터는 멀티캐스트 어드레스로 전송된 데이터를 받을 수 있다.
클래스 D를 사용하고 장점은 데이터를 받고자 하는 컴퓨터에게만 데이터를 전송할 수 있다는 것이다.
브로드캐스트
IPv4는 브로드캐스트 데이터를 지원한다. 브로드캐스트 어드레스인 255.255.255.255로
전송된 데이터는 네트워크에 있는 모든 컴퓨터가 수신하고 처리한다.
따라서 이 데이터를 처리할 필요가 없는 컴퓨터도 이 패킷을 수신하고 처리해야만 한다.
만약 프로그램이 브로드캐스팅을 꼭 사용해야 한다면
subnet directed broadcast(서브넷 브로드캐스트)를 사용하길 권장한다.
이 방법은 데이터를 서브넷에만 브로드캐스팅하는 방법이다.
IPv4의 관리용 프로토콜들
IPv4에는 사용자 데이터 전송용 외의 몇가지 프로토콜을 지원하는데 그 중 많이 사용되는 것은 다음과 같다.
. ARP(Address Resolution Protocol)
. ICMP(Internet Control Message Protocol)
. IGMP(Internet Group Management Protocol)
윈속을 이용한 IPv4의 주소 지정
윈속에서는 sockaddr_in을 이용해 주소와 포트를 지정한다.
struct sockaddr_in
{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
sin_family : IP를 사용할 경우 AF_INET으로 설정한다.
sin_port : 서버에서 사용하는 TCP, UDP 포트를 의미
sin_addr : 네트워크 바이트 오더로 4byte의 IP 어드레스를 저장하기 위한 용도("1.2.3.4")
필드에 저장할 때는 각 숫자에 1byte씩을 할당해 좌측에서 우측으로 unsigned long integer로 저장된다.
sin_zero : sockaddr_in의 크기를 sockaddr의 크기와 일치시키기 위한 바이트
포트를 설정할 때는 FTP나 HTTP 서비스가 이미 사용하는 well-known port를 사용하지 않게 주의해야 한다.
.0 ~ 1023 : IANA에 의해 예약되거나 well-known service로 지정된 영역
.1024~49151 : IANA에 의해 등록된 포트와 일반 사용자가 사용하게 될 영역
.49152~65535 : 동적으로 할당되거나 사적으로 사용되는 영역
일반적인 응용프로그램은 1024~49151 사이의 등록된 포트를 사용하여
이미 다른 프로그램에서 사용중인 포트와의 충돌을 피한다.
또한 65535 범위 안에 있는 포트들은 등록된 서비스가 없으므로 자유로이 이용이 가능하다
응용프로그램이 bind 함수를 이용해 포트를 점유하려고 할 때 그 포트가 이미 다른 프로그램에서
사용을 하고 있다면 WSAADDRINUSE가 발생한다.
bind를 호출하지않고 서버에 데이터를 전송하거나 접속하면
시스템은 내부적으로 1024~5000 사이의 포트번호를 자동으로 할당하여 바인드를 한다.
bind를 호출할 때 포트번호를 0으로 설정했을 때도 마찬가지로 자동 할당된다.
- Total
- Today
- Yesterday
- HTML
- PHP&MySQL
- 네트워크 프로그래밍
- 동영상을
- 변수
- visual studio code
- TAG
- 생활코딩
- 생활코딩#MySQL
- 언리얼엔진
- 기초
- 선택자
- css
- 생활코딩#동영상을#글로#html
- inline
- php
- GRID
- C언어
- 언리얼엔진4
- 글로
- 차이점
- 문자열
- Link
- 안드로이드 스튜디오
- 객체
- 관계형데이터베이스
- 알고리즘
- javascript
- 정렬
- 조건문
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |