mojo's Blog
인터넷 네트워크 본문
인터넷 통신
클라이언트에서 서버로 무언갈 호출할 때 인터넷 내(복잡한 인터넷 망)에서 수많은 노드들을 통과하여 서버로 이동하게 된다.
이러한 방식을 제대로 이해하려면 IP(인터넷 프로토콜)을 알아야 한다.
IP
※ IP, 인터넷 프로토콜 역할
- 지정한 IP 주소(IP Address)에 데이터를 전달한다.
- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.
IP 패킷 정보로는 출발지 IP, 목적지 IP, 기타... 등이 있으며 전송 데이터도 포함된다.
이러한 패킷을 클라이언트에서 서버로 전달하는 과정은 다음과 같다.
그렇다면 서버에서 클라이언트로 패킷을 전달하는 과정은 다음과 같다.
※ IP 프로토콜의 한계
1. 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
2. 비신뢰성 : 중간에 패킷이 사라지거나 패킷이 순서대로 안오는 이슈가 존재한다.
3. 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우가 존재한다.
위와 같이 서비스가 불능 상태여도 패킷을 전송하는 상태가 발생한다.
다른 경우로 패킷을 서버에 전송하다가 중간에 손실하는 경우도 존재한다.
데이터 이슈로 패킷을 여러개 보내는 경우가 존재할 때, 클라이언트에서 보낸 패킷들이 서버측에서 패킷들을 순서대로 받지 못하는 경우도 존재한다. (랜덤으로 노드가 이동)
TCP, UDP
※ 인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
※ TCP/IP 패킷 정보
IP 패킷 : 출발지 IP, 목적지 IP, 기타... 등이 들어있다.
TCP 세그먼트 : 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보... 등이 들어있다. (패킷이 순서대로 도착하도록 도와줌)
※ TCP 특징 (전송제어 프로토콜 - Transmission Control Protocol)
- 연결지향 - TCP 3 way handshake (가상 연결)
- 데이터 전달 보증
- 순서 보장
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
※ TCP 3 way handshake
SYN는 접속을 요청하고 ACK는 요청을 수락을 의미한다.3단계 ACK을 서버에 보내는 과정에서 함께 데이터 전송이 가능하다.
※ UDP 특징 (사용자 데이터그램 프로토콜 - User Datagram Protocol)
- 연결지향 - TCP 3 way handshake 를 하지 않는다.
- 데이터 전달 보증이 없다.
- 순서 보장이 없다.
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다.
- IP와 거의 같으며 PORT, checksum 정도만 추가된다.
- 애플리케이션에서 추가 작업이 필요하다.
PORT
한번에 둘 이상 연결해야 한다면?
TCP/IP 패킷 정보에서 TCP 세그먼트에 출발지 PORT, 목적지 PORT 가 존재한다.
IP 와 동시에 PORT 까지 구분해서 다음과 같이 클라이언트가 둘 이상의 연결이 가능하게 된다.
PORT는 같은 IP 내에서(IP: 100.100.100.1) 프로세스를 구분할 수 있다.(게임, 화상통화, 웹 브라우저 등)
예를 들어서 웹 브라우저를 요청하면 목적지 IP(200.200.200.3) 의 80번 포트로 이동하여 요청하여 결과를 클라이언트의 IP(100.100.100.1) 의 10010번 포트로 이동해서 요청된 결과를 받게 된다.
※ PORT
- 0 ~ 65535 : 할당 가능하다.
- 0 ~ 1023 : 잘 알려진 포트로 사용하지 않는 것이 좋다.
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
DNS
IP가 변경될 경우 클라이언트가 해당 IP를 어떻게 찾을 수 있을까?
※ DNS (도메인 네임 시스템 - Domain Name System)
도메인 명을 IP 주소로 변환해준다.
'HTTP' 카테고리의 다른 글
HTTP 헤더1 - 일반 헤더 (0) | 2022.01.26 |
---|---|
HTTP 상태코드 (0) | 2022.01.24 |
HTTP 메서드 및 활용 (0) | 2022.01.23 |
HTTP 기본 (0) | 2022.01.20 |
URI와 웹 브라우저 요청 흐름 (0) | 2022.01.19 |