Chapter 24. Transport-Layer Protocols

HEEJOON MOON·2021년 10월 18일
0

컴퓨터 네트워크

목록 보기
9/12

24.1 Transfer Layer Basic

24.1.1 Process to Process Delivery

  • Data-link Layer : Link 양 끝단에서 프레임들의 전송이 일어난다. Node-to-Node delivery라고 한다.
  • Network Layer : 두 host간의 datagram의 전송이 일어난다. Host-to-Host delivery라고 한다.

< Process to Process Delivery >
Transport layer는 process to process delivery를 담당한다. 즉, 패킷, 메시지 일부의 전달이 하나의 프로세스에서 다른 프로세스에 일어나는 것을 말한다. 2개의 프로세스들은 client/server relationship을 가진다.

24.1.2 Client/Server Paradigm

Process to Process Delivery에서 가장 흔히 사용되는 통신방법은 Client/Server paradigm이다.

  • client : 로컬 호스트에서의 프로세스
  • Server : 원격 호스트에서 서비스를 제공하는 프로세스

위 프로세스들은 모두 동일한 이름을 가진다. 두 프로세스간의 통신을 위해서는 Local host, Local Process, Remote Host, Remote Process를 알아야한다.

24.1.3 Addressing

  • 데이터 링크 계층에서 프레임은 도착지의 MAC 주소를 알아야한다
  • 네트워크 계층에서는 IP주소를 알아야 한다
  • Transport 계층에서는 transport layer address(port number라 불리는, 호스트에서 실행중인 여러 프로세스들중 선택하게 하는) 것을 알아야 한다.

< Socket Addresses >

  • IP 주소와 포트 넘버의 조합이다.
  • Taransport layer 프로토콜은 소켓 주소들의 쌍(client socket 주소, server socket 주소)이 필요하다.

24.1.4 Multiplexing and Demultiplexing

24.1.5 Connection

Connectionless vs Connection-oriented Service

< Connectionless Service >

  • Packet들은 넘버링 되어있지 않다. 그들은 delay되거나 Connection이 없어질 수 있다
  • ACK또한 존재하지 않는다
  • UDP는 인터넷 모델의 Connectionless한 프로토콜이다.

< Connection-Oriented Service >

  • 송수신단 간의 Connection(연결 설정)이 먼저 세팅되어야 한다.
  • 데이터들은 전송된다
  • 마지막에는, 연결설정이 해제된다
  • TCP와 SCTP는 connection-oriented 프로토콜이다.

Reliable vs Unreliable

< Reliable Service >

  • 만약 어플리케이션 계층 프로그램이 신뢰성을 필요로 하면, 우리는 TCP와 같은 신뢰성이 높은 전송 프로토콜을 이용한다
  • 하지만 서비스는 더욱 느려지고, 복잡해진다는 것을 의미한다

< Unreliable Service >

  • 만약 어플리케이션 프로그램이 프로그램 자체의 flow,error control 메커니즘을 사용하거나, 신뢰성을 필요로 하지 않거나, 빠른 서비스를 제공해야 하거나, flow,error control이 필요 없는 경우(real-time 프로그램)에는, UDP와 같은 unreliable한 프로토콜이 사용된다.

Error Control

24.2 User Datagram Protocol(UDP)

UDP는 connectionless, unreliable한 전송 프로토콜이다. IP 서비스에, host-to-host대신 process-to-process를 위한 정보를 추가하는 것을 제외하고, 어떠한 것도 더하지 않는다. UDP는 매우 간단한 프로토콜이며, 최소한의 부담을 준다.

24.2.1 User Datagram

< Frame Format >

header는 8바이트의 고정된 크기를 가지며, 4개의 부분으로 구성되어 있다. 1,2번째 부분은 소스와 목적지 포트 넘버를 정의하며, 3번째 영역은 user datagram의 총 길이를 정의하며, 마지막 영역은 checksum을 옮길 수 있다.

24.2.2 UDP services

Connectionless Services

UDP는 connectionless한 서비스를 제공한다. 즉, UDP에 보내진 datagram들은 독립적이다. 송신된 Datagram간의 관계는 없으며, 넘버링도 되어있지 않다. TCP와 달리 사전/사후 연결 설정 및 해제가 필요 없으며, 각각의 데이터그램은 서로 다른 path로 진행할 수 있다.

Flow and Error control

UDP는 매우 간단한 프로토콜이다. flow control이 존재하지 않으며, window-mechanism역시 존재하지 않는다. 수신단은 들어오는 메시지로 넘칠 수 있다. 이러한 흐름제어의 부족은, 필요하다면 UDP에서 사용하는 프로세스가 흐름제어를 제공해야 하는 것을 말한다.

Error control역시 UDP에서는 checksum을 제외하면 존재하지 않는다. 송신단은 메시지가 소실되었거나 중복되었는지 알지 못한다. 수신단이 checksum을 통해 에러를 감지하였으면, user datagram은 버려진다. 이러한 에러제어의 부족은, 필요하다면 UDP에서 사용하는 프로세스가 에러제어를 제공해야 하는 것을 말한다.

< CheckSum >

Encapsulation and Decapsulation

다른 프로세스에 메시지를 보내기 위해서는, UDP 프로토콜은 encapsulation과 decapsulation이 필요하다.

Queuing

24.2.3 UDP Applications

UDP는 흐름제어나 오류 검출을 거의 신경쓰지 않는 단순한 request-response를 요구하는 통신 프로세스에 적합하다. 또한 자체적으로 흐름제어와 오류검출의 기능이 있는 프로세스에는 적합하다.

  • FTP처럼 많은 양의 데이터를 보내는 프로세스에 사용되지 않는다
  • TFTP는 자체적인 흐름제어와 에러 복구의 기능을 가지고 있다
  • Routing information protocol(RIP)와 같은 업데이트 방식의 라우팅에 적합하다
  • SNMP같이 관리 프로세스들에 적합하다.

24.3 Transmission Control Protocol(TCP)

TCP는 connection-oriented, reliable한 프로토콜이다. TCP는 connection-oriented sevice를 위해서 명확하게 연결 설정, 데이터 전송, 연결 해제 단계를 정의한다. GBN과 SR 프로토콜의 조합을 이용하여 신뢰성을 제공한다. TCPP는 checksum을 이용하여 오류 탐지를 하며, 부패되거나 소실된 패킷들을 재전송하고, 누적,선택적인 ack를 보내며, 타이머를 사용한다.

24.3.1 TCP Services

Stream Delivery Service

TCP는 UDP와 달리, stream-oriented하다. sending process가 데이터를 연속적인 바이트로 보내는 것을 허용하며, receving process가 데이터 바이트를 연속적으로 수신하는 것을 허용한다. TCP는 2개의 프로세스들이 가상으로 연결되있는 것처럼 환경을 만들고, '튜브'형태에서는 인터넷을 통해 바이트들이 이동한다. Sending process가 stream을 만들고, recieving process는 이것을 읽는다.

< Sending and Receving buffers >

송신 프로세스와 수신 프로세스의 읽고 쓰는 속도가 같지 않기 때문에, 저장을 위한 버퍼가 필요하다. 송신 버퍼와 수신 버퍼가 존재하는데, 이 버퍼들은 흐름 및 에러 제어에 필수적이다.

위와 같이 원형 큐를 이용하여 버퍼를 구현할 수 있다.

  • 송신단 : 3가지 영역이 있다. White 섹션은 비어있는 공간이며, 파란 공간은 송신했지만 ack를 받지 못한 것을 저장한다. 검은색 섹션은 TCP에 의해 보내질 공간영역이다. TCP는 검은 영역의 일부만을 송신할 수 있는데, 이는 congetstion이나 수신단이 느려서일 수 있다. ACK가 도착하면 파란 영역은 다시 하얘진 부분으로 되어, 재사용된다. 이것이 원형 큐를 사용해 구현한 이유이다.

  • 수신단 : White 섹션은 바이트가 수신될 수 있는 공간을 의미하며, 파란색 영역은 수신 프로세스에 의해 읽혀질 바이트들을 저장하는 공간이다. 이 공간역시 읽혀지면, 다시 재활용된다.

Segments

TCP는 segment라는, 바이트들을 묶음을 사용한다. TCP는 추가적으로 각 segment에 헤더를 추가하고(제어 목적), segment를 전송을 위해 네트워크 계층으로 보낸다. 이러한 segments은 IP datagram으로 encapsulation되며, 전송된다. 이러한 전체적인 과정은 수신 프로세스에게 투명하다. TCP receiver는 오류가 발생한 segments을 처리한다. 모든 segments은 크기가 같을 필요는 없다.

Full-Duplex Service

  • TCP는 full-duplex 서비스를 제공한다. 만약 2개의 application programs이 연결되어 있다면, 동시에 송신과 수신이 가능하다.

Connection-oriented Service

2개의 TCP는 연결 설정 및 해제 과정을 거친다. A의 TCP는 B의 TCP에 승인을 받고, 양방향으로 데이터 전송이 일어나며, 더 이상 보낼 데이터가 없고 버퍼가 비었으면, 연결을 끊고 버퍼들은 제거된다.

Reliable Service

TCP는 Acknowlegement 메커니즘을 사용하여 안전성과 데이터의 도착을 확인한다.

24.3.2 TCP Features

Numbering system

  • Byte Number : TCP는 Connection에 의해 전소오디는 모든 데이터 바이트들을 넘버링한다. 넘버링은 방향과는 무관하다. TCP가 프로세스로부터 데이터 바이트를 받으면, 송신 버퍼에 저장후에 넘버링한다. 숫자는 임의적인 수를 사용한다. 예를 들어 1057로 숫자가 결정되고, 보낼 데이터가 6000바이트정도 되면, 바이트는 1057~7056으로 넘버링 된다. 이것은 flow, error control을 위해 사용된다.

  • Sequence Number : 바이트들이 넘버링되면, TCP는 송신된 각 segment에게 숫자를 할당한다. 각 segment의 number는 송신된 segment의 처음 바이트의 넘버이다.

  • Ack number : Acknowlegement number는 각각 다음 수신으로 기대하는 바이트의 넘버를 나타낸다. 또한. ACK number는 cumulative하여서, 각 프로세스가 마지막으로 수신한 바이트의 넘버 역시 알 수 있다. 마지막 수신 바이트 넘버에 1을 더한 것을 ack number로 한다. 예를 들어, 5643이 ack number 였다면, 마지막으로 수신한 데이터의 바이트가 5642인 것을 알 수 있으나, 5642 bytes를 수신했다는 의미는 아니다.(0부터 바이트 넘버가 시작 안할수도 있어서다.)

24.3.3 Segment

Format

Control field

flow control, 연결 설정과 해제, TCP 데이터 전송 모드 설정을 가능하게 한다.

24.3.4 TCP Connection

TCP는 connection-oriented하다. 이것은 소스와 목적지 간의 논리적인 path설정을 요한다. 메시지들은 이 path를 따라 이동하게 된다. TCP는 IP와 다르게, 재전송된 segmentation인 것을 파악할 수 있다. 즉 IP 서비스를 이용하여 수신단까지 전송하지만, *TCP는 connection자체를 조정한다. TCP는 connection establishment, data transfer, connection termination의 단계를 요구한다.*

Connection Establishment


TCP 데이터 전송은 full-duplex 모드를 통해 이뤄진다. 만약 2개의 TCP들이 연결되면 동시에 segments를 보내거나 수신할 수 있다. 각 party는 데이터 송신 전에 통신을 초기화하고, 다른 party에게 승인을 받아야 한다.

  • passive open : 프로세스는 서버와 함께 시작한다. 서버 프로그램은 TCP에게 연결설정이 준비되었다고 알린다. 이것을 passive open이라 한다. 서버 자체로는 connection을 만들 수 없다.

  • active open : server와 연결하고픈 client는 TCP에게 특정 서버와 연결해달라 요청한다.

24.3.5 Data Transfer

profile
Robotics, 3D-Vision, Deep-Learning에 관심이 있습니다

0개의 댓글