[네트워크]Transport Layer - UDP

정태규·2023년 6월 1일
0

네트워크

목록 보기
17/19

계층구조를 보면 TCP와 UDP는 transport Layer에 있다.

transport Layer

  • 다른 host에서 실행되는 app process 사이에서 logical한 communication을 한다.(end system)
    ✍️send side: app message를 segment로 쪼개서 network layer로 보낸다.
    ✍️receiver side: segment를 메세지로 재조합해서 app layer로 보낸다.

network layer

  • host들 사이에서 logical한 communication을 한다.

logical communication이란?
라우터가 네트워크 상에서 패킷을 전달할때, logical 주소를 참조해서 목적지로 패킷을 전달한다.

그렇다면, transport와 network는 어떤식으로 일어날까?
예를 들어보자. Ann과 bill은 각 집에 12명의 자식들이 있다.
ann집의 12명의 아이들이 bill의 12명의 아이들에게 편지를 보내려고 한다.
ann의 집에서는 ann이 12명의 아이들의 편지를 받아서 모아서 ann집의 우체통에 넣어준다. 우체통에 들어간 편지는 집배원에 의해서 ann집의 지역 우체국으로 이동하고 우체국에서는 bill집의 지역 우체국으로 편지들을 배달한다. bill집의 지역 우체국에 근무하는 집배원이 bill집에 우체통에 편지들을 가져다준다. bill은 우체통으로가서 편지를 가져와서 집에 있는 아이들에게 편지를 나눠준다.

실제에서 적용해보자면

1.Application layer(집에 있는 아이들): 송신자의 애플리케이션에서 데이터가 생성된다. 예를 들어, 이메일 클라이언트에서 이메일 메시지가 작성한다.

2.Transport layer(ann,bill): 데이터는 송신자의 포트 번호와 수신자의 포트 번호를 가지고 있는 세그먼트로 나누어집니다. 이 세그먼트에는 에러 검출 및 복구를 위한 체크섬 값도 포함됩니다.

3.Network layer(우체통): 세그먼트는 송신자의 IP 주소와 수신자의 IP 주소를 가진 패킷으로 묶입니다. 이 패킷에는 라우터가 패킷을 전달할 때 사용하는 logical 주소인 IP 주소가 있습니다.

4.Data link layer(우체국,집배원): 패킷은 송신자와 수신자 간의 물리적인 연결을 통해 전송됩니다. 이 때, 패킷은 송신자와 수신자 간의 물리적인 주소인 MAC 주소를 가진 프레임으로 캡슐화됩니다.

5.Physical layer: 프레임은 전기 신호나 광 신호로 변환되어 물리적인 매체를 통해 전송됩니다.

TCP vs UDP

  • 공통점
    ✍️데이터를 segmentation으로 만들고 다시 재조합한다.

✍️port number를 사용해서 다른 application을 구별한다.

  • TCP
    TCP(Transmission Control Protocol)는 인터넷 프로토콜 스위트의 한 프로토콜로, 데이터를 신뢰성 있게 전송하는 연결형 프로토콜입니다. TCP는 데이터 전송 시 신뢰성을 보장하며, 데이터가 손실되거나 손상될 경우 재전송을 수행합니다. 이러한 특성 때문에, TCP는 파일 전송, 이메일 전송, 웹 브라우징 등에서 많이 사용됩니다.

TCP의 주요 특성은 다음과 같습니다.

  1. 연결형 프로토콜: TCP는 연결 설정 과정을 거쳐 데이터 전송을 수행합니다. 이 연결 설정 과정에서 양측의 소켓이 서로 정보를 교환하고, 데이터 전송을 위한 세션을 설정합니다.

  2. 신뢰성 있는 프로토콜: TCP는 데이터 전송 시 신뢰성을 보장합니다. 데이터가 손실되거나 손상될 경우, 재전송을 수행하여 데이터의 무결성을 보장합니다.

  3. 흐름 제어와 혼잡 제어: TCP는 흐름 제어와 혼잡 제어를 수행하여, 네트워크 상황에 따라 데이터 전송 속도를 조절합니다.

  4. 멀티플렉싱과 디멀티플렉싱: TCP는 멀티플렉싱과 디멀티플렉싱을 지원하여, 하나의 커넥션으로 여러 개의 데이터 스트림을 동시에 전송할 수 있습니다.

  5. 복잡한 구조: TCP는 복잡한 구조를 가지고 있어 구현이 어렵고, 처리 속도가 느립니다.

  • UDP
    UDP(User Datagram Protocol)는 인터넷 프로토콜 스위트의 한 프로토콜로, 데이터를 신뢰성 없이 빠르게 전송하는 비연결형 프로토콜입니다. UDP는 데이터 전송을 보장하지 않고, 데이터가 손실되어도 재전송을 하지 않습니다. 이러한 특성 때문에, UDP는 실시간 게임이나 스트리밍 서비스 등에서 많이 사용됩니다.

UDP의 주요 특성은 다음과 같습니다.

  1. 비연결형 프로토콜: UDP는 연결 설정 과정이 없으며, 데이터 전송도 연결 설정 없이 이루어집니다.

  2. 신뢰성 없는 프로토콜: UDP는 데이터 전송 시 신뢰성을 보장하지 않습니다. 데이터가 손실될 가능성이 있으며, 이를 재전송하지 않습니다.

  3. 빠른 전송 속도: UDP는 데이터 전송 시 TCP와 같은 오버헤드가 적으므로, 빠른 전송 속도를 보장합니다.

  4. 단순한 구조: UDP는 간단한 구조를 가지고 있어 구현이 용이하며, 처리 속도가 빠릅니다.

  5. 멀티캐스트와 브로드캐스트 지원: UDP는 멀티캐스트와 브로드캐스트를 지원하여, 한 번에 여러 대상에게 데이터를 전송할 수 있습니다.

  6. 순서 상관없이 data가 전달된다.

    data가 datagram으로 나뉘어지고,각 datagram은 다른 루트를 통해서 도착지까지 이동한다. 이 과정에서 순서대로 들어오지 않고, 순서가 재배열 되지도 않는다.

✍️ UDP 사용하는 application layer

  • streaming
  • DNS
  • SNMP(simple network management protocol)
  • DHCP(Dynamic Host Configuration Protocol)
  • (RIP)Routing inforamtion protocol
    등등

Multiplexing과 Demultiplexing

멀티플렉싱(Multiplexing)은 하나의 통신 채널을 이용하여 여러 개의 데이터 스트림을 전송하는 기술입니다. 멀티플렉싱을 이용하면, 여러 개의 데이터 스트림을 하나의 물리적인 매체를 통해 전송할 수 있으므로, 효율적인 대역폭 사용이 가능해집니다.

multiplexing을 수행하는 장비를 멀티플렉서(Multiplexer)라고 하며, 멀티플렉서는 여러 개의 데이터 스트림을 하나의 통신 채널로 결합하여 전송합니다. 이때, 각각의 데이터 스트림은 고유한 식별자를 가지고 있어, 수신 측에서는 이 식별자를 이용하여 각각의 데이터 스트림을 구분합니다.

Demultiplexing 은 멀티플렉싱과 반대로, 하나의 통신 채널에서 여러 개의 데이터 스트림을 분리하는 기술입니다. Demultiplexing을 수행하는 장비를 Demultiplexer 라고 하며, Demultiplexing은 전송된 데이터를 각각의 데이터 스트림으로 분리하여, 각각의 데이터 스트림을 수신 측으로 전달합니다. 이때 port번호를 통해서 각각의 application을 구분합니다.

multiplexing과 Demultiplexing을 이용하면, 하나의 통신 채널을 이용하여 여러 개의 데이터 스트림을 전송할 수 있으므로, 대역폭 사용이 효율적이고, 네트워크 구성이 간단해집니다. 따라서, multiplexing과 Demultiplexing은 네트워크에서 매우 중요한 역할을 합니다.

port

각 application은 유일한 port 번호를 가진다. port 번호를 통해서 다양한 application protocol들을 구별할 수 있다.

포트 번호는 0부터 65535까지 총 65536개가 존재하며, 이 중에서 일부 포트 번호는 특별한 용도로 사용됩니다.

  • Well-known port: 포트 번호 0부터 1023까지의 범위를 말하며, 잘 알려진 서비스들이 사용합니다. 예를 들어, HTTP 서비스는 포트 번호 80을 사용하고, FTP 서비스는 포트 번호 21을 사용합니다.

  • Registered port: 포트 번호 1024부터 49151까지의 범위를 말하며, 사용자가 등록한 서비스나 애플리케이션에서 사용합니다. 이 범위의 포트 번호는 IANA에서 등록을 받아 사용합니다.

  • Private port: 포트 번호 49152부터 65535까지의 범위를 말하며, 개인적인 용도로 사용됩니다. 이 범위의 포트 번호는 IANA에서 할당하지 않으며, 개인이나 기업에서 필요에 따라 사용할 수 있습니다.

  • Dynamic port: 포트 번호 49152부터 65535까지의 범위 중에서, 클라이언트 측에서 임시로 사용하는 포트 번호를 말합니다. 클라이언트는 서버와 통신할 때, 동적으로 포트 번호를 할당하여 사용합니다. 이러한 포트 번호는 일반적으로 클라이언트 측에서 자동으로 선택되며, 서버 측에서는 이 포트 번호를 이용하여 클라이언트와의 통신을 수행합니다.

따라서, 포트 번호는 위와 같이 구분됩니다. Well-known port와 Registered port는 IANA에서 관리하며, Private port와 Dynamic port는 개인이나 기업에서 자유롭게 사용할 수 있는 범위입니다.

✍️source port number: sending host 에서 app process와 연관된 port number
✍️destination port number: remote host에서 destination process와 연관된 port number

source와 destination port number가 일치해야만 전송가능하다.

servers는 동시에 TCP connection을 지원할 수 있다.
이때, 한 서버에 여러 host가 접속한다면 host마다 port번호가 다를것이고, 같은 호스트가 다른 ip주소로 찾아 갈수가 있다.
그래서 host는 먼저 ip주소를 찾고 해당 ip주소의 port번호를 찾아간다.
이렇게 하면 여러 연결에 대해서 각각 원하는 데이터를 전달 할 수 있게 된다.
그렇다면, 이렇게 말할 수 있다. 각 connection은 4개 영역으로 구분될 수 있다.
1. source IP addr
2. dest IP addr
3. source port
4. dest port

IANA

IANA(Internet Assigned Numbers Authority)는 인터넷 프로토콜 스위트에서 사용되는 포트 번호, 프로토콜 번호, IP 주소 등과 같은 인터넷 자원을 할당하는 기관 중 하나입니다. IANA는 인터넷의 안정적인 운영을 위해 전 세계적으로 공유되는 자원에 대한 할당과 관리를 담당하고 있으며, 포트 번호 할당 또한 그 중 하나입니다.
IANA는 이러한 포트 번호를 관리하고, 새로운 포트 번호를 할당하거나 기존 포트 번호의 변경을 수행합니다.

netstat command

netstat 커맨드를 입력하면 현재 ip와 port number를 확인할 수 있다.

UDP-segment structure

UDP-checksum

UDP 프로토콜에서는 데이터를 전송하기 전에 checksum을 계산하여 데이터의 오류를 검출한다(값이 변경된건 아닌지).

  • Sender의 관점:
  1. 데이터를 패킷으로 나눕니다.
  2. 패킷 헤더에 checksum 필드를 추가합니다.
  3. 데이터와 패킷 헤더를 이용하여 checksum을 계산합니다.
  4. 계산된 checksum 값을 패킷 헤더의 checksum 필드에 저장합니다.
  5. 패킷을 수신하는 receiver에게 패킷을 전송합니다.
  • Receiver의 관점:
  1. 패킷을 수신하면 패킷 헤더의 checksum 필드를 확인합니다.
  2. 데이터와 패킷 헤더를 이용하여 checksum을 계산합니다.
  3. 계산된 checksum 값과 패킷 헤더의 checksum 필드 값을 비교합니다.
  4. 두 값이 일치하면 데이터를 추출하고, 일치하지 않으면 패킷을 폐기합니다.

이렇게 sender와 receiver 모두에서 checksum을 이용하여 데이터 오류를 검출할 수 있습니다. 이 과정에서 checksum 값이 일치하지 않으면 패킷이 폐기되므로, 데이터의 신뢰성을 보장할 수 있습니다

checksum 계산

pseudo header와 UDP header UDP data의 모든 값들을 16비트로 나누어서 모두 더한다.

모두 더해서 carry 된 값들은 다시 마지막 값에 더해주고 나서 보수 취해주면 checksum이 된다. 이 값을 UDP header에 checksum에 넣어준다.

0개의 댓글