(본 글은 “컴퓨터 네트워킹 하향식 접근” 도서 및 네트워크 프로그래밍 수업 내용을 정리한 글 입니다.)

3.1 트랜스포트 계층의 서비스 및 개요

  • 서로 다른 호스트에서 동작하는 애플리케이션 프로세스간의논리적 통신을 제공

  • 종단 시스템에서 동작

  • 송신측에서 애플리케이션의 메세지를 세그먼트단위로 쪼개 네트워크 계층으로 보낸다.

    각 계층별 용어가 다르다. 전송계층에서는 세그먼트, 네트워크 계층에서는 데이타 그램이라고 표현했고 각각 전달단위가 다르다.

  • 수신측에서는 세그먼트 메세지를 받아 조립 후 애플리케이션 계층으로 보낸다.

  • 대표적 트랜스포트 계층의 프토토콜 : TCP , UDP

물리계층, 링크계층, 네트워크 계층만 있어도 소스 - 목적지 컴퓨터 까지 데이터 전달은 가능 그러나 손실된 데이터를 복구하거나 관리해주지는 않는다.

데이터의 손실을 확인하고 복구하는 작업은 상당히 복잡한데 이를 애플리케이션에서 다 처리하게 되면 힘드니 전송계층에서 별도로 관리하는 것.

트랜스포트 계층과 네트워프 계층의 관계

네트워크 계층 : 말 그대로 컴퓨터와 컴퓨터( 호스트 간의 통신)

트랜스포트 계층 : 프로세스간의 논리적 통신

TCP와 UDP

  1. TCP

    • 순서대로 전송하고 신뢰성이 있다

    • 혼잡제어, 흐름제어, 연결설정

  2. UDP

    • 손실에 대해 복구하지 않고 순서대로 보냈을 때 순서대로 도착한다는 보장이 없다

    • 두 서비스 모두 지연 보장 , 대역폭 보장을 제공하지는 않는다.

      “내가 1분에 100M보내는 것을 보장해주세요!” 이런게 없다는 뜻

3.2 다중화/역 다중화

image

다중화 : 출발지 호스트의 소켓으로부터 데이터를 전달받아 모은 데이터를 세그먼트 단위로 묶고 캡슐화 작업을 마친 후 네트워크 계층으로 내려보내는 작업

이상적으로 본다면 다중화 없이 각각 연결하려는 목적지와 1:1 선을 만들면 좋겠지만 비용과 비현실적인 문제로 그렇게 하지 않고 하나로 보내는 N:1관계(MUX)

역다중화 : 반대로 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업

image

각 IP데이터 그램에는 출발지 IP, 목적지 IP주소가 있으며 IP다이어 그램은 1개의 트랜스포트 계층 세그먼트를 전달한다.

각각의 세그먼트에는 위 그림과 같이 포트정보와 헤더 필드(체크섬 , 데이터 길이)등의 정보가 들어있는 구조.

이 정보들을 통해 세그먼트들의 데이터를 적절한 소켓으로 전달할 수 있다. (TCP, UDP에 따라 식별하는 정보는 다름)

  • UDP의 경우 목적지 IP주소, 목적지 포트번호를 통해 소켓을 식별한다.

  • 즉 동일한 목적지 IP번호와 목적지 포트번호를 가지고 있다면 같은 소켓으로 전달된다.

  • TCP의 경우 목적지 IP주소, 목적지 포트번호, 출발지 IP주소, 출발지 포트번호를 통해 소켓을 식별한다.

  • 서버는 동시에 여러 TCP소켓을 생성할 수 있고 각 소켓은 4자기 요소를 통해 식별된다.

  • 웹 서버는 클라이언트마다 각각 별개의 소켓을 만든다.

    persist : 웹 페이지의 글자, 문서와 같은 각 Object들을 하나의 소켓으로 가져오는 방법

    non-persist : 웹 페이지의 글자, 문서와 같은 각 Object마다 TCP 연결을 생성하고 종료하며 값을 가져오는 방법

3.3 UDP(비연결형)

  • 손실에 대해 재전송을 하지 않음

  • 순서대로 보내도 순서대로 도착한다는 보장이 없다.

  • HandShaking이 없다.

    TCP의 경우 손실을 찾고 재전송을 하기위해 ack정보를 주고받는다.

  • 스트리밍 멀티미디어 어플리케이션에서 주료 사용

    영상 같은 경우 수 많은 이미지 정보에 대해 손실을 찾고 재전송하게되면 딜레이가 심하다. 그러나 사람의 눈으로 볼 때 일부 프레임이 전송되지 않더라도 어색하지 않고 빠르게 보낼 수 있어서 UDP를 사용한다.

  • UDP를 사용하는 프로토콜로 DNS , SNMP가 있다.

  • UDP자체가 신뢰성이 없으므로 TCP로 바꾸거나 애플리케이션 자체에서 재전송과 관련된 로직을 구현해 신뢰성을 높일 수 있다.

체크섬

  • 16비트 단위로 전송데이터를 자르고 각 자른 체크섬을 계속 더해나간다.

  • 전체 더한 마지막 결과값에 대해 1의 보수를 취해 UDP의 체크섬 부분에 넣는다.

    • 16비트 CRC에서 에러를 검출하지 못할 확률은 약 0.001% (정확도가 높다)
  • 수신쪽에서 받은 데이터를 자체적으로 계산해 송신쪽에서 보낸 체크섬데이터과 일치하는지 비교한다. (다르다면 문제가 있다는 의미)

image

카테고리:

업데이트:

댓글남기기