[Network] Transport Layer 1

chxghee·2024년 10월 10일

Transport 계층

트랜스포트 계층 프로토콜은 각기 다른 호스트에서 동작하는 애플리케이션 프로세스 간의 논리적 통신(logical communication)을 제공한다

즉 어플리케이션 계층에서 내려온 메세지를 받아 네트워크를 통해 다른 장치에서 실행 중인 애플리케이션과 데이터를 주고받을 수 있도록 한다.

  1. 송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터 수신한 메시지를 트랜스포트 계층 패킷으로 변환한다.
  • 애플리케이션 메시지를 세그먼트(segment)으로 분할한다.
  • 각각의 조각에 트랜스포트 계층 헤더를 추가한다.
  1. 트랜스포트 계층은 송신 종단 시스템에 있는 네트워크 계층으로 세그먼트를 전달한다.
  1. 수신 측에서 네트워크 계층은 데이터그램으로부터 트랜스포트 계층 세그먼트를 추출하고 트랜스포트 계층으로 세그먼트를 보낸다.

  2. 트랜스포트 계층은 수신 애플리케이션에서 세그먼트 내부의 데이터를 이용할 수 있도록 수신된 세그먼트를 처리한다.

TCP UDP 프로토콜을 사용한다.

트랜스포트 계층 프로토콜은 종단 시스템에 존재한다.


Transport layer VS Network layer

Transport layer

트랜스포트 계층 프로토콜은 각기 다른 호스트에서 동작하는 프로세스들 사이의 논리적 통신을 제공한다.

Network layer

네트워크 계층 프로토콜은 호스트들 사이의 논리적 통신을 제공한다.

트랜스포트 계층은 종단 시스템에 위치하며,
네트워크 계층은 애플리케이션 프로세스에서 네트워크 계층 사이에서 메시지를 운반하는 역할을 한다.

예시

LA와 NY에 의 가족과 의 가족이 산다.
1. 각 가족은 12명으로 구성되고, 1명씩 의 가족 구성원들은의 가족 구성원 모두에게 편지를 쓴다. (12통씩 -> total 144 통이 뉴욕에 간다)
2. 은 가족들의 편지를 모아 LA우편부에게 전달한다.
3. LA 우편부는 NY 우편부에게 편지를 전달한다.
4. 은 NY 우편부에게 편지를 받아 12명에게 편지를 나누어 준다.

여기서

  1. 집 위치(뉴욕, LA) - 호스트

  2. 가족구성원 - 프로세스

  3. 편지 - 앱 메세지

  4. 빌과 앤 - Transport 프로토콜 (프로세스-프로세스 연결)
    (빌의 경우 Demultiplexing / 앤의 경우 Multiplexing)

  5. 뉴욕/LA 우편부 - Network 프로토콜 (호스트와 호스트 연결)


송신자

  • 어플리케이션 계층의 메세지를 받음
  • 세그먼트로 나누고, 트랜스포트 헤더 정보를 apppend
  • 세그먼트를 목적지 IP로 전송

multiplexing
1. 출발지 호스트에서 소켓으로 부터 데이터를 모으고,
2. 이에 대한 세그먼트를 생성하기 위해 각 데이터에 헤더 정보로 캡슐화(encapsulation) 한다
3. 그 세그먼트들을 네트워크 계층으로 전달한다.

수신자

  • 수신IP로 부터 세그먼트 받음
  • 헤더 정보를 확인
  • 어플리케이션 메세지를 추출
  • Demultiplexing 으로 메세지를 소켓을 통해 어플리케이션 계층으로 send

Demultiplexing
각 세그먼트의 트랜스포트 헤더 정보를 확인하고, 이를 바탕으로 메시지를 추출한 후, 해당 메시지를 올바른 소켓(애플리케이션)으로 보내는 전체 과정

소켓은 유일한 식별자인 포트번호를 갖는다


UDP

우선 UDP부터 알아 보자

UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다.

  1. 다중화/역다중화 기능
  2. 간단한 오류 검사 기능

지원하지 않는 것

  1. flow control
  2. 혼잡 제어
  3. 커넥션

커넥션을 하지 않음으로서 오버헤드가 적고
헤더 사이즈가 작다

UDP예시

  • 실시간 오디오/비디오 스트리밍
  • DNS
  • SNMP
  • HTTP 3 (신뢰성/혼잡제어 부분은 어플리케이션 레이어에서 구현한다)

동작

  1. 애플리케이션 프로세스로부터 메시지를 가져와서
    다중화/역다중화 서비스에 필요한 출발지 포트 번호 필드와 목적지 포트 번호 필드를 첨부한다.(UDP 세그먼트를 추가하는 과정.)

  2. 네트워크 계층으로 넘겨준 후, 출발지 호스트의 IP 주소 필드, 목적지 호스트의 IP 주소 필드를 추가한다.

  1. 네트워크 계층은 트랜스포트 계층 세그먼트를 IP 데이터그램으로 캡슐화하고,
    세그먼트를 수신 호스트에게 전달한다.

  2. 세그먼트가 수신 호스트에 도착한다면,
    UDP는 세그먼트의 데이터를 해당하는 애플리케이션 프로세스로 전달하기 위해 목적지 포트 번호를 사용한다.

송신자

  1. 메세지를 받아 UDP 세그먼트를 추가한다
    (출발/목적 포트번호, 길이, 체크섬)
  2. 세그먼트를 IP로 패스

수신자

  1. 메세지 받음
  2. 세그먼트의 체크섬 벨류로 에러체크
  3. 메세지를 추출한다
  4. 역다중화로 메세지를 올바른 소켓으로 전달.

UDP 세그먼트 헤더

  1. 헤더

    • 소스 포트번호 (16bit)
    • 목적지 포트번호 (16bit)
    • length (한 세그먼트 길이 -바이트단위)
    • check sum (수신자 T 레이어에서 오류체크하기 위한 )
  2. 페이로드

    • 어플리 케이션 메세지(데이터)

UDP Check sum

체크섬의 목표
받은 세그먼트의 에러를 체크!
(송신자가 체크섬 필드 정의 후 보낸 것을 비교하여 에러 체크)

송신자

  1. 세그먼트를 16 비트 단위로 쪼갬
  2. 체크섬 필드 제외 나머지 필드를 모두 더함
  3. 1의 보수를 취함(0-> 1 / 1->0)
  4. 이렇게 만들어진것이 체크섬

수신자

  1. 세그먼트를 16 비트 단위로 쪼갬
  2. 체크섬을 포함해서 모든 필드를 더함
  3. 이 값이 모두 1이 나오면 정상 / 0 이 하나라도 나오면 에러

체크섬의 문제점

체크섬은 완벽한 에러체크를 제공할수 없다!

  • 위와 같이 동시에 비트가 바뀌게 되면 오류를 탐지할 수 없다.

UDP 정리

  1. 세그먼트는 lost, 순서가 바뀔 수 있다.
  2. best effort 서비스
  3. 사전 연결없이 빠르게 가능
  4. 에러체크 제공(체크섬) <- 핵심기능
  5. 멀티플랙싱 / 디멀티플랙싱 <- 핵심기능
profile
다 같이 화이팅! 🙋‍♂️

0개의 댓글