Post

HTTP - 1 인터넷 네트워크

해당 자료는 인프런 김영한 선생님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의노트입니다.


1. IP(인터넷 프로토콜)

IP 프로토콜은 다음과 같은 역할이 있습니다.

  • 지정한 IP주소로 데이터 전달
  • 패킷 단위로 전송 IP 패킷 정보에 출발지, 목적지, 메시지를 형식에 맞춰 보냅니다.
    그 다음 목적지에서 메시지를 받으면 목적지에서 출발지에 다시 잘받았다는 메시지를 보냅니다.
    그 와중에 여러 노드(서버)들을 거치기 때문에, 출발했을 때와 도착지에서 다시 출발지로 메시지를 보낼 때의 경로가 다를 수 있습니다.

IP 프로토콜의 한계

  • 비연결성
    • 패킷을 받은 대상이 없거나 서비스 불능 상태(컴퓨터 전원이 꺼져있거나 등)이여도 패킷을 전송합니다.
  • 비신뢰성
    • 전송 도중 사라지거나 패킷을 보낸 순서대로 오지 않을 가능성이 있습니다.
  • 프로그램 구분
    • 만약 게임도하고 음악도 같은 PC에서 들으면 어떤 프로그램에서 패킷을 보내는 지 프로그램을 구분할 수 없습니다.

이러한 단점을 해결한 것이 TCP/UDP 입니다.


2. TCP/UDP

프로토콜 계층에 따라 메시지를 보낼 때 SOCKET 라이브러리를 통해 전달하면서 TCP( 메시지 데이터) 그 다음 IP 패킷을 담아 물리계층인 LAN카드를 통해 서버로 보냅니다.

TCP에서는 다음과 같은 정보들을 담아줍니다.

  • 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증정보 등.. 위에서 IP 프로토콜의 단점인 순서 문제 등을 해결할 수 있게 됩니다.

TCP

  • 전송 제어 프로토콜(Transmission Control Protocol)
  • 연결지향 (연결을 하고 메시지를 보내기 때문에 서비스 불능 상태를 무시하지 않음.) - TCP 3 way handshake
    • TCP 3 way handshake에 대한 설명을 해줍니다.
      1. 클라이언트에서 SYN(신호)(헤더)
      2. 서버에서 SYN(신호) + ACK(응답)(헤더)
      3. 클라이언트에서 ACK(응답) + 데이터전송 이 연결은 논리적으로 연결되어 있습니다.
        중간에 수 많은 노드들을 거쳐 온 것은 신경을 안쓴다는 것입니다.
        또한 응답을 서로 받는 과정에서는 헤더 부분만 전송하여 응답을 주고받습니다.
  • 데이터 전달 보증(데이터 누락 시 볼 수 있음)
    • 서버에서 데이터를 받았으면 응답을 하므로 누락을 알 수 있다.
  • 순서 보장
    • 패킷을 1,2,3 순서로 보냈을 때 1,3,2 순서로 도착하면 서버에서 내부의 로직에 따라 패킷을 패킷 2번을 다시 보내게 합니다.

UDP

TCP와 같은 계층에 있고 다음과 같은 기능이 있습니다.

  • 데이터 전달 보증 X
  • 순서 보장 X
  • 연결지향 X
  • 단순하지만 빠름
  • IP와 거의 같지만 + PORT, + 체크섬 정도만 추가 여러 어플리케이션을 사용하고 있을 경우 각각 어플리케이션 서버와 패킷을 주고 받는데, 어떤 어플리케이션에 패킷을 전달할 지 알 수 있게 하는 것이 PORT의 역할입니다.

현재 TCP가 인터넷을 점유했기 때문에 통신 최적화를 적용하기 어려운 점을 빠르고 보급이 덜 된 UDP를 통해 최적화를 진행할 수 있게 하고 있습니다.

3. PORT

한번에 둘 이상 연결해야 한다면 자신의 컴퓨터의 port란 것을 열어서 패킷을 주고 받습니다.
패킷을 보낼 때 port정보를 보내기 때문에 이러한 것을 알 수 있습니다.

port는 보통 0 ~ 65535 할당이 가능하지만 0 ~ 1023 은 잘 알려진 포트라하여, 사용하지 않는 것이 좋습니다.

4. DNS

Domain Name System
IP는 기억하기 어렵고 IP는 바뀔 가능성이 크기 때문에 DNS가 나왔습니다.
도메인 명을 등록을 하고 그것을 IP로 바꾸는 것을 말합니다.
IP가 바뀔 경우 도메인 구입 업체에서 제공하는 서비스를 통해 도메인 서버에 IP 변경요청을 보낼 수 있습니다.
Linux 포스팅을 했을 때 비슷한 내용이 있습니다.
https://kkminseok.github.io/posts/ThisisLinuxC9/

This post is licensed under CC BY 4.0 by the author.