[CS/ Network] 컴퓨터 네트워킹 하향식 접근 8판 3장 트렌스포트 계층 3.2 다중화와역다중화

yujeongkwon·2023년 8월 23일
0

CS / Network

목록 보기
12/27

3.2 다중화와역다중화

  • 네트워크 계충의 호스트 간 호스트 전달 서비스 -> 호스트 내 프로세스 간 전달 서비스의 확장을 알아보쟈~

  • 다중화와 역다중화는 모든 컴퓨터 네트워크에서 필요

  • 목적지 호스트에서의 트랜스포트 계층 : 바로 아래의 네트워크 계충으로부터 세그먼트를 수신

    • ㄴ 호스트에서 동작하는 해당 애플리케이션 프로세스에게 이 세그먼트의 데이터를 전달하는 의무를 가짐
  • 2.7 요약

    • 소켓(socket) : 네트워크-> 프로세스 데이터 전달 + 프로세스-> 네트워크로 데이터를 전달하는 출입구
    • 수신 측 호스트의 트랜스포트 계충은 데이터를 중간 매개자인 소켓에게 전달 = 프로세스로 직접 전달X
      • ㄴ-> 수신 측 호스트에 하나 이상의 소켓이 있을 수 있으므로, 각각의 소켓은 유일한 식별자를 가짐.
      • 식별자의 포맷은 소켓이 UDP 소켓인지 또는 TCP 소켓인지에 따라 다름.
  • 트렌스포트 계층 세그먼트를 적절한 소켓으로 보내는 과정

    • 역다중화(demultiplexing) : 세그먼트 필드 집합 보유 -> 필드 검사 for 수신 소켓을 식별 -> 트랜스포트계층 세그먼트를 해당 소켓으로 전달하는 작업
    • 다중화(multiplexing) : 출발지 호스트에서 소켓으로부터 데이터 수집 -> 세그먼트를 생성 : 각 데이터에 헤더 정보로 캡슐화 -> 세그먼트들을 네트워크 계층으로 전달하는 작업
  • 다중화/역다중화는 여기 트렌스포트 세그먼트뿐만 아니라 여러 프로토콜에 의해 사용될 때마다 관련되는 과정들임.

  • 다중화/역다중화는 호스트에서는 어떻게 수행되는가?

    • 트랜스포트 계충 다중화의 요구사항
      1. 소켓은 유일한 식별자를 가짐
      2. 각 세그먼트는 세그먼트가 전달될 적절한 소켓을 가리키는 특별한 필드를 가짐.
      • 출발지 포트 번호 필드
      • 목적지 포트 번호 필드
        -(UDP와 TCP 세그먼트는 그 밖의 필드들도 가지며 이 장의 다음 절에서 다룬다).
      • 각각의 포트번호는 0〜65535까지의 16비트 정수
      • 잘 알려진 포트 번호(wellknown port number): 0〜1023까지의 포트 번호
        • 사용을 엄격하게 제한
        • HTTP(포트 번호 80)와 FTP(포트 번호 21)처럼 잘 알려진 애플리케이션 프로토콜에서 사용되도록 예약
  • UDP의 기본적인 동작 방식

    • 호스트의 각 소켓은 포트 번호를 할당받음 -> 세그먼트가 호스트에 도착하면,트랜스포트 계충은 세그먼트 안의 목적지 포트 번호를 검사 -> 상응하는 소켓으로 세그먼트 전송 -> 세그먼트의 데이터는 소켓을 통해 해당되는 프로세스로 전달
  • TCP의 다중화/역다중화는 좀 더 많은 의미를 갖고 있음을 밑에서 알아보자~


비연결형 다중화와 역다중화

  • UDP 소켓 생성 2가지 방법
      1. 트랜스포트 계층은 호스트에서 UDP 포트로 사용하지 않는 1024〜65535 사이의 포트 번호를 소켓에게 자동 할당
      clientsocket = socket(AF_INET, SOCK_DGRAM)
      1. 소켓 생성 후, 소켓 bind() 방식을 사용하며 특정 포트 번호(여기서는 19157)를 UDP 소켓에 할
        clientsocket.bind((f f f 19157)
  • ‘잘 알려진 프로토콜’의 서버 측을 구현 = 상응하는 ‘잘 알려진 포트 번호’를 할당
    • 일반적으로 애플리케이션의 클라이언트 측은 트랜스포트 계층이 포트 번호를 자동으로 할당
  • UDP의 다중화와 역다중화 과정
    • UDP 소켓 19157을 가진 호스트 A의 프로세스가 호스트 B의 UDP 소켓46428을 가진 프로세스에게 애플리케이션 데이터 전송을 원한다고 가정
    1. 호스트 A의 트랜스포트 계층은 트랜스포트 계층 세그먼트를 생성
      • 애플리케이션 데이터,출발지 포트 번호(19157),목적지 포트 번호(46428),그리고 2개의 다른 값(나중에 알랴줌)을 포함
    2. 트랜스포트 계층이 세그먼트를 네트워크 계층으로 전달
    3. 네트워크 계층은 세그먼트를 IP 데이터그램으로 캡슐화하고 최선형 전달 서비스(IP)로 세그먼트를 수신 호스트로 전달
    4. 수신 호스트 B에 세그먼트 도착 : B는 세그먼트 안의 목적지 포트 번호(46428)를 검사
    5. 세그먼트를 포트 46428로 식별되는 소켓에 전달
      • 프로세스들은 각각 UDP 소켓과 그와 연관된 포트 번호를 가짐
    6. 네트워크로부터 UDP 세그먼트들이 도착하면,호스트 B는 세그먼트의 목적지 포트를 검사
    7. 세그먼트를 적절한 소켓으로 전달(역다중화).

      Ip는 쉽게말해서 컴퓨터 주소, 포트 번호는 컴퓨터 내 프로세스의 주소~(소켓은 프로세스에 달린거라 보면됨)

  • UDP 소켓의 식별 요소 = 목적지 IP 주소, 목적지 포트 번호
    • 목적지 IP 주소, 목적지 포트 번호만 똑같다면 출발지가 어디든 목적지 소켓을 통해 같은 프로세스로 향함
    • 출발지 포트 번호는 '회신 주소'로써 쓰임.
      • ex) UDPServer.py의 recvfrom() 함수 : 서버가 클라이언트로부터 출발지 포트 번호를 추출


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

  • TCP 소켓의 식별 요소 : 출발지 IP주소, 출발지 포트 번호,목적지 IP 주소, 목적지 포트 번호
    • 출발지가 달라도 목적지 Ip 주소, 포트 번호만 같으면 같은 소켓 같은 프로세스로 향하는 UDP와 달리,
      TCP는 다른 출발지(주소, 포트번호)라면 2개의 다른 소켓으로 향함(초기 연결 설정 요청 전달 TCP 제외)


웹 서버와 TCP

  • 아파치 웹 서버(Apache Web server)와 같이 포트 번호 80에서 동작하는 호스트 고려
    • 클라이언트의 모든 세그먼트는 목적지 포트 번호 80을 가짐
    • 서버는 각기 다른 클라이언트가 보낸 세그먼트를 출발지 IP 주소와 출발지 포트 번호로 구별
    • 그림 3.5처럼 이들 프로세스는 각자 연결 소켓을 가지며, 이 연결 소켓을 통해 HTTP 요청을 수신하고,HTTP 응답을 전송
      • 항상 1대1 대응은 아님
      • 실제로,오늘날의 많은 고성능 웹 서버는 하나의 프로세스만 사용
      • ㄴ 각각의 새로운 클라이언트 연결을 위해 새로운 연결 소켓과 함께 새로운 스레드(가벼운 서브프로세스)를 생성
    • 지속적인 HTTP : 존속 기간에 클라이언트와 서버는 같은 서버 소켓을 통해 HTTP 메시지를 교환
    • 비지속적인 HTTP: 모든 요청/응답마다 새로운 TCP 연결이 생성되고 종료
      • ㄴ 웹 서버 성능에 심한 부담.

profile
인생 살자.

0개의 댓글

관련 채용 정보