1. 인터넷 네트워크

suyeon·2022년 9월 15일

HTTP

목록 보기
1/4
post-thumbnail

📌 인터넷 통신

예를 들어 클라이언트가 한국에 있고 서버가 미국에 있다면 한국에 있는 클라이언트가 'Hello, world'라는 메시지를 보내야 하는데 중간에 노드라고 하는 서버들을 걸쳐서 미국에 있는 서버에게 안전하게 메시지를 도착해야 한다.

어떤 규칙으로 미국에 있는 서버에게 안전하게 도착할 수 있는지 이해 하려면 먼저 IP(인터넷 프로토콜)에 대해서 알아야 한다.

📌 IP(Internet Protocol)

IP(Internet Protocol) 역할

  • 지정한 IP 주소(IP Address)에 데이터 전달
  • 패킷(Packet)이라는 통신 단위로 데이터 전달

IP 패킷 정보

패킷 전달

IP 프로토콜의 한계

  • 비연결성

패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.

  • 비신뢰성

서버들이 전달하는 사이에서 중간 노드가 사라지거나 꺼져있으면 패킷이 소실된다.

메시지를 한 번 보낼때 1,500byte가 넘으면 끊어서 보내는데 패킷들이 다른 노드를 타서 순서대로 안 올 수 있다.

  • 프로그램 구분
    클라이언트에서 게임과 음악 듣는 것을 동시에 하고 있을 때 같은 IP로 쓰고 있는데 어떤 방식으로 구분되지 않아 한계가 있다.

📌 TCP, UDP

IP 프로토콜의 문제점을 TCP 프로토콜이 해결해준다.

프로토콜 4계층

애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층

TCP/IP 패킷

TCP 특징

  • 전송 제어 프로토콜 (Transmission Control Protocol)
  • 연결지향 - TCP 3 way handshake (가상 연결)

SYN(Synchronization:동기화) : 접속 요청
ACK(Acknowledgement:승인) : 요청 수락

  1. 클라이언트에서 먼저 SYN 메시지를 서버에게 접속을 허락해달라고 요청한다.
  2. 서버는 접속을 수락하고 ACK 메시지를 클라이언트한테 보낼 때 서버도 접속을 허락해달라고 SYN 메시지와 함께 보낸다.
  3. 클라이언트가 접속을 수락하고 서버에게 ACK 메시지를 보낸다.
    ✔ 참고로 요즘에는 최적화가 잘 되어있어 마지막 ACK를 보낼 때 데이터도 전송한다.
  4. 3단계를 거쳐 연결이 되고나면 서로 신뢰함으로써 데이터를 전송한다.

그리고 TCP 연결이 되었다고 연결이 된게 아니라(물리적인 연결) 개념적 연결이다.

  • 데이터 전달 보증

메시지에 TCP 프로토콜이 포함되어 있으면 메시지를 전송할 때 서버에서 잘 받았다고 다시 보낸다.
클라이언트가 메시지를 잘 전달 됐는지 안됐는지 알 수 있다.

  • 순서 보장

메시지가 1,500byte가 넘어 패킷을 1번, 2번, 3번 순서로 나눠서 보냈다. 서버에서 1번, 3번, 2번 순서로 도착을 하면 내부적으로 최적화하는 로직에 따라서 2번부터 다시 보내라고 클라이언트에 보낸다. 그래서 순서가 보장이 된다.

  • 신뢰할 수 있는 프로토콜
    TCP 정보 안에는 전송 제어, 순서, 검증 정보가 있어서 TCP 프로토콜이 신뢰할 수 있는 프로토콜이라고 한다.

  • 현재는 대부분 TCP 사용

UDP 특징

  • 사용자 데이터그램 프로토콜(User Datagram Protocol)
  • 하얀 백지에 비유(기능이 거의 없음)
  • 연결지향 - TCP 3 way handshake X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • 정리
    - IP와 거의 같다. +PORT +체크섬 정도만 추가
    - 애플리케이션에서 추가 작업 필요

TCP는 3 way handshake 하는데 시간이 오래 걸리고, 데이터 양도 크고, 최적화 할수가 없다. 즉, 손을 댈 수가 없다.
반면에 UDP는 하얀 백지이기 때문에 단순하고 빠르고, 기능 확장이 가능하다.

📌 PORT

클라이언트에서 게임도 하고 화상통화도 하고 웹 브라우저도 하고 있으면 여러 개의 서버랑 통신해야한다. 클라이언트 IP에서 패킷이 오는데 이 패킷이 게임에서 온 패킷인지 화상통화에서 온 패킷인지 알 수가 없다.
반대로도 마찬가지이다. 이러한 문제를 어떻게 구분할 수 있을까?

TCP/IP 패킷 정보

패킷 정보

IP : 목적지 서버를 찾는 용도
PORT : 서버 안에서 돌아가는 애플리케이션을 구분하는 용도

PORT - 같은 IP 내에서 프로세스 구분

같은 IP 내에서 프로세스를 구분하는 게 PORT 이다.

  • [클라이언트] 게임 : 8090 ↔ [서버] 게임 : 11200
  • [클라이언트] 화상통화 : 21000 ↔ [서버] 화상통화 : 32202
  • [클라이언트] 웹 브라우저 : 10010 ↔ [서버] 웹 브라우저 : 80

위 예시처럼 각각 클라이언트와 서버 안에 맞는 PORT 번호를 찾아서 연결하면 된다. 여기서 패킷을 보낼 때 IP와 PORT를 포함해서 보낸다.

PORT 번호

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
    • FTP - 20, 21
    • TELNET - 23
    • HTTP - 80
    • HTTPS - 443

📌 DNS

IP 문제점

  • 기억하기 어렵다.

  • 변경될 수 있다.

DNS (Domain Name System : 도메인 네임 시스템)

  • 전화번호부
  • 도메인 명을 IP 주소로 변환

DNS 사용

IP의 기억, 변경 문제를 해결할 수 있다.
도메인을 사기 위해서 DNS 서버에 도메인을 등록을 할 수 있다. 클라이언트가 DNS 서버에다가 도메인에 맞는 IP를 달라고 요청하면 DNS 서버가 응답하고 클라이언트는 서버에 도메인으로 접속할 수 있다. 나중에 IP가 변경되면 DNS 서버에 등록된 도메인에 IP를 변경할 수 있다.

0개의 댓글