[네트워크] #10 전송 계층 서비스, 다중화&역다중화

2023. 10. 19. 12:46·전공/네트워크
728x90
반응형

목차

  1. 전송 계층 서비스 및 프로토콜
  2. 다중화&역다중화

1. 전송 계층 서비스 및 프로토콜

전송 계층은 서로 다른 호스트에서 실행되는 애플리케이션 프로세스 간에 논리적 통신을 제공

엔드 시스템에서 실행되는 전송 프로토콜

  • send side: 앱 메시지를 세그먼트로 분할하여 네트워크 계층으로 전달
  • rcv side: 세그먼트를 메시지로 재조립하고 애플리케이션 계층으로 전달

 

세그먼트: 전송 계층 패킷

 

Transport vs. Network layer

네트워크 계층: 호스트들 간의 논리적 통신

전송 계층: 프로세스 간 논리적 통신

 

예시

앤의 집에 있는 12명의 아이들에게 편지를 보내는 상황

  • 호스트 = 하우스
  • 프로세스 = 어린이
  • 앱 메시지 = 봉투 안의 편지
  • 전송 프로토콜 = 형제자매인 앤과 빌
  • 네트워크 계층 프로토콜 = 우편 서비스

 

인터넷 전송 계층 프로토콜

신뢰할 수 있는 주문형 전달 → 전송 제어 프로토콜(Transmission Control Protocol, TCP)

  • 혼잡 제어
  • 흐름 제어
  • 접속 설정

신뢰할 수 없는, 순서 없는 전달 → 유저 데이터그램 프로토콜(User Datagram Protocol, UDP)


2. Multiplexing & Demultiplexing

프로세스(네트워크 응용프로그램의 일부)는 데이터가 네트워크에서 프로세스로 전달되는 하나 이상의 소켓, 도어를 가질 수 있음

각 소켓에는 고유 식별자 존재

수신 호스트의 전송 계층은 실제로 데이터를 프로세스에 직접 전달하는 것이 아니라 중간 소켓에 전달

송신자의 다중화

- 다중 소켓에서 데이터를 처리

- 전송 헤더 추가(역다중화에 사용)

 

수신자의 역다중화

- 헤더 정보를 이용하여 소켓을 수정하기 위해 수신된 세그먼트를 전달

 

전송 계층 다중화는 다음을 요구

  • 소켓의 고유 식별자
  • 각 세그먼트에 소켓 식별자를 나타내는 특수 필드가 있음
  • IP 주소가 소켓 식별자를 나타내기 위해 사용되기도 함

 

소켓 식별자의 특수 필드

  • 소스 포트 번호 필드
  • 대상 포트 번호 필드
  • 각 포트 번호는 0~65535의 16비트 숫자
  • 0에서 1023 사이의 포트 번호를 잘 알려진 포트 번호라고 함

 

호스트에서 실행 중인 Python 프로그램은 다음과 같이 UDP 소켓 생성 가능

clientSocket = socket(AF_INET, SOCK_DGRAM)

이런 방식으로 UDP 소켓을 생성하면 전송 계층에서 자동으로 소켓에 포트 번호 할당

1024~65535 범위의 포트 번호 할당

 

Python 프로그램은 socket bind() 메서드를 통해 특정 포트 번호를 이 UDP 소켓에 할당 가능

clientSocket.bind(('', 19157))

 

 

UDP 소켓은 대상 IP 주소와 대상 포트 번호로 구성된 2개의 튜플로 완전히 식별

두 UDP 세그먼트가 동일한 대상 IP 주소와 포트 번호를 가진 경우, 두 세그먼트는 동일한 대상 소켓을 통해 대상 프로세스로 향하게 됨

소스 포트 번호는 “반환 주소”의 일부 역할을 함

UDPServer.py에서 서버는 recv from() 메서드를 사용하여 클라이언트로부터 수신한 세그먼트에서 클라이언트 측 (소스) 포트 번호를 추출

 

연결 지향적 다중화와 역다중화

TCP 소켓은 4개의 튜플**(소스 IP 주소, 소스 포트 번호, 대상 IP 주소, 대상 포트 번호)**로 식별됨

수신기는 세그먼트를 적절한 소켓으로 유도(역다중화) 하기 위해 4개의 값을 모두 사용

728x90
반응형

'전공 > 네트워크' 카테고리의 다른 글

[네트워크] #12 RDT (신뢰성 있는 데이터 전송), RDT 오토마톤 표현, 파이프라인 전송  (1) 2023.10.19
[네트워크] #11 UDP (특징, 세그먼트 구조), 전송 계층에 체크섬이 있는 이유  (0) 2023.10.19
[네트워크] #9 소켓 프로그래밍 (TCP, UDP)  (0) 2023.10.17
[네트워크] #8 전자 메일 (SMTP, 메일 전송 프로토콜)  (0) 2023.10.17
[네트워크] #7 웹과 HTTP, 웹 캐시 (프록시 서버)  (2) 2023.10.17
'전공/네트워크' 카테고리의 다른 글
  • [네트워크] #12 RDT (신뢰성 있는 데이터 전송), RDT 오토마톤 표현, 파이프라인 전송
  • [네트워크] #11 UDP (특징, 세그먼트 구조), 전송 계층에 체크섬이 있는 이유
  • [네트워크] #9 소켓 프로그래밍 (TCP, UDP)
  • [네트워크] #8 전자 메일 (SMTP, 메일 전송 프로토콜)
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    메모리 계층 구조
    명령어
    티스토리챌린지
    상속
    컴퓨터구조
    컴퓨터 구조 및 설계
    자료구조
    사설 문제
    오블완
    데이터패스
    추가 문제
    백준
    코틀린
    단일 사이클
    반복자
    자바
    리눅스
    C++
    컴공 포트폴리오
    42서울
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[네트워크] #10 전송 계층 서비스, 다중화&역다중화
상단으로

티스토리툴바