개발기록장

[CS] 기본적인 인터넷 네트워크 개념 본문

TIL/Web

[CS] 기본적인 인터넷 네트워크 개념

yangahh 2023. 1. 29. 20:43

IP (인터넷 프로토콜)

IP의 역할

  • 지정한 IP주소에 데이터 전달
  • 패킷(packet)이라는 통신 단위로 데이터 전달
    ** 패킷이란? 패키지(package)와 덩어리(bucket)을 합성어로 말 그대로 데이터를 담은 택배 박스 개념이다.
  • 클라이언트에서 출발지 IP, 목적지 IP, 데이터를 담은 패킷을 전송하면 서버에서 이를 받고, 서버에서도 받았다는 내용(OK)의 패킷을 클라이언트에게 전송한다. 

인터넷 망 안에서 노드들끼리 이 목적지 IP를 받을 수 있는 서버가 어디있는지 찾아가며 목적지까지 패킷을 전송

IP 프로토콜의 한계

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷은 전송된다.  대상 서버가 패킷을 받을 수 있는 상태인지 아닌지 모르기 때문.
  • 비신뢰성
    • 중간에 패킷이 사라질 수 있다.
      인터넷 망이라는게 결국은 여러 서버들을 거처서 전달을 한다는 건데, 중간에 한 서버에 문제가 있다면 패킷이 유실된다. 근데 이렇게 유실이 된다고해도 서버는 유신된줄도 모른다.
    • 패킷이 순서대로 안 올 수 있다.
      전송할 데이터의 양이 클 경우(보통 1500바이터가 넘으면), 데이터를 나눠서 여러개의 패킷으로 보내게 되는데,  이럴 경우 아래의 그림 설명과 같은 이유로 도착하는 패킷들이 전송할 때의 순서와 달라질 수 있다.

1번 패킷과 2번 패킷이 반드시 같은 경로로 보내진다고 보장할 수 없기 때문에 도착할때도 같은 순서로 온다고 보장할 수 없다

  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하고있는 어플리케이션이 여러개라면 패킷은 오직 IP만 알고있기 때문에 이를 구분할 수 없다.

 

 

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

TCP는 위에서 설명한 IP 프로토콜의 한계들을 해결해준다. 

TCP를 설명하기 전에 쉬운 이해를 위해 채팅 프로그램으로 hello world 라는 메세지를 보낸다고 해보자.

인터넷 프로토콜은 다음과 같은 계층으로 이루어져있고, 각 계층별로 사용되는 프로토콜이 있다.

  1. 맨 먼저 채팅 프로그램은 소켓 라이브러리를 통해 OS 계층으로 'hello world'라는 메세지를 넘긴다. 
  2. OS계층에서는 TCP가 이 메세지에다가 TCP 정보를 붙인다(위 사진에서 초록색 부분이 TCP 정보이다). 이를 TCP 세그먼트라고 한다.
  3. TCP밑에 IP계층이 있는데, 여기에서는 TCP 세그먼터에다가 IP 관련 정보를 붙인다. 이렇게 만들어진게 IP 패킷이고 TCP 정보와 IP정보가 다 붙은 덩어리를 TCP/IP 패킷이라고 한다.

  4. 이 덩어리는 네트워크 인터페이스에서 LAN 카드 등을 통해 나가는데 이때 이더넷 프레임이라는 것도 포함되어서 나간다.
      이더넷 프레임은 랜카드에 등록 된  mac 주소같은 물리적인 정보를 담고 있다(여기서는 그냥 이정도로 간단하게만 알고 있자)

 

 

TCP 특징

  • 연결 지향 - TCP 3 way handshake(가상 연결)
    출발지와 목적지가 서로  연결이 되었는지 확인을 하고 메세지를 보내는 방식.
    1) 먼저 클라이언트쪽에서 서버에 연결 요청의 의미인 SYN이라는 메세지를 보낸다.
    2) 서버에서 알았다는 뜻으로 ACK라는 메세지와 나도 연결해줘 라는 의미의 SYN 메세지를 함께 클라이언트로 보낸다.
    3) 클라이언트도 SYN에 대한 응답으로 ACK를 보낸다.
    4) 이 3단계의 과정으로 서로 연결되었음을 인식한 후에 데이터를 전송한다.

**요즘에는 최적화 되어서 3번 단계에서 데이터 전 송을 한꺼번에 처리하기도 한다.

 

  • 데이터 전달 보증
    클라이언트에서 데이터를 전송하고 서버가 이를 받으면 데이터를 잘 받았다고 클라이언트에게 응답을 해준다
  • 순서 보장
    서버에서 순서에 맞지 않은 패킷들을 받으면, 클라이언트에게 잘못된 패킷부터 다시 전달하라고 보낸다 

실제로는 훨씬 많은 특징이 있다. 위 3가지 특징으로 TCP는 신뢰할 수 있는 프로토콜이라 여겨지고 현재는 대부분 애플리케이션에서 TCP를 사용하고 있다.

 

 

 

UDP (User Datagram Protocol)

UDP 특징 

  • UDP는 TCP와 같이 OS 계층에서 IP 계층위에 있는 프로토콜
  • 보통 하얀 도화지에 비유(기능이 거의 없기 때문)
  •  3-way-handshake X, 데이터 전달 보증 X, 순서 보장 X
  • 단순하고 빠름
  • 그래서 IP와 거의 같지만, 포트, 체크섬 정도만 추가됨.
    포트가 있으면 하나의 IP에서 여러 애플리케이션이 실행되고 있을 때 여기로 들어오는 패킷들이 어떤 애플리케이션을 위한 패킷인지 구분할 수 있다. 체크섬은 데이터가 제대로 된건지 검증해주는 용도 
  • TCP는 신뢰할 수 있는 프로토콜이지만 3-way-handshake로 인해 속도가 느리다. 그래서 최적화를 위해 UDP를 사용. UDP는 도화지 상태이기 때문에 이 위에다가 내가 원하는걸 애플리케이션 레벨에서 만들어 내면 된다.
  • Http3에서 UDP프로토콜을 사용해서 최근에 각광받고 있다. 

 

 

PORT

같은 IP 내에서 프로세스 구분을 위해 사용된다.

TCP/IP 패킷에는 출발지IP + 출발지Port, 도착지IP + 도착지Port가 담겨있다. 

0 ~ 65535 사이에서 할당 가능한데 0~1023까지는 잘 알려진 포트로 사용하지 않는게 좋다.

  • FTP: 20, 21
  • TELNET: 23
  • HTTP: 80
  • HTTPS: 443