본문 바로가기

Study/Networking

9.1 전송층 서비스(TransportLayer Service) & 9.2 전송층 프로토콜

728x90

1. 프로세스 대 프로세스 통신

전송층 프로토콜의 첫 번째 의무는 프로세스 대 프로세스 통신(process to process communication)을 제공하는 것이다.

전송층의 프로토콜은 적절한 프로세스에게 메시지를 전달할 책임이 있다.

2. 주소 지정: 포트 번호

프로세스 대 프로세스 통신을 달성하기 위한 여러 방법들이 있지만, 가장 많이 사용하는 것은 클라이언트/서버 패러다임을 통해서이다. 로컬 호스트에 있는 프로세스인 클라이언트는 보통 원격지에 있는 호스트상의 프로세스인 서버로부터 서비스를 필요로 한다.

 그러나 오늘날의 운영체제는 다중 사용자 및 다중 프로그래밍 환경을 모두 지원한다. 통신을 위해서는 로컬 호스트, 로컬 프로세스, 원격 호스트, 그리고 원격 프로세스를 정의해야 한다. 로컬 호스트와 원격 호스트는 IP 주소를 이용하여 정의된다. 프로세스를 정의하기 위해 포트 번호라 부르는 두 번째 식별자가 필요하다. TCP/IP 프로토콜 그룹에서 포트 번호는 0과 65,535(16비트)사이의 값을 가지는 정수이다.

 클라이언트 프로그램은 임시 포트 번호라 부르는 포트 번호를 스스로 정의한다. 서버 프로세스도 마찬가지로 포트 번호를 가지고 자기 자신을 정의해야 한다. 그러나 이 포트 번호는 임의로 선택될 수 없다. 이 포트 번호를 잘 알려진 포트 번호라고 한다.

- ICANN 범위

인터넷 할당 번호 관리 기관(ICANN, Internet Corporation for Assigned Names and Numbers)은 포트 번호를 세 구간으로 나누었다.

- 잘 알려진 포트: 0 ~ 1,023 범위의 번호가 포트에 할당 되었고 ICANN에 의해 통제 된다. 이것들이 잘 알려진 포트들이다.

- 등록 포트: 1,024에서 49,151 범위의 포트는 ICANN에 의해 할당이나 통제를 받지 않는다. 중복 방지를 위해서 단지 ICANN에 등록만 되어 있다.

- 동적 포트: 49,152부터 65,535 범위의 포트는 ICANN에 의해 통제를 받지도 않고 소켓 주소가 아니다.

 

IP주소와 포트 번호의 조합을 소켓 주소라고한다. 서버 소켓 주소가 유일하게 서버 프로세스를 정의하는 것처럼 클라이언트 소켓 주소는 유일하게 클라이언트 프로세스를 정의한다.

3. 캡슐화와 역캡슐화

한 프로세스에서 다른 프로세스로 메시지를 전송하기 위해, 전송층 프로토콜은 메시지의 캡슐화와 역캡슐화를 한다. 캡슐화는 송신 사이트에서 발생한다. 프로세스가 전송할 메시지를 가지면, 이것은 소켓 주소의 쌍과 전송층 프로토콜에 종속되는 다른 정보의 조각을 가지고 메시지를 전송층에 전달한다. 전송층은 데이터를 수신하고 전송층 헤더를 추가한다.

 

역캡슐화는 수신 사이트에서 발생한다. 메시지가 목적지 전송층에 도착하면, 전송층은 헤더를 제거하고 나머지 메시지를 응용층에서 동작하는 프로세스에게 전송한다. 송신 소켓 주소는 수신된 메시지에 응답할 필요가 있는 경우를 위해 프로세스에게 전달된다.

 

4. 다중화와 역다중화

객체가 1개의 발신지 이상으로부터 항복을 받아들일 수 있는데 이것을 다중화라 하고, 객체가 1개 발신지 이상으로 항목을 전달할 수 있는데 이것을 역다중화라 한다. 발신지 전송층은 다중화를 수행하고, 목적지 전송층은 역다중화를 수행한다.

 

5. 흐름 제어

개체가 생산자로부터 소비자로 배달하는 방법은 pushing과 pulling이라는 두 가지 방법 중의 하나로 이루어 질 수 있다.

소비자의 사전 요청없이 정보가 생성될 때마다 전송측에서 정보를 전달하는 경우를 pushing이라고하고 소비자가 요구한 경우에만 생산자가 정보를 전달하는 경우 pulling이라고 한다.

- 전송층에서 흐름 제어 처리

전송층에서 통신을 위하여 송신 프로세스, 송신 전송층, 수신 전송층, 그리고 수신 프로세스 등 4개의 개체가 필요하다. 송신 프로세스는 메시지를 생산하고 pusing방식을 이용하여 전송층으로 전송한다. 송신 전송층은 소비자와 생산자의 두 가지 임무를 수행한다. 송신 전송층은 생상자로부터 전송된 메시지를 소비한다. 즉 송신 전송층은 메시지를 패킷으로 캡슐화한 후 pushing방식을 이용하여 수신 전송층으로 전송한다. 수신 전송층도 두 가지 임무를 가지고 있다. 수신 전송층은 또한 생산자의 역할을 수행하고, 메시지를 역캡슐화하고 응용층으로 전송한다. 그렇지만 마지막 전송 방법은 pulling방식으로 이루어진다. 즉, 전송층은 응용층 프로세스가 메시지를 요청하기 전까지는 기다린다.

6. 오류 제어

인터넷에서는 송신 전송층으로부터 수신 전송층으로 패킷을 전달할 책임이 잇는 하부의 네트워크(즉, IP)이 신뢰성을 제공하지 않기 때문에 응용층에서 신뢰성을 요구하는 경우에는 전송층에서 신뢰성을 제공할 수 있어야 한다. 전송층의 오류 제어에서 제공하는 기능은 다음과 같다.

  1. 훼손된 패킷의 감지 및 폐기
  2. 손실되거나 폐기된 패킷을 추적하고 재전송
  3. 중복 수신 패킷을 확인하고 폐기
  4. 분실된 패킷이 도착할 때까지 순서에 어긋나게 들어온 패킷을 버퍼에 저장

- 순서 번호

오류 제어가 수행되기 위해서 송신 전송층은 어떤 패킷이 재전송되어야 하는지를 알아야 하며, 또한 수신 전송층은 어떤 패킷이 중복되었는지 또는 어떤 패킷이 순서에 어긋나게 도착했는지를 알아야 한다. 이는 패킷이 번호를 가지고 있으면 가능하다. 패킷의 순서 번호를 저장할 수 있도록 전송층 패킷에 한 필드를 추가하는 것이다.

 

- 확인응답

수신측에서는 오류 없이 잘 수신된 패킷들에 대해서 확인응답(ACK)를 전송할 수 있다. 수신측은 훼손된 패킷을 단순히 버린다. 패킷을 전송한 후 송신측은 타이머를 구동하고, 타이머가 만료되기 전까지 ACK가 도착하지 않으면 송신측은 패킷을 재전송한다.

7. 흐름과 오류 제어의 결합

- Sliding Window

버퍼는 Sliding window라고 하는 일련의 조각의 집합으로 표현되며, 각 조각은 언제나 원형의 일부분을 점유한다. 송신측에서 패킷이 전송되면 관련 조각이 표시된다. 모든 조각이 표시된다는 것은 버퍼가 다 차서 더 이상의 메시지를 응용층으로부터 수신할 수 없다는 것을 의미한다. 확인응답(ACK)이 수신되면 해당 조각의 표시는 해제된다. 창의 시작부터 몇 개의 연속적인 조각의 표시가 해제되면, 창의 끝에서좀 더 많은 빈 조각을 허용하기 위하여 창의 관련 순서 번호의 범위를 미끄러지듯이 돌린다.

원형모양이 아닌 선형모양으로도 표시할 수 있다.

8. 혼잡 제어

흐름제어는 호스트와 호스트간의 데이터 처리를 효율적으로 하기 위함, 혹은 송신 측과 수신 측의 데이터 처리 속도 차이를 해결하기 위한 기법이다,

혼잡제어는 호스트와 네트워크 상의 데이터 처리를 효율적으로 하기 위한 기법 혹은 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법이다.

 

9. 비연결형과 연결형 프로토콜

- 비연결형 서비스

비연결형 서비스에서 발신지 프로세스(응용 프로그램)는 메시지를 전송층에서 수신 가능한 크기의 여러개의 데이터 조각으로 나눈 후 데이터 조각들을 하나씩 전송층으로 전달한다. 전송층의 데이터들의 관계를 고려하지 않고 각각의 데이터 조각을 독립적인 하나의 단위로 간주한다. 응용층으로부터 하나의 조각이 들어오면, 전송층은 조각을 패킷으로 캡슐화한 후에 전송한다.

위 그림에서 시간 축을 사용해 패킷들의 이동을 보여준다. 그러나 전송층과 그 반대에게 패킷을 전송하는 프로세스는 동시에 일어난다고 가정한다. 그림은 클라이언트에서 3개의 메시지들이 클라이언트 전송층에게 순서대로 전송되는 것을 보여준다(0, 1, 2). 두 번째 패킷 전송에서 추가적인 지연 때문에 서버에 도착하는 메시지들은 순차적이지 못하다(0, 2, 1). 만약 이러한 3개의 데이터들이 같은 메시지에 속해 있다면 서버 프로세스는 이상한 메시지를 받게 되는 것이다.

이러한 상황은 패킷 중의 하나라도 손실되는 경우에는 더욱 악화된다. 패킷에는 순서 번호가 없기 때문에 수신 전송층은 메시지 중의 하나가 손실되었는지를 알 수 없게 되고, 단지 2개의 데이터 조각을 서버 프로세스로 전달한다.

 

위의 문제점은 2개의 전송층이 서로 협력하지 않는다는 사실 때문에 발생한다. 수신 전송층은 첫 번째 패킷이 언제 도착할지 또는 모든 패킷이 다 도착했는지에 대해서 알 수 없다.

비 연결형 서비스에서는 흐름 제어나 오류 제어 또는 혼잡 제어가 구현될 필요가 없다.

 

- 연결형 서비스

연결형 서비스에서 클라이언트와 서버는 먼저 그들 간의 논리적인 연결을 설정한다. 데이터 교환은 연결이 설정된 이후에나 가능하다. 데이터의 교환이 완료된 후에 연결은 해지된다.

연결형 프로토콜에서는 흐름 제어, 오류 제어, 그리고 혼잡 제어 등이 구현될 수 있다.


- UDP: UDP는 오류 제어가 응용층 프로세서에 의해 제공되는 응용에서 단순성과 효율성으로 사용되는 신뢰성 ㅇ없는 비연결형 전송층 프로토콜이다.

 

- TCP: UCP는 신뢰성이 중요한 어떤 응용에 의해 사용될 수 있는 신뢰성 있는 연결형 프로토콜이다.

 

- SCTP: SCTP는 UDP와 TCP의 특성을 결합한 새로운 전송층 프로토콜이다.

728x90