1. TCP/IP 프로토콜 구조
인터넷을 통해 통신을 수행하는 개체는 크게 호스트와 라우터로 나눌 수 있다. 호스트는 최종 사용자 응용 프로그램을 수행하는 주체가 되며, 인터넷에 연결된 PC, 노트북, 휴대전화, PDA 등이 여기에 속한다. 라우터는 호스트에서 생성된 여러 네트워크를 거쳐 전송함으로써 서로 다른 네트워크에 속한 호스트 간에 데이터를 교환할 수 있게 하는 장비다. 호스트와 라우터, 라우터와 라우터 그리고 호스트와 호스트가 통신하려면 정해진 절차와 방법을 따라야 하는데 이를 통신 프로토콜(Communication Protocol)이라 부른다.
인터넷에서 사용하는 핵심 프로토콜을 TCP와 IP로, 이를 비롯한 각종 프로토콜을 총칭하여 TCP/IP 프로토콜이라고 부른다. TCP/IP 프로토콜은 아래 그림과 같이 일반적으로 운영체제의 일부로 구현되며, 응용 프로그램은 운영체제가 제공하는 TCP/IP 프로토콜의 서비스를 사용해 통신한다. 그림에서 통신을 수행하는 주체이자 통신의 최종 목적지는 호스트 자체가 아닌 호스트에서 수행하는 응용 프로그램이다.
응용 프로그램끼리 통신하려면 다양한 요구 사항을 만족해야 한다. 요구 사항의 예로는 통신할 대상(호스트 자체와 호스트에서 수행하는 응용프로그램)을 지정하는 상호 약속된 방법, 전송 오류 확인 기능, 오류 발생 시 재 전송 기능 등이 있으며, 일반적으로 이와 같은 기능은 프로토콜 수준에서 자동으로 제공된다. 따라서 응용프로그래머는 다양한 프로토콜의 특성을 이해하고, 필요한 기능에 적합한 프로토콜을 선택할 수 있어야 한다.
2. TCP/UDP 특징 비교
TCP | UDP |
연결형(connection-oriented) 프로토콜 - 연결 설정 후 통신이 가능 |
비 연결형(connectionless) 프로토콜 - 연결 설정 없이 통신 가능 |
신뢰성 있는 데이터 전송 - 데이터 오류 시 데이터 재 전송 기능을 가짐 |
신뢰성 없는 데이터 전송 - 데이터를 재 전송 하지 않음 |
일대일 통신(unicast) | 일대일 통신(unicast) 일대다 통신(broadcast, multicast) |
데이터 경계를 구분하지 않음 - 바이트 스트림 서비스 |
데이터 경계 구분함 - 데이터그램 서비스 |
- 통신의 종류
- unicast: 1:1 통신
- broadcast: 1:N 통신(불특정 다수)
- multicast: 1:N 통신(특정 다수)
3. 데이터 전송 원리
송신 측 호스트의 응용 프로그램이 보내는 데이터를 수신 측 호스트의 응용 프로그램에 전송하려면 각 프로토콜에서 정의한 제어 정보(IP, Port Number, 오류 검출 코드(Parity, Checksum, CRC 등..))가 필요하다. 제어 정보는 위치에 따라 앞쪽에 붙는 헤더와 뒤에 붙는 트레일러로 나뉜다. 데이터는 이러한 제어 정보가 결합된 형태로 전송되며, 이를 패킷(Packet)이라 부른다.
이더넷에 연결된 두 호스트가 TCP/IP를 이용하여 데이터를 교환하는 경우 패킷의 전송 형태는 아래 그림과 같으며, 송신 측 응용 프로그램에서 보낸 데이터는 TCP/IP/이더넷 계층을 지나면서 헤더 또는 트레일러 형태의 제어 정보가 덧붙어서 패킷이 생성된다. 이 패킷이 수신 측에 도달하면 아래 그림과 같이 이더넷/IP/TCP 계층을 지나면서 헤더 또는 트레일러 형태의 제어 정보가 제거되고 최종적으로 수신 측 응용 프로그램이 데이터를 받는다.
전반적인 내용은 아래 패킷 전송 형태에 따른 그림을 참조 부탁 드립니다.
TCP/IP 프로토콜을 사용한 데이터 전송 원리를 일반화하면 아래 그림과 같으며, 응용 계층과 전송계층의 경우 물리적인 연결은 존재하지 않으나, 인터넷 계층과 네트워크 접근 계층이 제공하는 기능을 통해 가성적인 연결이 존재하는 것으로 간주한다. 두 계층은 모두 종단에서만(end-to-end) 존재하며 동작한다. 반면 인터넷 계층은 호스트와 라우터에 모두 존재하며, IP주소와 라우팅 기능을 이용해 패킷 전송 경로를 설정한다. 실제 패킷 전송에는 네트워크 접근 계층이 제공하는 물리 주소를 사용하는데, 이런 물리 주소는 패킷이 라우터를 통과할 때마다 다음 지점의 물리 주소로 계속 변경된다.
4. IP 주소와 포트 번호
TCP/IP 프로토콜을 사용해 통신할 대는 IP 주소와 포트 번호를 사용한다. IP 주소는 IPv4, IPv6 두 종류가 있으며, 각각 32비트와 128비트 값을 사용한다. IP 주소는 인터넷에 있는 호스트를 유일하게 구별할 수 있지만 통신의 최종 주체인 프로세스는 식별하지 못한다. 프로세스 식별자로는 포트 번호를 사용하는데, 흔히 포트 번호는 각 프로세스를 구별하는 식별자로 알려져 있다. 그러나 실제로는 한 프로세스가 포트 번호를 두 개 이상 사용하는 경우가 종종 있으며, 둘 이상의 프로세스가 한 포트 번호를 사용할 수 도 있다. 따라서 포트 번호는 프로세스를 구별하는 식별자라기보다는 통신의 종착점(하나 혹은 여러 프로세스)을 나타내느 식별자롤 보는 것이 바람직하다.
TCP와 UDP 포트 번호로 부호 없는 16비트 정수를 사용하므로 0~65535 범위가 가능하지만, 모든 범위를 자유롭게 사용은 불가하다. 0~1023은 용도가 정해진 포트로 사용이 불가하며, 일반적으로 서버를 작성할 때는 1024~49151 범위에서 하나 또는 일부를 선택해 사용하는 것이 바람직하다.
주요 알려진 포트의 목록은 아래와 같다.
- 알려진 포트 목록
0/udp | 예약됨; 사용하지 않음 | 공식 |
1/tcp | TCPMUX (TCP 포트 서비스 멀티플렉서) | 공식 |
7/tcp | ECHO 프로토콜 | 공식 |
7/udp | ECHO 프로토콜 | 공식 |
9/tcp | DISCARD 프로토콜 | 공식 |
9/udp | DISCARD 프로토콜 | 공식 |
13/tcp | DAYTIME 프로토콜 | 공식 |
13/udp | DAYTIME 프로토콜 | 공식 |
17/tcp | QOTD (Quote of the Day) 프로토콜 | 공식 |
19/tcp | CHARGEN (Character Generator) 프로토콜 | 공식 |
19/udp | CHARGEN 프로토콜 | 공식 |
20/tcp | FTP (파일 전송 프로토콜) - 데이터 포트 | 공식 |
21/tcp | FTP - 제어 포트 | 공식 |
22/tcp | SSH (Secure Shell) - ssh scp, sftp같은 프로토콜 및 포트 포워딩 | 공식 |
23/tcp | 텔넷 프로토콜 - 암호화되지 않은 텍스트 통신 | 공식 |
25/tcp | SMTP (Simple Mail Transfer Protocol) - 이메일 전송에 사용 | 공식 |
37/tcp | TIME 프로토콜 | 공식 |
37/udp | TIME 프로토콜 | 공식 |
49/udp | TACACS 프로토콜 | 공식 |
53/tcp | DNS (Domain Name Syetem) | 공식 |
53/udp | DNS | 공식 |
67/udp | BOOTP (부트스트랩 프로토콜) 서버. DHCP로도 사용 | 공식 |
68/udp | BOOTP (부트스트랩 프로토콜) 서버. DHCP로도 사용 | 공식 |
69/udp | TFTP | 공식 |
70/tcp | 고퍼 프로토콜 | 공식 |
79/tcp | Finger 프로토콜 | 공식 |
80/tcp | HTTP (HyperText Transfer Protocol) - 웹 페이지 전송 | 공식 |
80/udp | HTTP (HyperText Transfer Protocol) - 웹 페이지 전송 | 공식 |
88/tcp | 케르베로스 - 인증 에이전트 | 공식 |
109/tcp | POP2 (Post Office Protocol version 2) - 전자우편 가져오기에 사용 | 공식 |
110/tcp | POP3 (Post Office Protocol version 3) - 전자우편 가져오기에 사용 | 공식 |
113/tcp | ident - 예전 서버 인증 시스템, 현재는 IRC 서버에서 사용자 인증에 사용 | 공식 |
119/tcp | NNTP (Network News Transfer Protocol) - 뉴스 그룹 메시지 가져오기에 사용 | 공식 |
123/udp | NTP (Network Time Protocol) - 시간 동기화 | 공식 |
139/tcp | NetBIOS | 공식 |
143/tcp | IMAP4 (인터넷 메시지 접근 프로토콜 4) - 이메일 가져오기에 사용 | 공식 |
161/udp | SNMP (Simple Network Management Protocol) | 공식 |
179/tcp | BGP (Border Gateway Protocol) | 공식 |
194/tcp | IRC (Internet Relay Chat) | 공식 |
389/tcp | LDAP (Lightweight Directory Access Protocol) | 공식 |
443/tcp | HTTPS - HTTP over SSL (암호화 전송) | 공식 |
445/tcp | Microsoft-DS (액티브 디렉터리, 윈도 공유, Sasser-worm, Agobot, Zobotworm) | 공식 |
445/udp | Microsoft-DS SMB 파일 공유 | 공식 |
465/tcp | SSL 위의 SMTP - Cisco 프로토콜과 충돌 | 비공식, 충돌 |
514/udp | syslog 프로토콜 - 시스템 로그 작성 | 공식 |
540/tcp | UUCP (Unix-to-Unix Copy Protocol) | 공식 |
542/tcp | 상용 (Commerce Applications) (RFC maintained by: Randy Epstein [repstein at host.net]) | 공식 |
542/udp | 상용 (Commerce Applications) (RFC maintained by: Randy Epstein [repstein at host.net]) | 공식 |
587/tcp | email message submission (SMTP) (RFC 2476) | 공식 |
591/tcp | 파일메이커 6.0 Web Sharing (HTTP Alternate, see port 80) | 공식 |
636/tcp | SSL 위의 LDAP (암호화된 전송) | 공식 |
666/tcp | id 소프트웨어의 둠 멀티플레이어 게임 | 공식 |
873/tcp | rsync 파일 동기화 프로토콜 | 공식 |
981/tcp | SofaWare Technologies Checkpoint Firewall-1 소프트웨어 내장 방화벽의 원격 HTTPS 관리 | 비공식 |
993/tcp | SSL 위의 IMAP4 (암호화 전송) | 공식 |
995/tcp | SSL 위의 POP3 (암호화 전송) | 공식 |
** 참고 자료
- TCP/IP 윈도우 소켓 프로그래밍 / 한빛 미디어 / 김선우
'IT 상식' 카테고리의 다른 글
Virtual Box, Hyper-V 실행 설정 (0) | 2021.05.28 |
---|---|
DHCP 프로토콜 동작 원리 (0) | 2020.12.14 |
TCP 통신 중 TIME_WAIT 개념 (0) | 2020.12.10 |
파티션 형식 변경(MBR, GPT) (0) | 2020.12.04 |
Kerberos 프로토콜 인증 방식 (0) | 2020.11.22 |