섹션 1. 인터넷 네트워크

MineeHyun·2024년 7월 27일
0

인터넷 통신

  • 인터넷 망은 복잡하다.
  • 컴퓨터끼리 통신하기 위해서 이것저것... 많은 고난과 역경을 거쳐야 한다.

IP (인터넷 프로토콜)

  • IP 주소: 정보를 송신하고 수신할 수 있도록 정해놓은 최소한의 규칙
  • 패킷이라는 것을 주고 받는다: IP 패킷이라는 규칙이 있음
    • IP 패킷: 현재 나의 IP (출발지 IP), 목적지 IP, ..., 전송할 데이터
    • 이렇게 패킷을 규격에 맞춰서 적어 보내면 중간 노드 (서버)들이 패킷의 내용을 이해하고 역할을 수행한다.
    • 의도한 노드가 나올 때까지 노드끼리 서로 패킷을 던짐 -> 목적지까지 정확하게 도착할 수 있다

IP 프로토콜의 한계

  • 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성: 중간에 패킷이 사라지거나, (여러 개 패킷을 보냈을 때) 순서대로 전송되지 않으면? -> 이 문제들을 해결하기 어렵다.
    • 대략 1,500 바이트 정도마다 끊어서 보낸다.
    • 순서의 문제가 생기는 이유: 중간 노드를 경유하는 방법이 패킷마다 다를 수 있다.
  • 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?

TCP, UDP

  • IP 프로토콜에서 발생했던 많은 문제들을 해결해 주는 TCP와 UDP

  • 네트워크 인터페이스 계층: 실제 랜카드, 랜 드라이버 등

프로토콜 계층
애플리케이션 계층: 웹 브라우저, (네트워크 연결이 필요한) 게임, 채팅 프로그램 등등
전송/IP: OS
네트워크 인터페이스: 랜 드라이버, 랜카드 (등 랜 장비)

  1. 전송할 데이터 작성
  2. SOCKET 라이브러리를 통해 전달
  3. TCP 패킷 생성: 데이터 패킷에 TCP 정보를 생성해서 붙임
  4. IP 패킷 생성: TCP 패킷에 IP 정보를 생성해서 붙임
  5. 서버에 전송하기 전: 네트워크 인터페이스를 거쳐 이더넷 프레임을 생성해서 붙임
  • MAC 주소 같은 물리적인 정보들이 포함됨
  • TCP 세그먼트가 들고 있는 정보들: 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 -> 순서 문제, 불확실 문제 등을 해결하게 됨

TCP (Transmission Control Protocol)

  • 전송 제어 프로토콜
    특징
  • 연결 지향: 상대방과 연결이 되어있는지를 확인하고 정보를 보냄
  • 데이터 전달 보증: 중간에 누락이 되면 알 수 있음
  • 순서 보장

-> 신뢰할 수 있는 프로토콜, 현재는 대부분 TCP 사용

TCP 3 way handshake

  1. 클라이언트 -> 서버로 SYN 신호를 보냄
  2. 서버 -> 클라이언트: SYN + ACK를 보냄
  3. 클라이언트 -> 서버, ACK 보냄 (연결 성공)
  4. 데이터 전송
  • 1~3까지 과정은 connect 과정

  • 클라이언트도 서버를 신뢰할 수 있고, 서버도 클라이언트를 신뢰할 수 있다

    • 서로가 응답하는 것을 믿을 수 있다
  • 요즘은... 3번 과정에서 데이터 전송을 함께 처리하기도 한다

  • 클라이언트와 서버 사이에 있는 수많은 서버들에 대해서는 보장하지 않는다.

    • 그 부분은 그냥 됐겠거니 하고 넘기는 것임. 완벽하게 그 사이를 보장하는 게 아니다.
    • 물리적으로 완벽하게 연결된 것이 아니고, 논리적으로 서버와 클라이언트가 통신할 수 있는 상태임을 확인하는 것임
  • 데이터 전달 보증

    • 데이터 전송 -> 서버가 클라이언트에게 데이터를 잘 받았다는 신호를 전송함
  • 순서 보장

    • 순서가 꼬여서 오면, 서버가 클라이언트에게 꼬인 곳부터 다시 보내라는 신호를 보냄
  • 이 모든 것은 TCP 세그먼트 안에 들어있는 정보들 덕분에 할 수 있는 것임!

UDP 프로토콜

  • UDP는 TCP랑 같은 계층에 있음 (IP 위)
  • 하얀 도화지에 비유 (기능이 거의 없음)
  • IP와 거의 같다. +PORT, +체크섬 정도만 추가됨
    • 체크섬: 검증에 씀
  • 애플리케이션에서 추가로 작업해 줘야 한다
  • UDP 장점: TCP는 원하는 대로 최적화할 수 없음, UDP는 내가 원하는 대로 제어해서 사용할 수 있다

PORT

  • 한 번에 두 개 이상의 서버에 요청을 보내야 하면 어떻게 해야 할까?
    • 애플리케이션을 온라인 게임도 하고 채팅도 하고 웹 브라우저도 요청하고...
    • 여러 서버에 패킷을 보내고 다시 받아오는데, 각각이 어느 애플리케이션에 사용되는 패킷인지 정확히 구분하기 어렵다.
  • 목적지 서버 안에서 돌아가는 애플리케이션을 구분하는 방법: PORT
    • 같은 IP 안에서 애플리케이션을 구분하는 방법
    • 패킷 보낼 때 포트 번호까지 다 보냄 (패킷이 돌아왔을 때 어떤 애플리케이션에 쓰이는 정보인지 알 수 있음)

0~65535: 할당 가능한 포트 번호

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

DNS

  • IP의 문제: (1) 기억하기 어렵다. (2) 변경될 수 있다.
  • DNS: Domain Name System
    • 도메인 이름을 등록해서 IP로 변환할 수 있다.
    • IP에 접근할 때, 도메인으로 DNS 서버에 요청하면 DNS 서버가 등록돼 있는 IP 주소를 준다.
      -> 기억하기 어려운 문제, 변경될 수 있는 문제를 해결할 수 있다.

0개의 댓글