3. 여기서 잠깐 주소 이야기를 먼저
그러면 실제로 패킷을 보내기 전에 패킷을 보내는 주체인 호스트의 주소 체계에 대하여 알아보자. 호스트는 두 가지 주소를 사용한다. 하나는 IP 주소이며, 하나는 포트 번호. 여기에 추가로 물리 주소가 붙게 되는데, 물리 주소는 말 그대로 하드웨어 장치에 붙어 있어서 변경할 수 없는 주소이다. 그래서 물리 주소를 하드웨어 주소라고도 한다. IP 주소는 얼마든지 변경 할 수 있기 때문에 논리 주소에 해당한다.
물리 주소는 네트워크 인터페이스 카드(NIC - Network Interface Card)가 만들어지면서 자동으로 할당된다. 즉, 제조 회사에서 지정하는 것이다. 그래서 각 네트워크 카드에는 세상에서 하나뿐인 물리 주소를 갖게 되는데, 이것이 가능한 것은 물리주소는 다음과 같이 두 부분으로 되어있기 때문이다.
XX:XX:XX : XX:XX:XX
제조회사 고유번호 : 카드 고유번호
X는 16진수를 나타내며 4비트로 되어 있다. 그러니까 제조회사 고유번호로 24비트를, 카드 고유번호로 24비트를 사용하는 것이다. 따라서 물리 주소를 2의 48승 = 281,474,976.......개 가질 수 있다. 자신의 컴퓨터의 물리주소는 Windows 계열에서는 ipconfig /all, Linux에서는 ipconfig 명령으로 알 수 있다. 물론 같은 명령으로 IP 주소도 알 수 있다.
IP 주소는 32비트로 구성되어 있으며, 부르기 쉽고 기억하기 쉽게 하기 위하여 보통 8개씩 끊어서 192.168.0.2 등과 같이 10진수로 표현한다. 물론 이것도 기억하기 힘들지만 그나마 낫다. IP 주소 의미상 두 부분으로 나뉘는데, 네트워크 주소와 호스트 주소로 나뉜다. 네트워크 주소는 라우터(Router)가 목적지 네트워크를 찾는데 사용하고, 호스트 주소는 LAN상에서 목적지 호스트를 찾는 데 사용한다. 그래서 네트워크 주소가 짧을수록, 즉 사용하는 비트 수가 적을수록 그만큼 호스트 주소로 사용되는 비트 수가 많아지며, 따라서 같은 네트워크 안에 더 많은 호스트를 보유할 수 있게 된다. 이렇게 사용하는 호스트 수에 맞추어 IP주소를 편리하게 관리할 수 있도록 미리 네트워크 주소와 호스트 주소를 나누었다. 모두 다섯 클래스로 나누었고 각 클래스의 사용 가능 IP주소를 보여준다.
클래스 |
IP 주소 범위 |
네트워크 수 |
호스트 수 |
A |
0.0.0.0~127.255.255.255 |
126 |
16,777,214 |
B |
128.0.0.0~191.255.255.255 |
16,384 |
65,534 |
C |
192.0.0.0~223.255.255.255 |
2,097,152 |
254 |
D |
224.0.0.0~239.255.255.255 |
|
|
E |
240.0.0.0~247.255.255.255 |
|
|
표에서 A클래스는 그 수가 적은 대신 호스트는 아주 많이 보유할 수 있다. 반대로 C클래스는 호스트를 많이 보유할 수 없지만 대신 많은 네트워크가 존재한다. C클래스는 그래서 중소기업에서 많이 사용한다. D클래스와 E클래스는 특수한 목적(보통 연구를 위한 경우)에 이용하기 때문에 일반적으로는 사용하지 않는다. 그리고 각 네트워크마다 호스트 주소가 모두 0인 경우와 127.x.y.z에 해당하는 주소는 루프백(Loopback)을, 모두 1인 경우에는 브로드캐스트(Broadcast)를 의미하기 때문에 특정 호스트 주소로 사용하지 않는다. 특히, 127.0.0.1은 로컬 호스트(Local Host), 즉 자기 자신을 의미하며 로컬 호스트를 테스트하는 경우에 많이 사용한다. 예를 들어 자신의 컴퓨터에서 텔넷 서비스를 하는데 자신의 컴퓨터로 자신의 컴퓨터에 있는 텔넷 서버에 접속하고자 할 때 127.0.0.1을 사용한다.
IP주소는 다섯 개의 클래스로 구성되어있다고 했는데, 회사의 규모가 작아서 두 세 개의 회사가 하나의 C클래스를 공유하고 있다고 가정한다. 그렇다면 어떻게 네트워크 주소를 판단해야할까? C 클래스 주소 전체를 하나의 네트워크로 판단하기 때문에 내부에서 네트워크를 쪼개야 한다. 이러한 일은 C 클래스에서 뿐만이 아니라 A, B클래스에서도 마찬가지로 접하는 문제다. 이러한 문제를 서브넷(Subnet)이란 방법으로 해결하고 있으며, 서브넷을 구현하기 위하여 서브넷 마스크(Subnet Mask)를 사용한다. 서브넷은 하나의 네트워크를 몇 개의 서브네트워크(SubNetwork)로 나누는 기법이다. 서브넷과는 반대로, 규모가 약간 큰 회사가 있어서 C클래스 여러 개를 IP 주소로 사용한다고 가정하면, 이번에는 C클래스 여러 개를 하나의 네트워크로 사용하고 싶어한다. 이런 경우에는 슈퍼넷(Supernet)으로 해결하며, 슈퍼넷을 지원하기 위하여 CIDR 등이 사용된다.
IP 주소는 운영체제마다 설정하는 방법이 여러 가지이다. 기본적으로 Windows 계열에서는 네트워크 환경 > 등록정보 > 로컬 네트워크 > 등록정보 > 인터넷 프로토콜(TCP/IP)의 조금은 복잡한 과정을 거치면 되며, Linux의 경우에는 netconfig 명령을 이용하여 IP 주소를 설정할 수 있다.
IP 주소를 설정하는 방법은 크게 고정 IP 주소를 설정하는 것과 유동 IP 주소를 설정하는 것의 두 가지로 나뉜다. 고정 IP 주소를 설정하는 것은 네트워크 관리자에게서 할당 받은 IP 주소를 IP 주소란에 적기만 하면 된다. 이때, 게이트웨이 주소와 DNS 주소, 서브넷 마스크는 꼭 기록해야 한다. 그렇지 않으면 위에서 언급한 내용을 인식하지 못한다. 유동 IP 주소를 설정하는 방법은 더욱 간단하다. 그냥 DHCP(Dynamic Host Configuration Protocol)를 사용한다고 체크하기만 하면 된다. DHCP는 동적으로 IP 주소를 부여하고 주어진 시간이 지나면 IP 주소의 사용 시간을 연장 또는 IP 주소의 사용을 만료시키는 등 IP 주소 할당 및 해제에 관한 일을 도와주는 프로토콜이다. DHCP를 이용하는 장점으로는 적은 수의 IP 주소를 가지로 보유하고 있는 IP 주소의 수보다 더 많은 수의 호스트를 커버할 수 있다는 점이다. 물론 모든 호스트가 네트워크를 사용하고 있다면 할 수 없지만, 그렇지 않은 환경에서는 DHCP를 이용하여 효율적으로 IP를 활용할 수 있다. 그래서 인터넷 서비스를 하는 회사에서 DHCP를 많이 사용한다. ADSL, VDSL, 케이블 모뎀 등을 사용할 때 통신회사로 부터 DHCP를 사용하라는 이야기를 들었을 것이다.
마지막으로 포트번호에 대한 이야기이다. 포트번호는 애플리케이션이 사용하는 일종의 주소라고 했는데 전화번호 113, 114, 119같이 포트번호 중에도 특별한 용도를 부여한 번호가 있는데, 이러한 번호를 Well-Known number(잘 알려진 번호)라고 하며 1~1024번까지 할당되어 있다. 따라서 사용자가 개인적으로 포트번호를 사용하고자 한다면 1024 이후의 번호를 사용하여야 한다. 대표적인 포트번호와 그 용도는 밑에 표를 보자.
7 echo
13 daytime
20 FTP, data
21 FTP, control
23 telnet
53 DNS
80 HTTP
137 NetBIOS Name Service
138 NetBIOS Datagram Service
139 NetBIOS Session Service
따라서 웹 서비스를 받기 위해서는 80번 포트를, FTP 서비스를 받기 위해서는 21번으로 접속하면 자동으로 포트번호에 해당하는 애플리케이션으로 패킷이 전송된다.