■ 일반적으로 하나의 컴퓨터 안에서, 여러 개의 어플리케이션이 동시에 네트워크를 통해서 다른 컴퓨터와 데이터를
주고 받습니다. 예를 들자면 우리가 인터넷 강의를 보면서 친구들과 메신저 프로그램으로 대화를 하는 것 입니다.

현재 이 두개의 프로그램이 인터넷을 통해서 데이터를 주고 받고 잇다고 말할 수 있습니다.
일반적으로 개인이 사용하는 컴퓨터는 하나의 물리적 연결 장치(네트워크 가드)를 통해서 네트워크에 연결되어 있습니다.
따라서 하나의 IP 주소를 가지게 됩니다. 즉 인터넷을 통해서 데이터를 주고 받는 프로그램이 현재 여려 개 실행되고
있더라도 데이터를 송.수신하는 길(통로)는 하나밖에 존재하지 않게 되는 것입니다.

그렇다면 컴퓨터는 어떻게 수신한 데이터를 구분하여 각각의 프로그램에게 전달해 줄 수 있는 것일까요?


(1) IP주소 와 PORT

IP주소로는 인터넷에 연결되어 있는 컴퓨터들을 구분하여 줄 수는 있어도 컴퓨터 안에서 실행되는 프로그램까지 구분하지는
못합니다. 즉 IP 주소만으로는 받은 데이터 패킷을 메신저 프로그램에 전달할 것인지, 인터넷 강의 프로그램에 전달
할 것인지 구분하지 못한다는 것입니다.

이것을 구분하기 위해 필요한 것이 바로 Port입니다. 32비트 IP 주소로는 네트워크상에 존재하는 호스트를 구분하게 되고, 16비트 Port 정보로는 호스트 내에서 실행되고 있는 프로그램을 구분하게 됩니다. 이것은 물리적인 개념의 할당이 아니라, 동일 호스트 내에서의 논리적인 할당일 뿐입니다. 하드웨어적으로 구현되어 있는 것이 아니라 소프트웨어적으로 구현해 놓았다는 뜻으로 이해하시면 되겠습니다.

Port는 2바이트로 표현되므로 가질 수 있는 값의 범위가 0 ~ 65535 까지 입니다.
그러나 0 ~ 1023번 까지는 '잘 알려진 Port (well-known Port)' 라고 해서 예악되어 있는 Port 이므로 사용이 제한됩니다. 사용할 수 없는 것이 아니라 사용되는 용도를 미리 약속해 놓았다는 의미입니다. 또한 Port는 중복될 수 없으나, TCP 소켓과 UDP 소켓은 Port를 서로 공유하지 않으므로 중복되어도 상관 없습니다.
즉 TCP 소켓을 생성할 때 9314 Port 사용했다면, 다른 TCP 소켓은 9314 Port를 사용할 수 없지만, UDP 소켓은 9314 Port를 사용할 수 있습니다.


결론적으로 데이터 전송의 최종 목적지는 호스트가 아니라 메모리상에 올라와 실행 중에 있는 프로그램입니다. 그러므로 데이터를 보내기 위해서는 데이터 패킷 내에 IP 주소 정보뿐만 아니라 Port 정보도 함께 포함을 시켜야 합니다.



※ 출처 : http://blog.naver.com/rnjstjdwo14?Redirect=Log&logNo=40126043617

by 민트앤라떼 2011. 5. 11. 17:00