[OSI 7 계층] Transport Layer (1)

nana·2023년 1월 7일
0

네트워크

목록 보기
3/12

Transport Layer

가장 중요한 역할은 Process-to-Process Delivery

  • Node-to-node delivery : data link layer에서 두 인접한 노드들끼리의 프레임 전달을 의미.
  • Host-to-host delivery : network layer에서 두 호스트 사이의 데이터그램 전달을 의미.
  • Process-to-process delivery : 컴퓨터에 도달한 메시지를 정확한 프로세스에 전달하는 것을 의미

Process-to-Process Delivery

호스트 위에서 돌고 있는 수 많은 프로그램 중 어떤 프로그램에서 전달하여 어떤 프로그램이 받는 지를 확인하는 것.

Client/Server Paradigm

  • Client : 상대방에게 기능적으로 요청하는 프로세스. Local host에 존재한다.
  • Server : 기능적으로 요청을 받은 프로세스. 서비스를 제공하는 remote host에 존재한다.
    기능적으로 요청을 받는지, 아닌지에 따라서 Client와 Server로 구분할 수 있다.
    (무조건 어떤 프로세스가 Client이다, Server이다라고 말할 수 없음.)

Client와 Server는 같은 이름을 가진다. 예) day time Client process, day time Server process (day time 정보를 요청하는 프로세스, 제공하는 프로세스)

통신을 위해서는 Network address와 Transport address를 알고 있어야 한다.
(Source 쪽에서는 local host와 local process, 상대방으로는 remote host와 remote process)

Transport layer의 Addressing

Data link layer의 프레임은 목적지 MAC address(Hardware address / Physical address)가 필요하다. (OSI 계층의 layer 1, 2)
Network layer는 IP address가 필요하다.
Transport layer는 transport layer address인 Port number가 필요하다.

TCP와 UDP의 Port number는 0~65,535 (16 bit 정수)
Well-known port number : 특정 번호로 지정되어 있다. (예: 이메일, 웹 브라우저가 웹 서버에 접속할 때) 0~1,023 (1,024개), 서버 주소가 이에 해당된다,
1,024 ~ 65,535 사이에서 이외 포트 번호를 할당할 수 있다.
서버는 특정 포트 번호를 고정적으로 사용하고, 클라이언트는 랜덤으로 포트 번호를 사용한다.

즉, 하나의 컴퓨터 내 운영체제 위에서 여러 프로그램이 돌고 있을 때, 운영체제는 전달받은 메시지를 메시지의 목적지 포트 번호를 보고 전달한다.

Socket address

유일하게 식별할 수 있는 IP address (public address)와 특정 컴퓨터 내에서 유일하게 식별할 수 있는 port number를 합치면, 외부에서 접근 가능한 유일한 식별 주소인 Socket address가 된다.

Connectionless vs Connection-Oriented Service

  • UDP : 에러 검출 및 복구를 하지 않는다. Flow control 하지 않는다. - Connectionless Service
  • TCP, SCTP : 에러 검출 및 복구를 한다. Flow control을 한다.(TCP < SCTP) - Connection-Oriented Service. sender와 receiver가 데이터 전송 시 control하기 위해서 연결 설정 및 해지를 한다.

Connection?

Transport layer에서 source process와 destination process 사이에 가상적인 연결(A와 B가 통신 전에 하는 악수)을 의미.

Reliable Service vs Unreliable service

Reliable Service

TCP, SCTP를 이용하여 flow control과 에러 검출 및 복구를 할 수 있기 때문에 프로세스가 상대 프로세스에 데이터를 전달할 수 있다고 믿는다.
특징 : 속도가 느리고 복잡해지지만, 프로그램 입장에서 신경쓸 것이 없기 때문에 안정적이다.
예) 화질을 높게 하기 위해서 미디어 플레이어에서 버퍼링이 존재한다.

Unreliable Service

UDP를 사용하여 Flow control과 에러 검출 및 복구 과정이 없거나 프로그램 내부에서 직접 처리하는 프로그램이기 때문에 reliability(신뢰성)가 필요하지 않다.
특징 : 속도가 빠르다
예) 실시간 스트리밍 서비스

Transport layer는 OSI layer 1, 2 사이에서 오류가 발생할 수 있기 때문에 자신의 Layer만을, 즉 peer-to-peer (source transport peer와 destination transport peer) level에서의 오류를 검출 및 복구한다.

UDP(User Datagram Protocol)

신뢰성을 보장하지 않아도 되거나 자체적으로 신뢰성을 보장하기 위해 오류 검출 및 복구를 하는 경우에 사용한다.
오류 검출 및 복구를 하지는 않지만, Source port number와 Destination port number를 식별하여 전달할 수 있는 정보가 필요하다.
(Datagram : UDP protocol이 전달하는 메시지)

UDP를 사용하는 Well-known ports

주로 서버 쪽의 port number이다.

Frame format - UDP가 전달하는 데이터 포맷

  • Source port number : sender의 포트 번호
  • Destination port number : receiver의 포트 번호
  • Total length : 전체의 길이
  • Checksum : 헤더의 정보가 깨졌는지 아닌지를 확인하기 위함

UDP의 특징

Connectionless Service이다(User가 전송한 데이터를 datagram이라는 메시지에 담아서 전달한다)
Flow와 Error control을 하지 않는다
받은 메시지 + 상위 계층이 전달한 메시지 + 포트 번호 등의 정보를 담아 IP datagram으로 캡슐화, 갭슐화 해제를 한다.

Queueing

Queue : 버퍼라고도 부름. FIFO(First In First out)

프로세스와 transport layer 사이에서 정보를 주고 받는 것은 상위 계층에서 전달할 메시지를 outgoing queue에 집어 넣는 것과 transport layer에서 받은 메시지를 상위 계층이 가져갈 수 있도록 incoming queue에 집어 넣는 것이다. = queue에 쓰고 읽는 것

프로세스 -> outgoing queue -> transport layer
프로세스 <- incoming queue <- transport layer

통신 시에는 queue에 데이터가 있는지 없는지를 주기적으로 읽어서 메시지를 처리한다.

Queueing (Server 측면)
서버 프로그램이 시작되면 UDP에 port를 뚫는다(incoming queue와 outgoing queue를 요청)
서버에게 메시지가 도착하면, UDP는 destination port number를 확인한다
queue가 있으면, destination port의 incoming queue에 메시지를 집어 넣는다
서버가 작업을 완료하면, 서버가 만든 메시지를 outgoing queue에 집어 넣는다
UDP가 outgoing queue를 주기적으로 확인하여 outgoing queue에서 메시지를 꺼내어 UDP 헤더를 추가한 후 IP에게 전달해준다.

Queueing (Client 측면)
프로그램이 시작되면 랜덤한 port number를 지정하여 UDP에 뚫는다.(incoming queue와 outgoing queue를 요청)
클라이언트가 보낼 메시지를 outgoing queue에 집어 넣는다
UDP가 주기적으로 메시지를 확인하여 outgoing queue에서 메시지를 꺼내어 UDP 헤더를 추가한 후 IP에 전달해준다.
Outgoing queue가 가득 찰 경우, 프로그램에서 확인하여 자체적으로 속도를 조절한다. (Layer-to-layer; 계층 간 속도 조절)

UDP가 사용되는 경우
FTP와 같은 대용량 데이터 전송 시에는 사용되지 않는다.
TFTP와 같이 자체적으로 error control과 flow control 기능이 있는 경우, Multicasting을 하는 경우, 네트워크 장치 간에 정보를 전송하는 경우에 사용된다.

profile
언젠가 개발자

0개의 댓글

관련 채용 정보