인터넷 통신과정 ( + IP, TCP/UDP, PORT, DNS )
인터넷에서 두 컴퓨터가 통신하는 과정을 IP·TCP·UDP·PORT·DNS 단계별로 정리한 노트다. 핵심은 IP만으로는 상대방이 데이터를 받을 수 있는 상태인지 확인할 수 없어(비신뢰성) TCP가 3-way-handshake로 연결을 보장하고, PORT로 같은 IP 안의 여러 서비스를 구분하며, DNS가 사람이 기억하기 쉬운 도메인명을 실제 IP로 변환해준다는 점이다.
실행 환경
본 문서는 IP/TCP/UDP/DNS 같은 네트워크 프로토콜 자체의 이론이며, 특정 언어/프레임워크 버전에 종속되지 않는다.
nslookup예시는 일반적인 OS 명령줄 도구 사용법을 보여준다.
네트워크 과정
[ 컴퓨터 A ] ───── 네트워크(인터넷) ───── [ 컴퓨터 B ]
(송신) 수많은 라우터/스위치 경유 (수신)- 컴퓨터 A와 B는 네트워크라는 공간을 통해 서로의 데이터를 주고 받게 된다.
- 컴퓨터는 많이 보급되어 있기에 누구가 누군것인지를 특정할 필요가 있다
네트워크에서 구분하는 방법
[ 컴퓨터 A ] [ 컴퓨터 B ]
IP: 100.100.1.1 ───▶ IP: 200.200.2.2
(출발지 주소) (도착지 주소)- 해당 컴퓨터는 IP라는 네트워크 주소를 가지고 있게 된다.
- 해당 주소를 통해 서로에게 올바르게 원하는 데이터를 주고받게 된다.
IP 란?
- 원하는 주소로 데이터를 보내기 위한 네트워크의 절차 중 한 부분
- 데이터를 가장 안쪽에 두고, 포장지를 씌우는 것처럼 “헤더”라는 이름으로 아래 그림이 붙어지게 된다
- 중요한 부분!
- Source Address
- Destination Address
- 중요한 부분!
- 데이터와 함께 아래 “헤더”가 같이 보내지게 되고, 받는 쪽에서 이 부분을 보고 자기 것인지 확인 후 데이터를 얻게 된다.
| IP 헤더 필드 | 설명 |
|---|---|
| Version | IP 버전 (IPv4 / IPv6) |
| Header Length | 헤더 길이 |
| Total Length | 전체 패킷 길이 |
| TTL (Time To Live) | 패킷 생존 시간(홉 수 제한) |
| Protocol | 상위 프로토콜 종류 (TCP/UDP 등) |
| Source Address | 출발지 IP 주소 (중요) |
| Destination Address | 목적지 IP 주소 (중요) |
| Data | 실제 전송할 데이터 |
IP 헤더 정보
TCP 의 탄생
- TCP (Transmission Control Protocol)로서 “전송 제어 프로토콜”이다.
- IP로만 해서 전송하면 되지, 왜 TCP가 나왔을까?
- IP의 한계
- 상대방이 받을 수 있는 상태인지,아닌지를 확인하지 않고 보냄 ( 비신뢰성 )
- 네트워크를 거치면서 가다가 유실되더라도 알지를 못함
- IP의 한계
- 전송을 제어할 무언가가 필요하다 -> TCP
- 중요한 부분!
- Port 정보
- 이미 IP 헤더로서 상대방 컴퓨터의 정보는 어느정도 알았기에, 세부 주소를 알기 위해서 port 사용
- ex) IP 정보 : 아파트 / PORT 정보 : 호수
- 중요한 부분!
| TCP 헤더 필드 | 설명 |
|---|---|
| Source Port | 출발지 포트 번호 (중요) |
| Destination Port | 목적지 포트 번호 (중요) |
| Sequence Number | 전송하는 데이터의 순서 번호 |
| Acknowledgment Number | 수신 확인 응답 번호 |
| Flags (SYN/ACK/FIN 등) | 연결 제어 플래그 |
| Window Size | 수신 가능한 데이터 크기 |
| Checksum | 오류 검출용 체크섬 |
TCP 헤더
- TCP의 특징
- 3-way-handshake 라는 연결을 통해 상대방이 데이터를 받을 수 있는 상태인지 check를 한다.
- 상대방이 맞고, 연결 가능하다면 연결을 통해 상대방과 데이터를 오고가게 된다.
- 이러한 부분을 “연결 지향적”이라고 한다.
- IP의 한계에서 드러났던 문제들을 제어함으로써 원활한 통신이 가능하게 한다.
- 3-way-handshake
- 클라이언트와 서버는 각각 컴퓨터A, 컴퓨터B로 놓아도 무방하다
- 컴퓨터A가 연결 요청을 하면, B가 허락을 하고 , A가 허락한 것을 알았다를 보내고 연결시작 과정을 마무리한다
- 총 3번 왔다갔다 한다해서 “3-way-handshake”이다.
컴퓨터 A (Client) 컴퓨터 B (Server)
│──────── ① SYN ─────────────▶│ "연결 요청"
│◀─────── ② SYN + ACK ────────│ "요청 수락 + 확인 요청"
│──────── ③ ACK ─────────────▶│ "확인 응답, 연결 성립"3-Way-Handshake
UDP
- TCP와 같은 층에 존재하지만, 쓰임새는 확연히 다르다.
- 빠른 전송을 위해 연결 지향적이지 않은 채로 데이터를 보내게된다 ( IP만을 이용한 전송과 유사 )
- 신뢰성은 없어도 빠른 데이터 제공을 위해 사용할 때가 있다.
| UDP 헤더 필드 | 설명 |
|---|---|
| Source Port | 출발지 포트 번호 |
| Destination Port | 목적지 포트 번호 |
| Length | 헤더 + 데이터의 전체 길이 |
| Checksum | 오류 검출용 체크섬 |
- TCP 헤더에 비해 필드 수가 적어 구조가 훨씬 단순함 (연결 확인/재전송 관련 필드 없음)
UDP 헤더
PORT
-
PORT는 전송제어 프로토콜에서 사용하는 중요한 부분이다.
-
컴퓨터가 받아드릴 수 있는 통로가 65535개가 존재하고, 해당 통로를 Port라고 일컫는다.
-
통로를 통해서, 게임도하면서 채팅도하고 웹서핑도 즐길 수 있는 것이다.
-
Port 정보
- Well-Known 포트 ( 잘 알려진 포트 )
- 0~1023번 까지는 예약된 포트
- DHCP (출발 : 67, 도착 : 68)
- DNS (53)
- SSH (22)
- Telnet (23)
- HTTP (80)
- HTTPS (443)
- 1024~65535 까지는 포트를 따로 지정해서 사용해도 괜찮다
- 0~1023번 까지는 예약된 포트
- Well-Known 포트 ( 잘 알려진 포트 )
DNS
-
원래 모든 웹페이지든 컴퓨터로의 접속이든지 간에 IP + PORT 조합으로 연결을 해야한다.
-
그래서 검색을 할 때도, 문자가 아닌 상대방의 IP를 직접 검색해서 가야한다.
-
-> 이러한 불편함에 DNS가 나오게 됨
-
DNS
- 직접 IP를 검색하지 않더라도, domain 명을 통해서 쉽게 검색 가능
- ex) www.naver.com
$ nslookup www.naver.com
서버: (DNS 서버 주소)
Address: (DNS 서버 IP)
Non-authoritative answer:
이름: www.naver.com
Address: 223.130.xxx.xxx <- domain 명이 실제 IP 주소로 변환되어 반환됨nslookup 명령어 사용 결과
관련 문서
- (학습/프레임워크/Spring Framework) HTTP 이론 - 핵심 개념 및 특징 정리 — 이 노트의 인터넷 네트워크 내용을 HTTP/URI/헤더까지 포함해 한 문서로 종합 정리한 강의 노트