HTTP: IP, TCP, UDP, DNS

otter·2022년 2월 10일
0
post-thumbnail

- 인터넷에서, 내가 누군가에게 메세지를 전달할때 어떤 방식으로 전달될까?


IP(인터넷 프로토콜)

  • IP를 통해서 우리는, 누군가에게 메세지를 전달할 수 있다.
  • IP는 지정한 IP주소에 데이터를 패킷이라는 데이터로 전달한다.
  • 클라이언트는 IP 패킷에 출발지의 IP, 목적지의 IP, 요구 사항등을 서버에 보내는데,
  • 이렇게 보내지면 목적지의 IP를 따라서 노드를 건너 서버에 도착한다.
  • 서버에서 이 IP 패킷을 받으면 서버는, 적혀져 있는 출발지의 IP 주소를 이용해 데이터를 클라이언트에 전송한다.

IP 프로토콜의 한계

  • 비연결성
    - IP프로토콜은, 데이터를 전송하기 전에 서로 연결하는 단계를 거치지 않는다.
    (TCP는 데이터를 전송하기 전에 연결하는 단계를 거친다.)
    - 이런점에서, 데이터를 전송할때 상대방의 연결이 잘 되어있는지 확인할 수 없다.
    - 상대방의 연결이 잘 안되어 있다고 하더라도, 패킷을 전송시킨다. (알 수 없으므로)
  • 비신뢰성
    - 패킷이 중간에 소실되어지더라도 알 수 없다.
    - 패킷의 전달 순서가 보장되지 않는다.
    (패킷이 크면, 패킷을 나누어 전송하는데 패킷의 순서를 받는 쪽이 알 수 없다.)
  • 프로그램 구분
    - 사용자가 다양한 프로그램을 사용한다고 가정하면, IP의 충돌이 일어날 수 있다.

TCP

  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP를 사용한다.

  • TCP 3 WAY HANDSHAKE : 비연결성 해결
    - 클라이언트가 서버에 SYN (접속요청)을 보내면,
    - 서버는 클라이언트에 ACK (요청수락) 하고 SYN (접속요청)을 보낸다.
    - 클라이언트는 서버로부터 받은 SYN (접속요청)ACK (요청수락) 한다.
    - 쉽게 말하자면, 데이터를 송수신하기전에 서로 지금 가능한 상태인지에 따라서 연결을 먼저 하고 연결을 확인하는 과정을 거친다.
  • 데이터 전달 보증 : 비신뢰성 해결
    - 클라이언트가 서버에 데이터를 전송하면, 서버는 클라이언트에 데이터를 잘 받았다고 전송한다.

  • 순서 보장 : 비 신뢰성 해결
    - TCP내부에는 패킷의 순서가 적혀져 있어, 서버는 이를 보고 받아야 하는 패킷의 순서를 인지한다.
    - 잘못된 순서의 패킷이 전달되면, 맞는 순서의 패킷을 다시 요청한다.

  • 포트의 사용 : 프로그램 구분 해결
    - TCP의 패킷에는 출발지의 PORT와 목적지의 PORT정보다 담기는데, 이를 통해서 다양한 프로그램을 사용할때 충돌을 방지하고 프로세스를 구분할 수 있다.
    - 예를들어, 웹 브라우저 요청 포트는 10010의로 정해두면 해당 포트만을 이용해 웹브라우저 요청이 진행되고 동시에 다른 포트에서는 게임을 할 수 있는 식이다.


UDP

  • UDP는 User Datagram Protocol의 준말이다.
  • UDP는 가지고 있는 기능이 거의 없다.
    - TCP가 가지고 있던 기능-순서보장-등이 없다.
    - 오히려 가지고 있는 기능 자체가 거의 없다는 점에서 빠르다.
  • 애플리케이션의 추가 작업을 통해서, 최적화를 다양하게 할 수 있다.
  • HTTP3에서 사용된다.

DNS : Domain Name System

  • 도메인명을 특정한 IP 주소로 변환하는 것이다.
  • 예를 들어, 도메인 명의 google.comdns서버를 사용해서 200.200.200.2로 IP를 확인할 수 있다.

자바스크립트에서 DNS 이용하기.

  • 자바스크립트에서 DNS를 이용해서 아주 간단히 특정 URL의 IP주소를 얻을 수 있다.
    (DNS api의 기능은 아주 다양한 것 같지만, 일단 ip주소를 얻는 것 부터..😂)

const dns = require('dns');

const google = dns.lookup('google.com', (err, address) => {
    console.log(address);
})
// 172.217.25.78
// IP주소로 접속해도 google.com이 문제없이 나온다.!

이 문서는 인프런의 모든 개발자를 위한 HTTP 웹 기본지식 강의를 듣고 정리한 내용입니다.

profile
http://otter-log.world 로 이사했어요!

0개의 댓글