http://blog.daum.net/_blog/BlogTypeView.do?blogid=0G38s&articleno=7181009 에서 참조
일단 자세히 알아보기 전에 조금 쉽게 이야기하면
우리가 포트라고 쓰는 것에는 통신포트(물리적인 포트=예를들어 COM1, COM2, LPT1 LPT2 USB 포트등…)란 것도 있고
TCP/IP 포트라는 것도 있는데….. (예를들어 예전에 우리회사의 파워넷 같은 경우 홈페이지 주소 되에 ;8080 등으로 포트번호를 지정해서 접속되곤 했죠)
여기서의 포트는 하드웨어적인 포트가 아니고 가상의 소프트웨어적인 포트입니다.
바로 프로토클 규약인 TCP/IP 에서 지정하는 포트입니다.
하드웨어적으로 연결이 된 네트워크망에서, 컴퓨터들끼지 서로 통신을 하는데 필요한 규약이 TCP/IP이죠.
그리고 통신을 할때 동시다발적인 통신을 가능케 하기 위하여 포트라는 가상의 “문"이 정의 됩니다.
네트워크 하면 가장 기초적으로 OSI 7 layer에 대해서 이야기 해야 하는데,
이는 표준으로서 TCP/IP는 비슷하게(?) 이를 구현은 하지만 정확히 따르지는 않습니다.
그래서 OSI 7 layer를 건너 뛰고 바로 TCP/IP에 대해서 설명 드리겠습니다.
웹에서 OSI 7 layer를 검색하면 아주 많은 자료를 구하실 수 있을 것 입니다.
중요하지만 직접적이지 않은 것들은 (계층 이야기) 다 건너 뛰고…
TCP/IP에서 TCP는 신뢰성 있는 데이터를 전송하는 프로토콜이고
IP는 데이터를 정확한 곳에 보내기 위한 프로토콜 입니다.
여기서 유일 무이한 컴퓨터 고유 주소인 IP Address (흔히 말하는 IP)가 있습니다.
(똑 같은 주소가 두개라면 집배원 아저씨가 제대로 편지를 전달 못하듯이
IP도 내부 IP가 아닌이상 전 세계에 유일 무이 해야 제대로 전달 되겠죠.)
선박 운항에 비유 하자면….
하나의 배가 한 단위의 정보 (패킷)이라고 가정하면 목적지인 부산 항(IP Address)에
잘 도착 했다고 가정 하면… 단순히 배가 부산 항에 도착 하는 것 만으로
수송이 완료 된 것은 아닙니다.
적절한 선착장(Port)에 배를 대어서 짐을 내려 줘야지
제대로 수송이 완료 되는 것 입니다.
물론 부산항에는 수 많은 선착장이 있을 것 입니다.
이때 미리 무역 업자는 약속한 선착장에서 기다리고 있어야 하겠지요.
(Port를 의미 그대로 항구로 해석을 하려 한다면 IP Address는 "대한민국"으로
Port는 대한민국의 많은 항구 중 하나인 부산항으로 생각하면 됩니다.
어디까지나 비유이니…)
기본적으로 21, 23, 80 번 등의 포트는 FTP, Telnet, HTTP로 약속이 되어 있고
(요놈들 말고도 몇개 더 있지만 직접 사용 해 보지 않아서 기억나지 않네요.)
저 멀리 몇 천번대 포트는 P2P등 임의로 이용 할 수 있습니다.
즉, 선착장에서 무역 업자가 기다리듯이 80번 포트에서는 HTTP가 기다리고 있다가
전달된 정보를 적절히 처리해서 우리에게 보여 주게 됩니다.
(Port는 65536개가 있는데 TCP와 그의 친구 UTP가 관할하고 있습니다.)
그리고 이렇게 포트를 사용하는 목적을 어려운 말로
호스트 내에서 다중 프로세스에 대한 처리라고 하는데
옛날 모뎀으로 통신 하던 시절에는 다운 받고 있는 동안은 채팅을 할 수 없었습니다.
그러나 요즘은 프루나로 다운 받으면서 채팅도 하고 동시에 실시간으로 영화도 보는데,
즉, 여러 프로그램 (엄밀히 프로세서)이 동시에 사용 할 수 있다는 의미로 생각 합니다.
좀더 자세히 하면 TCP 의 역할은 4계층으로 나누어서 다양한일은 하는데(애플리케이션층,트랜스포트층 네트원크 인터넷층, 데이터링크층) 복잡하니까. 간단하게만 설명하면
프로그램등이 데이터를 보내면 TCP가 데이터를 송신할 수 있도록 TCP가 이해할 수 있는 형태로 포멧하고,
TCP는 그 데이터를 패킷 형태로 자르고 에러 체킹을 위한 헤더를 각 패킷에 붙이게되죠.
네트워크 층에는 IP 포장(목적지 IP의 주소를 가르켜 줌)을 하고 IP헤더를 넣게되고,
데이터 링크층은 네트워크 층에서 보내온 데이터의 IP 주소를 특정한 네트워크의 하드웨어 주소로 번역하는 역할을 합니다.
(네이버에서 퍼온글… 이해를 돕기위해.
예를 다시 들면, HTTP 서버가 0 과 1 로만 되어 있는 자료를 애플리케이션 층에 보낸다면,
애플리케이션 층에서는 그 데이터를 새로운 형태로 포멧 (디지털을 아날로그) 트랜스포트 층에 보내고.
트랜스포트 층에서는 TCP가 데이터를 전달하기 쉬운 형태로 자르고 난 뒤 네트워크 층으로 데이터를 보낸다. 네트워크층에서는 데이터가 가야할 장소와 IP 헤더를 붙이고 데이터를 데이터 링크층으로 보낸다. 데이터 링크층은 네트워크 층에서 보내온 데이터의 IP 주소를 특정한 네트워크의 하드웨어 주소로 번역한다.
송신측에서 각 계층은 상위 계층에서 받은 데이터의 헤더를 추가하고, 유사하게 수신측에서 각 계층은 다음 상위 계층에 데이터를 보내기 전에 자신의 헤더를 추출한다. 그래서 최종적으로 얻게되는 데이터는 원래 보냈던 데이터와 동일한 것이 된다.
TCP는 전달 되는 데이터의 관리 기능외에 또 다른 기능이 있다. 그것은 TCP가 다른
프로토콜과 같이 사용될 수 있도록 지원한다. 예를 들어 여러분이 집에서 모뎀으로
인터넷에 WWW을 항해 하려 한다면 먼저 윈속등으로 여러분 컴퓨터에 TCP/IP 환경을
만들어야 한다. WWW에서는 브라우저와 서버와 통신을 위해 HTTP라는 프로토콜을 따로
사용하는 데 왜 TCP/IP라는 프로토콜을 따로 컴퓨터에 설정 해 주어야 하는가? 이미
언급했다시피 인터넷에는 많은 종류의 컴퓨터(OS)가 존재한다. 이들 간을 묶는 첫 번째
프로토콜(언어)이 TCP/IP이고 인터넷을 기반으로 움직인는 WWW에서 정보를
교환하기 위한 프로토콜이 HTTP인것이다.)
TCP포트 번호가 필요한 이유
TCP/IP 프로토콜을 기반으로 하는 네트워크상에 한 서버가 있다고 생각하면 그 서버는 한 사용자와 만 통신을 하는 것이 아니라 여러 사용자와 동시에 통신을 하게 됩니다. 또한 서버는 한가지 서비스만 제공하는 것이 아니라 여러 가지의 서버 응용 서비스를 여러 사용자에게 제공을 하게 됩니다. 즉 데이터 통신 환경에서 한 서버는 여러 가지의 서비스를 여러 사용자에 제공을 할 수 있고 또한 한 사용자는 여러 개의 서버로부터 여러 가지의 서비스를 제공 받을 수 있습니다.
두 대 이상의 컴퓨터가 통신을 할 때 데이터를 목적지 까지 전달 해 주는 것은 IP주소에 의해 결정이 되고 목적지 서버에 도달한 정보를 어느 응용프로그램에서 처리해 줄 것인지를 결정하는데 사용하는 것이 바로 포트번호가 됩니다. 데이터를 전송 할 때도 같은 방법으로 적용이 될 수 있습니다. 서버가 제공하는 여러 사용자중 어느 사용자가 요청한 서비스인지 또는 어느 프로그램이 요청한 서비스인지를 구분하기 위하여 송신지 포트 번호가 있는 것입니다. 이 표기된 포트 번호에 따라 데이터가 정확한 응용 프로그램에서 처리 될 수 있습니다. 요청한 서비스의 포트번호가 맞지 않거나 차단이 되어 있으면 그 서비스는 제대로 이루어 질 수 없습니다.
즉 어느 응용 프로그램이나 사용자가 보낸 데이터 인지를 구분하기 위해 송신측 포트 번호(Source Port Number)가 사용되고 어느 응용 프로그램이 수신해야 하는지를 구분하기 위해 수신측 포트 번호(Destination Port Number)가 사용됩니다.
실제로 통신을 할 때는 모든 장치가 포트 번호를 사용하여 전송층에서 통신을 하며 이 포트 번호를 결정하는 방법에는 두 가지가 있습니다. 다음은 이 방법에 대해 알아봅니다.
1. 공식 기관에서 공표한 포트 번호
많이 쓰이는 일반적인 TCP/IP 프로토콜을 사용하는 응용 프로그램들은 통신을 할 경우 대부분 공식 기관에서 결정한 포트 번호를 사용하게 됩니다. 이와 같이 공식 할당된 포트 번호를 Well-known Port Number또는 Well-known Port Assignment라고 합니다.
실제로 사용되는 예를 보도록 하겠습니다.
– 포트번호 0 : Reserved
– 포트번호 1 : TCP MUX(TCP 멀티플렉스)
– 포트번호 5 : RJE(Remote Job Entry)
– 포트번호 7 : ECHO
– 포트번호 9 : DISCARD
– 포트번호 11 : SYSTAT(활성 사용자)
– 포트번호 13 : DAYTIME(주간)
– 포트번호 15 : NETSTAT(네트워크 상태 프로그램)
– 포트번호 17 : QOTD(해당일 인용문)
– 포트번호 19 : CHARGEN(문자 발생기)
– 포트번호 20 : FTP-DATA(파일전송 프로토콜(데이터))
– 포트번호 21 : FTP(파일전송 프로토콜)
– 포트번호 23 : TELNET(단말기 연결)
– 포트번호 25 : SMTP(간단한 메일 전송 프로토콜)
– 포트번호 37 : TIME(시간)
– 포트번호 42 : NAME(호스트 이름)
– 포트번호 43 : WHOIS(누구)
– 포트번호 53 : NAMESERVE(도메인 이름 서버)
– 포트번호 79 : FINGER(finger)
– 포트번호 101 : HOSTNAMES(NIC 호스트 이름 서버)
– 포트번호 103 : X400(X.400 메일 서비스)
– 포트번호 113 : AUTH(인증 서비스)
– 포트번호 117 : UUCP-PATH(UUCP 경로 서비스)
– 포트번호 119 : NNTP(USENET 뉴스 전송 프로토콜)
– 포트번호 129 : PWDGEN(암호 발생기 프로토콜)
– 포트번호 160 – 223 : RESERVED(예약되어 있슴)
2. 동적으로 포트 번호를 할당하는 방법
어떤 장치(device)가 서비스를 제공하기 위해 필요 할 때 그 장치들이 사용하는 포트 번호가 중복이 되거나 불일치가 일어나지 않도록 번호를 임의로 생성하여 사용하는 방법입니다.
컴퓨터에서는 임의의 작업을 처리하기 위해 실행 중인 프로그램을 프로세스라합니다. 하나의 프로세스가 하나의 프로그램의 기능을 처리할 수도 있고, 여러 개의 프로세스가 하나의 프로그램의 기능을 처리하기도 합니다.
운영체제에 예약된 프로세스는 컴퓨터를 운영하기 위해 반드시 실행되고 있어야 하는 프로그램으로 이 프로세스들은 고유의 프로세스 번호를 가지고 수행이 되며
이러한 예약된 프로세스는 일반 사용자들이 요청한 서비스를 제공하기 위해 다른 프로세스를 불러 오거나 처리를 하게 됩니다. 이 프로세스는 사용자의 서비스 요청이 있을 때 마다 동적으로 생성된 임의의 번호를 가지게 되며, 통신을 위한 처리도 이러한 예약된 프로세스가 수행되고 있는 동안에 필요에 의해 부가적으로 할당이 되므로 동적인 포트 번호 할당이라고 할 수 있습니다.
3. 포트 번호와 전송층 프로토콜
앞에서 설명한 TCP에서 사용하는 포트 번호는 다른 전송층 프로토콜에서도 사용 할 수 있습니다. 서로 다른 전송층 프로토콜은 서로 다른 프로세스로 인식이 되고 포트 번호는 전송층 프로토콜 마다 규정이 되어 있기 때문입니다. 일반적으로 TCP와 함께 많이 사용되고 있는 UDP프로토콜에서도 TCP프로토콜에서 사용하는 것과 동일한 포트 번호를 가지고 같은 서비스를 제공 해 줄 수 있습니다. 물론 TCP가 데이터 처리하는 방법과 UDP가 데이터를 처리해 주는 방법은 서로 다릅니다. 보통 TCP/IP서비스는 UDP/IP에서도 처리 할 수 있게 많이 사용 됩니다.
UDP프로토콜에서 정의되어 사용하는 포트 번호의 예를 들어 보면 다음과 같습니다.
– 포트번호 0 : Reserved
– 포트번호 7 : ECHO
– 포트번호 9 : DISCARD
– 포트번호 11 : SYSTAT(활성 사용자)
– 포트번호 13 : DAYTIME(주간)
– 포트번호 15 : NETSTAT(네트워크 상태 프로그램)
– 포트번호 17 : QOTD(해당일 인용문)
– 포트번호 19 : CHARGEN(문자 발생기)
– 포트번호 37 : TIME(시간)
– 포트번호 42 : NAME(호스트 이름)
– 포트번호 43 : WHOIS(누구)
– 포트번호 53 : NAMESERVE(도메인 이름 서버)
– 포트번호 67 : BOOTPS(부트스트랩 프로토콜 서버)
– 포트번호 68 : BOOTPC(부트스트랩 프로토콜 클라이언트)
– 포트번호 69 : TFTP(간단한 파일 전송 프로토콜)
– 포트번호 123 : NTP(네트워크 시간 프로토콜)
– 포트번호 161 : SNMP(단순 네트워크 관리 프로토콜)
– 포트번호 162 : SNMP-TRAP
– 포트번호 512 : BIFF(UNIX 콤샛 통신)
– 포트번호 513 : WHO(UNIX RWHO 프로세스)
– 포트번호 514 : SYSLOG(시스템 로그)
– 포트번호 525 : TIMED(시간 데몬 프로세스)
위에서 보신 것처럼 같은 서비스가 TCP프로토콜로 처리가 될 수도 있고
UDP 프로토콜로 처리가 될 수도 있습니다. 상위 계층 프로그램이 전송층 프로토콜로 TCP또는 UDP를 선택적으로 사용 할 수 있다는 이야기 입니다. 그렇다면 어떤 경우에 TCP를 사용하고 어떤 경우에 UDP를 사용하면 좋을까? 간단하게 정리하면 TCP는 좀 더 안정적인 데이터 처리를 하고자 할 때 쓰는 프로토콜이며 UDP는 안정적인 데이터 전송을 보장 않아도 되는 경우에 사용 하는 것이 좋습니다.