IP 방식의 한계

| 한계점 | 설명 |
| 비연결성 | 패킷을 받을 대상이 없거나 서비스 불가능 상태여도 패킷전송 |
| 어플리케이션 구분 | 대상 컴퓨터의 어떤 프로그램에 사용될 데이터인지 구분 불가 |
| 비신뢰성 | 패킷 소실 발생, 패킷의 손상여부를 송신, 수신측에서 알수 없음 |
위와 같은 IP 방식의 한계로 인해 TCP가 등장하였다.
TCP - 전송 제어 프로토콜 (Transmission Control Protocol)
1. 연결 지향 - TCP 3 way handshake
2. 데이터 전달 보증
3. 순서 보장
4. 신뢰할 수 있는 프로토콜, 현재 대부분은 TCP를 사용한다.

| 단계 | 클라이언트 | 서버 | 설명 |
| 1단계 (SYN) | SYN 패킷 전송 (seq = 100) | 대기중 | 클라이언트가 서버에 연결 요청을 보냄. |
| 2단계 (SYN, ACK) | 대기중 | SYN-ACK 패킷 전송 (Seq=200, Ack=101) |
서버가 연결 요청을 수락하고 응답함. |
| 3단계(ACK) | ACK 패킷 전송 (Seq=101, Ack=201) |
연결 완료 | 클라이언트가 응답을 확인하고 연결 완료. |
| 용어 | 역할 | 설명 |
| SYN | 연결 요청 | 클라이언트가 서버에 연결 요청 시 사용, 초기 시퀀스 넘버를 전달 |
| ACK | 응답 확인 | 데이터 요청을 정상적으로 받았음을 알림 시퀀스 넘버에 대한 응답을 보냄 |
TCP는 신뢰성이 있고, 순서를 보장한다. 하지만 그림과 같이 과정을 거치다보니 속도가 느리다는 특징이 있다.
UDP - (User Datagram Protocol)

UDP는 연결 설정 없이 바로 데이터를 전송한다.
신뢰성, 순서를 보장하지 않는다. -> 단순하고 빠르다.
비 연결형 프로토콜이다.
Port와 Checksum을 포함한다. -> 어플리케이션에서 추가 작업 필요
| 용어 | 설명 |
| Port | 서비스나 어플리케이션을 구분하는데 사용 (소스 포트, 목적지포트) |
| Checksum | 데이터그램이 전송중 손상되지 않았는지 확인 Checksum이 일치하지 않으면 수신자는 해당 데이터그램을 버림 |
TCP, UDP의 차이점
| TCP | UDP | |
| 연결 설정 | 3-way-handshake | 연결 설정 없이 바로 데이터 전송 |
| 속도 | 상대적으로 느림 | 빠름 |
| 신뢰성 | O, (패킷 손실 복구, 순서 보장) | X, (패킷 손실 순서 보장X) |
| 오버헤드 | 상대적으로 높음(연결 설정, 데이터확인 과정) | 낮음 |
| 흐름제어 | 있음(흐름제어, 혼잡제어) | 없음 |
| 체크섬 | 있음 | 있음(패킷 손실시 버림) |
| 특징 | 연결 지향적, 신뢰성 보장, 흐름 제어, 순서 보장 | 비연결형, 빠른 전송, 신뢰성 보장하지 않음 |
Port - 포트
네트워크 통신에서 애플리케이션이나 프로세스를 식별하는데 사용되는 논리적 주소를 의미
포트의 역할
| 역할 | 설명 |
| 애플리케이션 식별 | 포트 번호를 통해 네트워크 상의 특정 애플리케이션이나 서비스를 식별 |
| 프로토콜 구별 | 포트 번호로 TCP, UDP 등 프로토콜의 사용을 구분 |
| 다중 연결 지원 | 하나의 장치에서 여러 서비스가 동시에 실행될 수 있도록 지원 |

자주 사용되는 PORT
- 0 ~ 65535: 할당 가능
- 0 ~ 1023: 이미 사용되고 있는 포트(잘 알려진포트) -> 국제 도메인 관리기구에서 관리 -> 사용하지 않는 것 권장
| 서비스 | 포트 번호 | 프로토콜 | 설명 |
| FTP | 20, 21 | TCP | 파일 전송 프로토콜, 데이터 전송(20), 명령 전송(21) |
| SSH | 22 | TCP | 원격 접속을 위한 보안 프로토콜 |
| 텔넷 | 23 | TCP | 원격 접속을 위한 텍스트 기반 프로토콜 |
| SMTP | 25 | TCP | 이메일 발송을 위한 프로토콜 |
| DNS | 53 | TCP / UDP | 도메인 이름을 IP 주소로 변환하는 시스템 |
| DHCP | 67 | UDP | 네트워크 장치에 IP 주소를 동적으로 할당하는 프로토콜 |
| HTTP | 80 | TCP | 웹 페이지와 데이터를 주고받는 기본 프로토콜 |
| HTTPS | 443 | TCP | 암호화된 웹 통신을 위한 보안 프로토콜 |
| RDP | 3389 | TCP / UDP | 원격 데스크탑 접속을 위한 프로토콜 |
DNS - (Domain Name Service)
도메인 이름을 IP 주소로 변환하는 시스템이다. 굳이 IP가 있는데 DNS는 왜 나왔을까?
| 컴퓨터 간 통신을 위해선 IP 주소가 필요 | 1. IP 주소는 사이트 마다 특징이 없다. 외우기 힘들다. 2. IP 주소가 변경되면 새로운 IP에 접근이 불가능하다. |
| IP는 변경되는 주소 | 1. 가정집에서 사용되는 IP는 유동이다. 2. IP가 변경되면 새로운 IP에 접근이 불가능하다. |

DNS 동작 단계
- 도메인 이름 등록
- 사용자가 도메인 이름(예: spartacodingclub.kr)을 구매하고 DNS 서버에 등록합니다.
- DNS 서버는 해당 도메인 이름과 IP 주소를 연결합니다.
- 도메인 이름 요청
- 사용자가 웹 브라우저에 도메인 이름(예: www.example.com)을 입력하여 요청합니다.
- 도메인 이름 해석
- DNS 서버는 요청받은 도메인 이름을 IP 주소로 변환합니다.
- IP 주소 반환
- 변환된 IP 주소(예: 192.168.1.1)가 사용자에게 반환됩니다.
- 웹사이트 접속
- 사용자는 반환된 IP 주소를 사용하여 웹사이트(예: spartacodingclub.kr)에 접속합니다.
- IP 주소 변경 시 업데이트
- 웹사이트의 IP 주소가 변경된 경우, 사용자는 DNS 서버에 새로운 IP 주소를 업데이트 요청합니다.
- DNS 서버는 기존 도메인 이름과 새 IP 주소를 연결하여 최신 정보를 유지합니
URI, URN, URL 차이
| 구분 | URI (Uniform Resource Identifier) |
URL (Uniform Resource Locator) |
URN (Uniform Resource Name) |
| 정의 | 자원의 고유 식별자 | 자원의 위치와 프로토콜까지 포함하는 식별자 | 자원의 고유 이름, 위치 정보 없이 자원을 식별 |
| 구성 | URL과 URN을 포함 | 프로토콜, 도메인, 경로 포함 | 자원의 이름만 포함 |
| 목적 | 자원을 고유하게 식별 | 자원에 접근 가능한 위치 정보 제공 | 자원을 이름으로 고유 식별 (위치 불필요) |
| 예시 | http://example.com urn:isbn:0451450523 |
https://example.com/path | urn:isbn:0451450523 |
| 주요 특징 | 자원의 위치 또는 이름 모두 포함 | 자원의 위치를 통해 접근 가능 | 이름으로 자원을 식별, 위치 정보 없음 |
| 예시 | 웹 주소, ISBN, DOI | 웹사이트 주소, 파일 경로 | ISBN, DOI, UUID |
URL 구조
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
예시 : https://www.google.com:443/search?q=스파르타+코딩클럽
🔎 스파르타 코딩클럽: Google 검색
www.google.com
| 구성요소 | 설명 | 예시 |
| scheme | 프로토콜 (http, https 등) | https |
| host[:port] | 도메인 또는 IP 주소 (포트는 선택적) | www.google.com:443 |
| [/path] | 자원 경로 | /search |
| [?query] | 쿼리 문자열 (key=value 형태) | ?q=스파르타+코딩클럽 |
| [#fragment] | HTML 내부 특정 위치 | #image |