포트(port)
network
TCP/UDP와 포트 번호
- TCP/IP 호스트는 여러 개의 프로세스를 동시에 운영한다.
- 그리고 각각의 프로세스는 데이터그램을 보내고 받는다.
- 여러 곳에서 호스트로 날아오는 데이터그램은 모두 동일한 IP 주소를 갖고 있다.
그렇다면 IP 계층(3계층)은 전달받은 각각의 데이터그램을 어느 프로세스로 보내야 할지 어떻게 알 수 있을까?
다음은 IP 프로토콜 데이터그램의 헤더 포맷이다.1
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Source Address
와Destination Address
를 확인할 수 있다.- IP 프로토콜의 데이터그램이므로 이 두 주소는 IP 주소를 의미한다.
즉, IP 데이터그램만으로는 해당 IP주소를 가신 머신의 어느 프로세스로 돌려줘야 할 지 알 수 없다.
프로세스를 찾기 위한 정보는 TCP/UDP(4계층)의 데이터그램에 있다.
다음은 UDP 데이터그램의 헤더 포맷이다.2
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| Source | Destination |
| Port | Port |
+--------+--------+--------+--------+
| | |
| Length | Checksum |
+--------+--------+--------+--------+
|
| data octets ...
+---------------- ...
그리고 다음은 TCP 데이터그램의 헤더 포맷이다.3
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
두 프로토콜의 헤더에서 공통적으로 Source Port
와 Destination Port
를 확인할 수 있다.
- 4계층 메시지(TCP/UDP) 헤더에 "출발지 포트"와 "목적지 포트"가 있다.
- 포트 번호는 데이터그램을 목적지 장비의 적절한 프로세스로 전달하기 위한 일종의 서브 주소이다.
포트 번호의 범위
위의 TCP/UDP 데이터그램 포맷을 보면 포트 번호의 크기가 16비트라는 것을 알 수 있다.
즉 포트 번호의 범위는 0 ~ 65,535 이다.
\(2^{16} = 65,536\)이기 때문이다.
특수 목적의 포트 번호
범위 이름 | 범위 | 설명 |
---|---|---|
Well-Known (Privileged) | 0 ~ 1023 | IANA가 관리. 표준을 위한 포트 번호 범위. 범용적인 TCP/IP 애플리케이션을 위해 예약된 번호들이다. |
Registered (User) Port Numbers | 1024 ~ 49151 | 새로운 (비표준)애플리케이션을 위해 요청할 수 있는 포트 넘버들. 요청이 승인되면 IANA는 해당 포트 넘버를 해당 애플리케이션에 할당한다. |
Private/Dynamic Port Numbers | 49152 ~ 65535 | 누구나 등록 없이 사용할 수 있다. |
잘 알려진 포트 번호
IANA
잘 알려진 포트 넘버 목록을 알고 싶다면 다음 문서를 보면 된다.
- Service Name and Transport Protocol Port Number Registry - xhtml
- Service Name and Transport Protocol Port Number Registry - txt
/etc/services
SMTP, SSH, HTTP와 같은 표준 서비스들은
/etc/services
파일에 정의돼 있는 '잘 알려진well known' 포트와 결합된다.
(중략)
services 파일은 인프라의 일부다. 따라서 비표준 서비스를 추가하려고 할 때 이 파일을 수정할 수 있음에도 결코 수정해서는 안 되며 그럴 필요도 없다. 4
참고문헌
- TCP/IP 완벽 가이드 / 찰스 M. 코지에록 저/강유, 김진혁, 민병호, 박선재 역 / 에이콘출판사 / 2007년 01월 25일 / 원제 : The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference
- 유닉스·리눅스 시스템 관리 핸드북 5/e / 에비 네메스, 가스 스나이더, 트렌트 헤인, 벤 웨일리, 댄 맥킨 저 외 2명 / 에이콘출판사 / 발행: 2022년 01월 03일 / 원제: UNIX and Linux System Administration Handbook, 5th Edition