인터넷 네트워크

Last updated - 2023년 04월 29일 Edit Source

    인프런 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 정리한 내용


    # 인터넷 통신

    인터넷 상에서 컴퓨터 둘은 어떻게 통신할까?

    • 수많은 노드들을 지나며 통신하는데, 너무 복잡하다.
    • 이에 대한 이해를 위해 IP를 알아야한다.



    # IP(인터넷 프로토콜)

    IP 주소를 통해 통신이 가능해진다. 따라서, 먼저 IP를 부여받아야 함

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



    메시지를 그냥 보내는 것이 아니라, IP 패킷에 정보를 담아서 보내야 한다.

    • 출발지 IP, 목적지 IP, 등등



    그러나, IP 프로토콜은 한계가 있다

    • 비연결성
      • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷이 전송됨
    • 비신뢰성
      • 중간에 패킷이 사라지면?
      • 패킷이 순서대로 안오면?
    • 프로그램 구분
      • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
    • 예시
      1. 대상이 서비스 불능, 패킷 전송

      2. 비신뢰성 - 패킷손실

      3. 비신뢰성 - 패킷 전달 순서 문제 발생


    이렇게 IP만으로 해결이 되지 않는 이유로, 아래에서 설명할 TCP라던가 PORT라던가 혹은 DNS 등의 개념이 나오게 되었다.



    # TCP, UDP

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

    • 애플리케이션 계층 - HTTP, FTP
    • 전송계층 - TCP, UDP
    • 인터넷 계층 - IP
    • 네트워크 인터페이스 계층 - 랜카드, 랜드라이버 등등



    프로토콜 계층

    1. 소켓 라이브러리를 통해 OS 계층에다가 데이터를 넘김
    2. TCP 정보 생성해서 씌우기
    3. IP 패킷 생성해서 씌우기
    4. Ethernet Frame (실제 물리적인 주소 등) 씌워서 보내기



    TCP/IP 패킷 정보

    • 순서 제어와 같이 IP 만으로 해결안됐던 부분이 TCP 정보를 통해 해결됨



    TCP (Transmission Control Protocol, 전송 제어 프로토콜) 특징

    • 연결지향, 신뢰할 수 있는 프로토콜, 현재는 대부분 TCP 사용
      • TCP 3 way handshake (가상연결)
      • 개념적인 연결이지, 실제 물리적인 연결이 아님 논리적 연결
      • SYN : 접속 요청, ACK : 요청 수락, 3번에 ACK와 함께 데이터 전송 가능
    • 데이터 전달 보증
    • 순서 보장



    UDP (User Datagram Protocol, 사용자 데이터그램 프로토콜) 특징

    • 하얀 도화지에 비유 (기능이 거의 ❌)
    • 연결지향 - TCP 3 way handshake ❌
    • 데이터 전달 보증 ❌
    • 순서 보장 ❌
    • UDP는 IP와 거의 같음
      • IP에 PORT, 체크섬 정도가 추가된 것
      • 애플리케이션에서 추가 작업 필요
    • 이렇게 보면 UDP 왜쓰지? 싶을거다
      • TCP는 3 way handshake에 걸리는 시간, 데이터의 양이 커지고, 전송속도를 더 빠르게 만들기 힘들다. 이미 인터넷이라는게 다 TCP 기반이라 튜닝하기 힘들다.
      • 이때, UDP는 하얀 도화지 상태라서 튜닝이 가능하다.
      • TCP가 거의 90 몇프로 점유한 상태였는데, 이 SYN - SYN/ACK - ACK 과정도 다 줄여서 최적화해보자고 하여 HTTP 3의 경우에 UDP 프로토콜을 사용하면서 굉장히 뜨는 추세



    # PORT

    한 번에 둘 이상 연결해야 하면?

    • 내 IP로 패킷들이 날라올텐데, 이게 게임 패킷인지 웹 브라우저 응답 패킷인지 어떻게 구분해?
    • 그래서 PORT가 필요함

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

    • 어떻게 서버가 클라이언트의 포트를 알고 저기로 쏴?
    • 위에서 그림 보면 TCP/IP 패킷에 출발지 PORT도 있잖아~
    • ex) 아파트가 IP주소 ! 몇 동 몇 호가 포트번호!



    PORT 번호

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



    # DNS

    DNS가 나오게 된 배경

    1. IP 주소는 기억하기 어렵다.
    2. IP 주소는 변경될 수 있다.

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

    • 중간에 전화번호부 같은 서버를 제공해줌
    • 도메인 명은 IP 주소로 변환 가능

    Comment