인터넷 프로토콜 스위트(TCP/IP)를 기반으로 하여 전 세계적으로 연결되어있는 컴퓨터 네트워크 통신망을 일컬음
- 해저 광케이블
- 인공위성
인터넷이 통하는 네트워크에서 정보를 송수신하는 통신에 대한 규약을 의미
- IP 주소
- 각 기기 간의 통신을 식별할 수 있는 고유 주소 (ex. 111.123.121.22)
- 통신 시, 지정한 IP 주소에 패킷(Packet)이라는 단위로 데이터를 전달
- 패킷(Packet)
- 소스 IP(출발지), 대상 IP(도착지)를 포함하고 있어서 어떤 컴퓨터에 데이터를 전송할지 판별할 수 있음
- 크게 헤더, 페이로드, 트레일러(수신여부 포함)으로 구분
- 데이터를 주기만 하는 것이 아닌 받고 응답까지 함
- IP 방식의 문제점
- 애플리케이션 구분
- 대상 컴퓨터의 어떤 프로그램에 사용될 데이터인지 구분할 수 없음
- 비연결성
- 대상의 현재 상태에 상관없이 데이터를 전송
- 비신뢰성
- 패킷이 소실되는 경우 발생 (손상 여부를 송신/수신측 모두 알 수 없음)
- 패킷의 순서가 뒤죽박죽인 경우 발생 (용량이 큰 데이터의 경우 패킷이 여러 개로 나뉘어져 전송)
- 패킷이 손실되거나 오류가 발생하여도 데이터의 재전송을 진행하지 않음
서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜
- 3 Way HandShake
- 접속 요청 (SYN)
- 요청 수락 (ACK) 및 접속 요청 (SYN) -> ACK가 없다면 연결 실패로 간주
- 요청 수락 (ACK) -> ACK와 함께 데이터 전송 가능
- 데이터 전송 여부에 대한 확인이 가능하고 패킷 순서를 보장할 수 있음
- 연결 과정 및 데이터 전송에 시간이 많이 소요되어 느림
💡 SYN (Synchronize)
- 클라이언트가 서버에게 연결을 요청하는 첫 번째 단계
연결을 시작하고 싶다
는 의사를 나타내기 위해 SYN 플래그가 설정된 패킷을 전송- 패킷에는 시퀀스 번호도 포함되어 있고 및 데이터 전송 순서를 관리할 준비도 함
💡 ACK (Acknowledge)
- 서버가 클라이언트의 SYN 패킷을 받고, 확인했다는 신호를 보내는 단계
- 클라이언트의 SYN 요청을 수락하며, 자신도 연결을 시작하고 싶다는 뜻으로 SYN 플래그와 ACK 플래그가 설정된 패킷을 클라이언트에게 전송
- 이 때, 서버는 클라이언트의 시퀀스 번호에 1을 더한 값을 ACK로 응답
비연결형, 신뢰성이 없는 전송 프로토콜로서 실시간 통신이나 스트리밍 애플리케이션 등 빠른 전송이 중요한 요구를 충족하기 위해 개발
- IP 방식과 거의 비슷하고 3 Way HandShake를 하지 않음
- 데이터 전송, 응답, 순서를 보장하지 않음 (비신뢰성)
- 추가적인 기능이 거의 없어 속도가 빠름
- IP와의 차이점으로 포트(PORT)가 존재함
- 데이터 무결성 검사인 체크섬(Checksum)을 포함
- 잘못된 데이터가 전송되지 않도록 함
같은 IP 내에서 프로세스를 구분하기 위해 사용
- TCP/IP 패킷 구조
- 소스 IP, 소스 PORT, 대상 IP, 대상 PORT, 데이터, ...
- 자주 사용되는 포트
- 0 ~ 65535 할당 가능
- 0 ~ 1023은 이미 사용되고 있는 포트이기 때문에 사용하지 않는 것이 좋음
- FTP : 20, 21 (TCP)
- SSH : 22 (TCP)
- TELNET : 23 (TCP)
- SMTP : 25 (TCP)
- DNS : 53 (TCP / UDP)
- DHCP : 67 (UDP)
- HTTP : 80 (TCP)
- HTTPS : 443 (TCP)
- RDP : 3389 (TCP / UDP)
도메인 이름과 IP 주소를 서로 변환하는 역할을 수행 (즉, 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 읽을 수 있는 IP 주소로 변환)
- DNS가 나오게 된 이유
- 컴퓨터 간의 통신을 위해선 IP 주소가 필요하지만, 사이트마다 특징도 없고 길어서 외우기 힘듦
- IP는 변경되는 주소이고, 만약 변경된 IP 주소를 전달 받지 못하면 새로운 IP 주소에 접근할 수 없음
- DNS 동작 순서
- 원하는 이름의 도메인을 구매 후, DNS 서버에 등록
- 도메인명을 입력하면 DNS 서버는 IP 주소를 반환
- IP가 변경될 경우, DNS 서버에 등록된 IP 주소만 변경하면 됨
- IP 주소의 형태가 아닌 도메인명의 형태(www.naver.com)로 웹에 접속
인터넷 자원(Resource)을 나타내는 고유 식별자(Identifier)
- URI(Uniform Resource Identifier)
- 인터넷 자원을 식별할 수 있는 문자열
- Uniform : 자원(Resource)을 식별하는 통일된 방식을 의미
- Resource : 자원(페이지, 텍스트, 이미지, 동영상, 파일 등)을 의미
- Identifier : 식별자를 의미
- 하위 개념으로 URL, URN이 존재
- URL(Uniform Resource Locator)
- 자원의 위치를 의미
- 일반적으로 도메인 주소로 알려져 있으며 프로토콜을 포함
- 자원의 위치를 변경하면 기존 URL은 사용할 수 없기 때문에 URN이 등장하게 됨
- URN(Uniform Resource Name)
- 자원의 이름을 의미
- 자원의 위치가 변경되어도 이름으로 찾기 때문에 사용 가능
- 프로토콜을 포함하지 않음
- URN으로 접근하는 방법은 대중화 되어 있지 않음
💡 대부분 대중화된 URL을 사용하여, URI를 URL과 같은 의미로 사용
프로토콜을 포함한 자원(Resource)의 위치를 나타냄
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment] https://www.google.com:443/search?q=오늘의+날씨
- URL 구조
[]
- 생략 가능
- scheme
- 주로 프로토콜을 사용하며, 웹에서는
http
,https
,ftp
를 주로 사용- user[:password]
- 사용자 정보로서 URL은 보안에 취약하여 사용하지 않음
- host[:port]
- 도메인명 또는 IP 주소를 직접 사용
- 포트는 일반적으로 생략
- [/path]
- 리소스의 경로
- 계층 구조로 구성
- [?query]
- key=value 형태로 구성
Query Parameter
,Query String
이라고 하며 같은 의미를 나타냄?
로 시작되고&
로 구분- [#fragment]
- html 내부 북마크 등에 사용
- 전달받은 URL로 접속 시 특정 위치(fragment)로 이동 가능
https://www.google.com:443/search?q=오늘의+날씨
URL을 입력- DNS 서버를 조회하여
www.google.com
에 해당하는 IP 주소를 응답 받음- 웹 브라우저에서 HTTP 요청 메시지를 생성
오늘의 날씨를 검색해줘
라는 것과 동일- 요청 패킷 (HTTP 메시지 포함)을 구글 서버로 전송
- 구글 서버에서 HTTP 요청 메시지를 기반으로 HTTP 응답 메시지를 패킷으로 클라이언트에게 전달
- 응답 패킷에 담긴 HTML 코드를 기반으로 응답 결과가 브라우저에 그려짐
✅ 출처
https://www.researchgate.net/figure/The-illustration-of-the-URL-URN-and-URI-26_fig4_346585530