HTTP - (1) Internet Network

sorikikikim·2022년 6월 29일
0

HTTP

목록 보기
1/4

김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 공부하고 정리하는 포스트입니다.


[인터넷 네트워크]

인터넷 통신


위와 같이 복잡한 인터넷 내부는 어떻게 동작할까?

1. IP(Internet Protocol)

IP 주소 부여


송,수신 할 서버에 IP 주소를 부여해야 송,수신이 가능하다.

IP(Internet Protocol)의 역할

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

IP 패킷 정보

전송 데이터 외부에 IP 패킷을 만들어 송수신 IP 및 기타 정보들을 넣어 인터넷 망에 전달하며, IP 패킷에 저장된 정보에 기반하여 노드끼리 수신하여 목적지로 전송한다. 하지만 인터넷 망은 매우 복잡하여 요청과 응답이 각자 다른 경로를 통해 전송될 가능성이 크다.

IP 프로토콜의 한계

  • 비연결성

    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성

    • 중간에 패킷이 사라지면?
    • 패킷을 여러 개 보냈는데 순서대로 안오면?
  • 프로그램 구분

    • 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 둘 이상(게임, 음악 등..)이면?


이와 같은 한계를 해결하기 위해 TCP를 사용한다.

2. TCP, UDP

인터넷 프로토콜 스택의 4계층

이렇게 각 계층이 쌓여있는데, TCP는 IP 계층 위에 살짝 얹어서 보안을 해준다고 보면 된다.

서버에게 Hello, world라는 메세지를 전달한다고 할 때 다음과 같은 순서를 거치게 된다.

SOCKET 라이브러리를 통해서 OS 계층에 메세지를 넘기면 TCP 정보로 메세지를 감싼다. 그리고 감싸진 메세지를 IP에게 넘겨주면 이전에 확인했던 것처럼 패킷을 만든다. 이렇게 만들어진 패킷이 네트워크 인터페이스, 랜 카드를 통해서 나갈 때 Ethernet frame으로 감싸져서 나가게 된다.

TCP/IP 패킷 정보

이전의 IP 패킷은 출발지 IP, 목적지 IP 등으로 전송 데이터를 감싸고 있었다. 하지만 TCP/IP는 IP 패킷 내부에 TCP 세그먼트, TCP와 관련된 정보가 들어간다. 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 들어가게 되고 이러한 정보들로 인해 IP 프로토콜의 문제가 해결된다.

TCP(Transmisson Control Protocol) 특징

  • 연결지향 - TCP 3 way handshake (가상연결)
  • 데이터 전달 보증
  • 순서 보장

TCP 3 way handshake

TCP 프로토콜로 연결하면 먼저 SYN이라는 메세지를 서버에 보낸다. 그러면 서버측에서 수신을 했다는 뜻으로 ACK를 포함하여 SYN + ACK를 전달하면 클라이언트는 다시 이해했다는 뜻으로 ACK를 돌려보낸다. 이렇게 3번 주고 받고 연결이 되고나면 데이터를 주고받게 된다. 요즘은 최적화가 되어서 클라이언트가 ACK를 보낼 때 데이터 전송이 가능하다.

여기서 중요한 점은 실제로 연결된게 아닌 개념적으로 연결된 것이다. 단지 SYN과 ACK을 주고 받았기 때문에 연결이 되었다고 논리적으로 판단하는 것이다. 즉, 전용 랜선이 보장되는 것은 아니다.

데이터 전달 보증

TCP로 연결했다면 데이터를 전송했을 때 서버측에서 데이터를 잘 받았다고 답장을 보내준다. 이를 통해서 메세지가 잘 전달되었는지 확인할 수 있는 것이다.

순서 보장

패킷을 1, 2, 3 순으로 전달했는데 서버측에서 1, 3, 2로 받았을 경우 서버는 3, 2를 버리고 2번부터 재전송을 요구한다. 물론 서버 측에서 로직적으로 최적화가 가능하지만 기본적인 방식은 이렇다. 이것이 가능한 것은 TCP 내부에 정보가 들어있기 때문이다.

UDP(User Datagram Protocol) 특징

  • 기능이 거의 없음(3 way handshake x, 데이터 전달 보증 x, 순서 보장 x)
  • IP와 거의 같음 +PORT +Checksum
  • 데이터 전달이 빠르고 단순함
  • 어플리케이션에서 추가 작업 필요

그렇다면 UDP를 왜 쓸까? TCP는 분명히 좋은 것이지만, 데이터 양도 크고 전송속도도 빠르게 만들기 어렵다. 즉, 원하는대로 만들 수 없다. 이 때 애플리케이션 레벨에서 원하는 것을 만들어서 UDP를 통해서 사용하는 것이다.

HTTP3부터는 TCP의 3 way handshaking으로부터 최적화를 위해 UDP를 사용한다.

3. PORT

IP : 목적지 서버를 찾는것
PORT : 서버 내 어플리케이션을 구분하는 것

한번에 둘 이상 연결하려면?

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


TCP/IP를 보면 출발지 PORT와 목적지 PORT라는 것이 있다. IP는 목적지를 찾는 것이고, 내부에서 돌아가는 애플리케이션을 구분하는 것이 PORT라고 생각하면 된다.
즉, 같은 IP 내에서 프로세스를 구분해주는 것이 PORT이다. 쉽게 생각하기 위해서 예를 들자면 IP는 아파트이고, PORT는 동호수인 것이다.

PORT 번호

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

4. DNS

IP의 문제점

  • 기억하기 어렵다.
  • 변경될 수 있다.

DNS(Domain Name System)

  • 전화번호부와 비슷한 개념
  • 도메인 명을 IP주소로 변환


DNS 서버에 도메인 명으로 IP주소가 저장되고, 변경되면 갱신할 수 있기 때문에 IP의 문제점을 해결할 수 있다.

0개의 댓글