인터넷 네트워크 - TCP/IP, UDP

d·2023년 4월 15일
0
post-thumbnail

IP(인터넷 프로토콜)

지정한 IP주소에 패킷(Packet) 단위로 데이터를 전달한다.

클라이언트 패킷 전달

  • IP 패킷에 출발 IP주소(클라이언트 주소)와 목적 IP주소(서버 주소)를 저장한다.
  • 전달할 요청 데이터를 IP 패킷으로 감싼다.
  • 전달 데이터가 포함되어 있는 IP 패킷을 인터넷에 전송한다.
  • IP 프로토콜의 규약에 따라 출발지로부터 목적지에 도착할 때까지 노드들이 패킷을 순차적으로 전달하여 목적 IP주소에 패킷이 도착하도록 한다.

서버 패킷 전달

  • IP 패킷에 출발 IP주소(서버 주소)와 목적 IP주소(클라이언트 주소)를 저장한다.
  • 전달할 응답 데이터를 IP 패킷으로 감싼다.
  • 전달 데이터가 포함되어 있는 IP패킷을 인터넷 망에 전송한다.
  • IP 프로토콜의 규약에 따라 출발지부터 목적지에 도착할 때까지 노드들이 패킷을 순차적으로 전달하여 목적 IP 주소에 패킷이 도착하게 된다.

IP 프로토콜의 한계

  • 비연결성 : 패킷을 받을 대상이 없을 경우, 또는 서비스 불능 항태일 경우에도 패킷을 전송한다.
  • 비신뢰성 : 패킷이 중간에 사라지거나(패킷 소실 이라고한다) 순서대로 도착하지 않을 수도 있는데 비연결성이 있기 때문에 결국 신뢰할 수 없다.
  • 프로그램의 구분 :같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우 구분하는 것에 한계가 있다.

이런 IP프로토콜의 한계를 극복하기 위해 TCP를 따르게 된다


TCP

TCP/IP 4계층 모델 참고

TCP/IP 계층은 4개의 계층으로 이루어져 있는데 TCP는 IP보다 한 층 더 위에 쌓여있는 모습이다.
예를 들어 우리가 Hello World를 전송해 통신하려 할 때 구체적으로 이런 과정을 거치게 된다.

1. 프로그램이 메시지 생성(Hello, world!)
2. Socket 라이브러리를 통해 OS 계층에 메시지 전달
3. OS 계층에서 TCP 정보를 먼저 생성해서 메시지 데이터를 포함시킨다.
4. IP 패킷을 생성해서 TCP 데이터를 포함시킨다
5. 네트워크 인터페이스를 통해 LAN카드를 이용해 인터넷 망으로 전송한다.

TCP 특징

출발지에서 목적지로 전송하는 것만을 담당했던 IP 프로토콜과 다르게 구체적으로 전송을 어떻게 할지 제어함으로써 문제를 해결하며 다음과 같은 특징을 가진다.

  • 연결지향 : TCP 3 way handshake
    • 클라이언트와 서버의 연결 여부를 검증 후 메시지를 전송한다 -> 비연결성이 해결된다.
  • 데이터 전달 보증
    • 메시지 전송 중 패킷 누락 여부를 알 수 있다.

TCP 3 way handshake

  1. 클라이언트가 서버에게 ISN을 담아 SYN(synchronize) 메시지를 보낸다.
  2. 서버가 SYN을 전달받으면 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보낸다
  3. 서버에게 SYN+ACK를 전달받은 클라이언트는 서버의 ISN + 1인 승인번호를 보내며 응답하여 연결 여부를 검증한다. 이런 과정을 통해 클라이언트와 서버는 연결 여부를 확인하며 동시에 서로를 신뢰할 수 있게 된다.
  4. 연결이 되고 나면 서버가 응답해야할 데이터를 클라이언트에게 전달한다. 연결 여부가 확인되지 않을 경우엔 데이터를 전송하지 않는다.


데이터 전달 보증

  • 클라이언트가 패킷을 전송한 순서와 서버에 도착한 순서가 서로 다를 경우, 서버는 잘못된 순서부터 재정렬 후 재전송할 것을 클라이언트에게 요청한다.

순서 보장

  • TCP에서는 클라이언트가 서버에게 데이터를 전송하면 데이터를 잘 받았는지 서버가 응답해준다.
  • 응답이 없을 경우 문제가 있는 것을 확인 할 수 있다.

UDP (User Datagram Protocol)

UDP는 IP계층 위에 TCP와 함께 위치해있다. UDP의 특성은 다음과 같다.

  • 기능이 거의 없다.
  • 연결지향 프로토콜이다
  • IP와 거의 같으나 PORT와 체크섬 정도만 추가한 형태다

이렇게 보면 누가 UDP를 사용할까 싶은데, 최근 들어(HTTP/2, HTTP/3) UDP를 사용하는 추세라고 한다. 다양한 기능을 제공하는 TCP는 속도가 비교적 느린 반면, UDP는 매우 빠른 속도를 자랑하기 때문이다.


REFERENCE: 모든 개발자를 위한 HTTP 웹 기본 지식

0개의 댓글