kakasoo

[TCP/IP] 소켓에 할당되는 IP 주소와 PORT 번호? 본문

프로그래밍/네트워크

[TCP/IP] 소켓에 할당되는 IP 주소와 PORT 번호?

카카수(kakasoo) 2020. 7. 15. 13:21
반응형

IP는 Internert Protocol의 약자로, 인터넷 상에서 데이터를 송수신할 목적으로 컴퓨터에게 부여하는 값을 의미한다.

반면 PORT 번호는 컴퓨터에게 부여하는 값이 아닌, 프로그램 상에서 생성되는 소켓을 구분하기 위해 소켓에 부여하는 번호이다.

 

IP부터 차례대로 말하자면, IP는 앞서 말한 듯 컴퓨터에 부여하는 값, 즉 주소 값을 의미한다.

인터넷에 컴퓨터를 연결해서 사용하려면 IP 주소를 부여 받아야 하는데, 여기서 IP 주소는 몇 가지 체계로 나뉜다.

그 중 잘 쓰이는 것이 바로 IPv4인데, 사실 IPv6보다 더 낮은 version을 의미한다.

 

IPv4 (Internet Protocol version 4)

IPv6 (Internet Protocol version 6)

 

verison으로 치면 6을 사용해야 할 것 같지만, 사실 이 둘은 바이트 크기의 차이를 차이점으로 가지고 있다.

기존에 IP 주소가 모두 고갈될 경우를 대비하여 새로운 IPv6 체계를 만든 것이지만, 오늘 날까지 IP는 고갈되지 않았다.

그래서 아직도 IPv4를 써도 문제가 없고, 대다수의 주소가 IPv4인 것이다.

IPv4는 4byte로 되어 있는 IP 주소 인데, 클래스 A~E 까지의 형태가 존재한다.

클래스 A~D는 각각 네트워크 ID의 크기가 1byte씩 차이나는 관계를 가진다. (E는 변칙적인 경우이다.)

 

클래스 A : 1byte의 네트워크 ID와 3byte의 호스트 ID

클래스 B : 2byte의 네트워크 ID와 2byte의 호스트 ID

클래스 C : 3byte의 네트워크 ID와 1byte의 호스트 ID

클래스 D : 4byte의 멀티캐스트 IP 주소

 

네트워크 주소란 IP 주소의 일부로, 다른 IP 주소를 찾아가기 위해서 만들어졌다고 보면 된다.

만약 어떤 컴퓨터로부터 해당 주소로 message를 보낸다고 가정하면, 한 번에 203.211.217.202를 참조하지 않는다.

4byte 중에서 네트워크 ID만을 사용하여 해당 주소의 일부분을 참조하여, 203.211.217 까지만 이동한 후,

다시 라우터를 통해서 나머지 주소를 찾아가게 된다.

라우터는 데이터를 전송받아, 데이터에 적혀 있는 호스트 주소를 참조하여 마저 데이터를 전송해주는 역할을 한다.

(라우터가 없이는 네트워크가 구성되지 않고, 각 개별적인 주소를 가진 컴퓨터만이 존재하는 꼴이다.)

(라우터가, 중간 역할을 하며 컴퓨터들을 한 곳에 묶고, 데이터들을 알맞은 호스트에게 전달해주는 중계기 역할이다.)

 

마지막으로 PORT 번호에 대해서 설명하겠다.

사실 IP 주소만 가지고 우리 컴퓨터 주소를 특정하는 데 까지는 아무런 문제가 없지만, 그 다음이 문제가 된다.

컴퓨터에서 어떤 응용 프로그램으로 data를 전달할지가 문제가 된다.

가령 우리가 웹 서핑을 하는 중에, 이메일이 온다거나, 또는 다른 동영상을 시청 중이라고 한다면 어떻게 될까?

우리가 정보를 습득하는 만큼의 소켓의 수가 필요하게 될 것인데, data가 그것을 판별할 수 있을 것인가?

가능하다, 설령 우리가 그걸 모른다고 해도.

만약 판별하지 못한다면 동영상의 정보가 이메일로 가고, 웹 서핑이 다시 동영상으로 가는 등 난리가 벌어질 것이다.

 

컴퓨터에는 NIC(network interface card)라고 하는 데이터 송수신 장치가 있다.

IP는 데이터를 NIC를 통해 컴퓨터 내부로 전달한다.

이후 컴퓨터에서는 운영체제가 알아서 data를 적절한 소켓으로 분배하는 역할을 한다.

운영체제는 NIC를 통해서 수신된 data, 그 안에서 PORT 정보를 확인하여 일치하는 소켓에 전달하는 것이다.

(우리가 client socket에서 9180이라는 소켓 번호를 입력해둔 것처럼.)

 

포트 번호는 0 부터 65535번까지 존재하고, 이 소켓 번호의 0번 부터 1023번은 well-known PORT라고 하여,

이미 할당이 예약되어 사용이 불가능하다.

이후 번호에는 자유롭게 연결이 가능하지만, 한 운영체제 내에서 두 소켓이 같은 PORT를 공유할 수는 없다.

단, TCP와 UDP처럼, 소켓의 종류가 서로 다른 경우에는 허용된다.

반응형