네트워크/네트워크프로그래밍

[네트워크] 프로토콜 (Protocol)

4Legs 2020. 11. 16. 22:55

프로토콜(Protocol) 이란?

개념적으로 "약속"을 뜻한다. 즉, 컴퓨터 간 데이터 송수신에 필요한 통신 규약을 의미한다.

소켓을 생성할 때도 기본적인 프로토콜을 지정해야 한다.

 

인터넷 주소 (Internet Address)

인터넷 상에서 컴퓨터를 구분할 목적으로 사용되는 주소를 의미한다.

4바이트 주소체계인 IPv4와 6바이트 주소체계인 IPv6이 존재한다.

인터넷 주소는 네트워크 주소(Network Address)와 호스트 주소(Host Address)로 나뉜다. 네트워크 주소를 통해 네트워크 범위를 찾고, 그 범위 안에서 호스트 주소를 이용해 호스트를 구분한다.

 

IPv4 주소체계

IPv4 주소 체계. 노란색으로 표시된 구간이 네트워크 주소이고, 흰색 구간이 호스트 주소이다.

예를 들어 클래스 C의 주소는 32 * 256 * 256개의 네트워크 주소를 가지고, 각 네트워크는 256개의 호스트에 IP를 할당할 수 있다.

 

서브넷 마스크

클래스 A : 255.0.0.0/8

클래스 B : 255.255.0.0/16

클래스 C : 255.255.255.0/24

IP주소를 서브넷 마스크와 AND 연산시키면 네트워크 주소와 호스트 주소를 분리할 수 있다.

 

서브넷팅 (Subnetting)

만약 127개의 호스트를 갖는 네트워크가 존재한다면, 우리는 클래스 C를 할당하게 될 것이다. C클래스는 네트워크 하나당 256개의 호스트를 가질 수 있으므로, 할당되지 않은 129개의 IP주소는 낭비가 된다.

IPv4 주소 체계의 클래스를 보다 유연하게 사용하여 IP주소의 낭비를 최소화하는 것을 서브넷팅이라 한다.

서브넷 마스크의 / 뒤의 숫자를 Prefix라 하는데, 이는 서브넷 마스크의 왼쪽부터 연속되는 1의 갯수를 의미한다. 클래스 B의 서브넷 마스크는 11111111 11111111 00000000 00000000 이므로, Prefix는 16이다.

이 Prefix를 조절하여 네트워크 주소의 갯수를 늘리고, 호스트의 갯수를 줄일 수 있다. 앞서 든 예시에서는 서브넷 마스크를 255.255.255.128/25 로 조절해 한 네트워크 당 호스트의 갯수를 128개로 줄여 IP의 낭비를 줄일 수 있을 것이다.

(Prefix가 1 올라갈 때마다 한 네트워크 당 호스트 수는 반으로 줄어든다.)

 

IPv4 vs. IPv6

 

PORT

IP는 네트워크에서 컴퓨터를 구분하는 용도로 사용되지만, PORT 번호는 소켓을 구분하는 용도로 사용된다.

하나의 프로그램에는 둘 이상의 소켓이 존재할 수 있으므로, 둘 이상의 PORT가 하나의 프로그램에 의해 할당될 수 있다.

PORT 번호는 16비트로 표현되며, 따라서 0부터 65535까지의 값을 갖는다. 이 중 0 ~ 1023 까지는 Well-known PORT로, 용도가 이미 결정된 번호이다.

 

소켓의 유형

소켓은 연결 지향형 소켓과 비연결 지향형 소켓으로 나뉜다.

연결 지향형 소켓 (TCP 소켓) : 중간에 데이터가 소멸되지 않고, 전송 순서대로 데이터가 수신된다. 또한 데이터의 경계가 존재하지 않으며 소켓 간 연결은 반드시 일대일 구조이다.

비연결 지향형 소켓 (UDP 소켓) : 전송 순서에 상관없이 빠른 속도의 전송을 지향한다. 단, 데이터 손실 및 파손의 우려가 존재하며, 데이터의 경계가 존재한다. 한 번에 전송할 수 있는 데이터의 크기는 제한된다.

(TCP, UDP에 대한 것은 추후 자세히 서술한다)

 

바이트 순서 (Byte Order)

빅 엔디안 (Big Endian) : 상위 바이트 값을 작은 번지수에 저장한다. 일반적으로 빅 엔디안이 기준이다.

빅 엔디안

리틀 엔디안 (Little Endian) : 상위 바이트 값을 큰 번지수에 저장한다.

리틀 엔디안

 

'네트워크 > 네트워크프로그래밍' 카테고리의 다른 글

[네트워크] 소켓 (Socket)  (0) 2020.11.16