[HTTP] internet network

Yujeong·2023년 10월 31일
0
post-thumbnail

모든 개발자를 위한 HTTP 웹 기본 지식 강의 수강 후, 정리한 글입니다.

목차

  1. 인터넷 통신
  2. IP(Internet Protocol)
  3. TCP, UDP
  4. PORT
  5. DNS

1. 인터넷 통신

인터넷은 어떻게 통신할까?

클라이언트서버가 직접 통신하지 않고 인터넷을 통해서 통신하는 것이다.
인터넷에는 수많은 노드들이 있는데, 목적지까지 여러 개의 노드를 지나면서 통신을 하게 된다.

이러한 통신에 대해서 제대로 알기위해서는 IP에 대한 개념을 정리해야한다.


2. IP(Internet Protocol)

1) 역할

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

2) IP 주소

  • 100.100.100.1, 200.200.200.2와 같은 것
  • 클라이언트, 서버 모두 IP 주소가 있어야 함

3) IP 패킷

  • package + bucket

  • IP 주소에 메시지를 보낼 때의 규칙으로, 출발지 IP 주소, 목적지 IP 주소, 전송 데이터 등을 포함

  • 클라이언트 패킷 전달
    클라이언트에서 보낸 패킷을 인터넷 망에서 노드들끼리 이해하면서 목적지 IP 주소에 도착한다.

  • 서버 패킷 전달
    새 메시지를 만들고, 메시지에 패킷의 정보인 출발지 IP목적지 IP 등을 넣어 클라이언트에게 보낸다.
    인터넷 망이 복잡하기 때문에 클라이언트가 전달할 때랑 서버가 전달할 때에 서로 다른 노드를 통해 전달 될 수 있다. 그래서 IP라는 패킷에 담는 방식으로는 한계가 있다.

4) IP 프로토콜의 한계

  • 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송
    예를 들어, 독일에 있는 서버 PC가 꺼져있는 지를 모르고 클라이언트가 계속 메시지를 보내는 경우이다.

  • 비신뢰성: 중간에 패킷이 사라지거나, 패킷이 순서대로 오지않을 수 있음
    여러 노드들을 거치다가 패킷이 유실될 수 있다.
    메시지를 한 번 보낼 때, 1500byte를 넘으면 나눠서 보낸다. 이때, 패킷마다 노드를 따로 선택해서 보내게 되어 패킷의 도착 순서가 바뀔 수 있다.

    • 전달: ① Hello, - 1500 byte, ② World! - 1500byte
    • 도착: ① World! - 1500byte, ② Hello, - 1500 byte
  • 프로그램 구분
    같은 IP를 사용하는 서버에서 노래 듣고 영화보는 것을 동시에 한다면, 프로세스 식별이 불가능하다.
    (host 식별까지만 가능하다.)


3. TCP, UDP

1) TCP/IP 4계층

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

2) 프로토콜 계층

예시) 채팅 프로그램

1. 프로그램이 Hello world! 메시지 생성: 애플리케이션 계층에서 전송 데이터 생성
2. SOCKET 라이브러리를 통해 전달
3. TCP 정보 생성, 메시지 데이터 포함: 전송 데이터를 TCP 정보로 감쌈
4. IP 패킷 생성, TCP 데이터 포함: IP 정보로 감쌈
5. LAN카드로 서버에 보냄(Ethernet frame): 네트워크 인터페이스를 통해 서버에 전송될 때 이더넷 프레임으로 감쌈

  • TCP/IP 패킷 정보

IP 패킷: 목적지 서버 찾기
TCP 세그먼트: 목적지 서버에서 어떤 서버인지 찾기

3) TCP

연결지향 - TCP 3 way handshake

  1. 클라이언트 ➡️ 서버: SYN 메시지 전송
  2. 서버 ➡️ 클라이언트: SYN + ACK 메시지 응답
  3. 클라이언트 ➡️ 서버: ACK 전송
  4. 데이터 전송 시작

이 과정을 통해 클라이언트와 서버간 서로 살아 있다는 것을 알 수 있다. 즉, 신뢰할 수 있다.
가상연결: 개념적으로 연결된 것으로, 물리적으로 연결된 것이 아니다. 연결 과정에 있는 수많은 노드 서버가 연결되었는 지의 상태는 알 수 없다.

SYN: 접속 요청
ACK: 요청 수락

데이터 전달 보증

클라이언트가 서버로 데이터를 전송하면 서버는 클라이언트로 데이터 잘 받았다고 보낸다.

순서 보장

순서 안맞으면 다시보내라고 요청보낸다.

① 클라이언트 ➡️ 서버: 패킷1, 패킷2, 패킷3 순서로 전송
② 서버: 패킷1, 패킷3, 패킷2 순서로 도착
③ 서버 ➡️ 클라이언트: 패킷2부터 다시 보내라고 요청

신뢰할 수 있는 프로토콜

현재는 대부분 TCP 사용

이미 다 구축되어 있어 최적화 불가능

4) UDP

  • 사용자 데이터그램 프로토콜(User Datagram Protocol)
  • 기능이 거의 없음
  • 연결지향 X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 단순하고 빠름
  • IP와 거의 유사 + PORT + Checksum
  • 애플리케이션에서 최적화 가능

PORT: 어떤 애플리케이션 패킷인지 구분
Checksum: 메시지가 제대로 왔는 지 검증


4. PORT

1) 한 번에 둘 이상 연결해야 한다면?

디스코드하면서 게임을 하는 경우, 어떤 패킷인지 알 수 없는 문제가 생긴다.

2) TCP/IP 패킷

3) 같은 IP 내에서 프로세스 구분


IP: 아파트
PORT: 동, 호수

4) 포트번호

  • 할당 가능: 0~65535
  • 잘 알려진 포트: 사용하지 않는 것이 좋음
프로토콜포트번호
FTP20, 21
TELNET23
HTTP80
HTTPS443

5. DNS

1) IP의 단점을 보완하기 위해 사용

기억하기 어렵다.
변경될 수 있다. (변경되면 접근할 수 없다.)

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

  • 전화번호부
  • 도메인 명을 IP주소로 변환
  • 도메인은 gabia, GoDaddy 같은 곳에서 구매

  1. 도메인명으로 DNS 서버에 접근한다.
  2. DNS 서버는 도메인 이름에 해당하는 IP를 응답한다.
  3. 받은 IP 주소로 패킷을 만들어서 서버에 보낸다.
profile
공부 기록

0개의 댓글