전송층 서비스
1. 전송층은 응용층과 네트워크 층 사이에 위치
2. 두 응용층 사이에서 프로세스 - 대 - 프로세스 통신을 제공
3. 통신은 논리적 연결을 이용하여 제공

| 프로세스-대-프로세스 통신 전송층 프로토콜의 첫번째 의무는 프로세스-대-프로세스 통신 제공 (프로세스: 전송층의 서비스를 사용하는 응용층 객체(동작하는 프로그램)) 네트워크층은 컴퓨터 레벨(호스트-대-호스트)에서 통신 - 네트워크층 프로토콜은 메세지를 단지 목적지 컴퓨터에 전달 - 메세지는 정확한 프로세스에게 처리되어야 하며 이것이 전송층 프로토콜에서 수행됨 전송층 프로토콜은 적절한 프로세스에게 메세지를 전달할 책임이 있음 |

| 포트 번호(Port Number) - 통신을 위해서는 로컬 호스트, 로컬 프로세스, 원격 호스트, 원격 프로세스를 정의해야 한다. - 로컬 호스트와 원격 호스트는 IP주소를 이용하여 정의 - 프로세스를 정의하기 위해 포트 번호라 부르는 두 번째 식별자가 필요 - TCP/IP 프로토콜 그룹에서 포트 번호는 0과 65,535 사이 값을 가지는 정수 클라이언트 프로그램은 임시 포트 번호라 부르는 포트 번호를 스스로 정의 - 임시 포트 번호는 일부 클라이언트/서버 프로그램에서 적절하게 동작하기 위해서 1,023보다 큰 것을 권고 서버 프로세스도 포트 번호를 가지고 자기 자신을 정의해야 함 - 이 포트 번호는 임의로 선택될 수 없음 - TCP/IP는 서버들을 위해 공통의 포트 번호 사용을 결정 (잘 알려진 포트 번호라고 함) |
모든 클라이언트 프로세스는 해당하는 서버 프로세스의 잘 알려진 포트 번호를 알고 있음
ex) daytime 클라이언트 프로세스는 위에서 언급한 것처럼 임시 포트 번호 52,000을 사용하여 자기 자신을 식별하는 반면에, daytime 서버 프로세스는 잘 알려진 포트 번호 13을 사용해야 함

| ICANN 범위 인터넷 할당 번호 관리 기관(ICANN)은 포트 번호를 3개 구간으로 나눔 1. 잘 알려진(well-known) 포트: 0~1,023 범위의 번호가 포트에 할당 되었고 ICANN에 의해 통제 2. 등록(registered) 포트: 1,024~49,151 범위의 포트는 ICANN에 의해 할당이나 통제를 받지 않음, 중복 방지를 위해서 ICANN에 등록만 진행 3. 동적(dynamic) 혹은 사설 포트: 49,152~65,535 범위의 포트는 ICANN에 의해 통제를 받지도 않고 소켓 주소가 아님 |

| 캡슐화 & 역캡슐화 (프로세스에서 다른 프로세스로 메세지를 보내기 위해 전송층 프로토콜은 메세지를 캡슐화하고 역캡슐화를 진행) 캡슐화는 송신 사이트에서 발생 - 프로세스가 보낼 메세지가 있으면 전송층 프로토콜에 따라 달라지는 소켓 주소 및 기타 정보와 함꼐 메세지를 전송 계층으로 전달 - 전송층은 데이터를 수신하고 전송 계층 헤더를 추가 역캡슐화는 수신 사이트에서 발생 - 메세지가 목적지 전송층에 도착하면, 전송층은 헤더를 제거하고 나머지 메세지를 응용층의 프로세스에게 전달 - 송신 소켓 주소는 수신된 메세지에 응답할 필요가 있는 경우를 위해 프로세스에게 전달 |

흐름제어(Flow Control)
예를 들어보자, 한 기업이 제품을 생산하고, 이를 소비자가 소비할 때 생산율과 소비율 사이에는 균형이 필요하다. 품목이 소비할 수 있는 것보다 빨리 생산되면, 소비자가 압도당해 일부 품목을 폐기해야 할 수 있고, 품목이 소비될 수 있는 것보다 느리게 생간되면 소비자는 기다려야 하고 시스템의 효율성이 떨어진다.
흐름제어는 첫 번째 문제와 관련이 있다. 소비자 측면에서는 데이터 항목이 손실되는 것을 방지해야 한다.
| 밀기 혹은 끌기 정보를 생산자로부터 소비자로 배달하는 방법: 밀기(pushing) & 끌기(pulling) 밀기 - 소비자의 사전 요청없이 정보가 생성될 때마다 전송측에서 정보를 전달하는 경우 (생산자가 밀기 방식으로 정보를 전달하면, 소비자는 정보의 과도한 수신에 직면할 수 있고 따라서 정보의 손실을 방지하기 위하여 반대 방향으로 흐름제어가 필요. 즉, 소비자는 전송을 중지하도록 생산자에게 경고하고 또한 자신이 정보를 다시 수신할 준비가 되면 생산자에게 알려줄 필요가 있음) 끌기 - 소비자가 요구한 경우에만 생산자가 정보를 전달하는 경우 (끌기 방식에서는 소비자가 수신할 준비가 되면 생산자에게 정보를 요청하면 되기 때문에 흐름제어는 필요없음) |

| 흐름 제어 처리(Handling Flow Control) 전송층 통신에서 4개의 개체(Entity)가 필요 - 발신자 프로세스, 발신자 전송층, 수신자 전송층, 수신자 프로세스 응용층의 송신 프로세스는 단순한 생산자 - 메세지를 생산하고 밀기 방식을 이용하여 전송층으로 전송 송신하는 전송층은 소비자와 생산자라는 이중 역할을 수행 - 생산자로부터 전송된 메세지를 받아서 패킷으로 캡슐화하여 수신 전송층으로 전송 수신 전송층도 이중 역할을 수행 - 송신측의 전송층으로부터 전송된 패킷을 소비 - 생산자의 역할로, 메세지를 역캡슐화하고 응용층으로 전송: 끌기 방식 - 즉, 전송층은 응용층 프로세스가 메세지를 요청하기 전까지 기다림 |

| 버퍼(Buffer): 송신측과 수신측에서 패킷을 저장할 수 있는 메모리 영역 여러가지 방법으로 흐름제어가 구현될 수 있지만, 그 중 일반적으로 송신 전송층에 하나, 수신 전송층에 하나, 즉 2개의 버퍼를 사용하는 것이다. - 소비자로부터 생산자로 신호를 전송하는 경우 흐름제어 기반의 통신이 발생 - 송신 전송층의 버퍼가 가득 차면, 송신 전송층은 메세지의 경유를 멈추도록 응용층에게 통보 - 버퍼에 빈 공간이 생기면, 송신 전송층은 응용층에게 메세지가 다시 지나갈 수 있다고 통보 - 수신 전송층의 버퍼가 가득 차면, 수신 전송층은 패킷의 전송을 멈추도록 송신 전송층에게 통보 - 버퍼에 빈 공간이 생기면, 수신 전송층은 송신 전송층에게 패킷을 다시 전송해도 된다고 통보 |
오류 제어(Error Control)
TCP/IP 프로토콜의 경우 네트워크층에서 신뢰성을 제공하지 않기 때문에 전송층에서 신뢰성을 제공해야 한다.
| 전송층에서 오류 제어가 제공하는 기능 - 손상된 패킷을 감지 & 폐기 - 손실되거나 폐기된 패킷을 추적하고 재전송 - 중복 전송 패킷을 확인하고 폐기 - 분실된 패킷이 도착할 때까지 순서에 어긋나게 들어온 패킷들을 버퍼에 저장 |
흐름제어와는 다르게 오류제어는 송신 전송층과 수신 전송층만이 연관

| 순서 번호 오류 제어가 수행되기 위해서는 송신 전송층은 어떤 패킷이 재전송되어야 하는지를 알아야 하며, 수신 전송층은 어떤 패킷이 중복되었는지, 또는 어떤 패킷이 순서에 어긋나게 도착했는지 알아야 된다. - 패킷이 번호를 가지고 있으면 가능 - 패킷의 순서 번호를 저장할 수 있도록 전송층 패킷에 한 필드를 추가 - 만일 패킷이 훼손되거나 손실되었으면, 수신 전송층은 어떻게든 송신 전송층에게 순서 번호를 가진 해당 패킷을 재전송하도록 알려줄 수 있음 - 수신한 2개의 패킷이 동일한 순서 번호를 가지는 경우에 수신 전송층은 패킷의 중복 수신을 감지할 수 있음 - 순서 번호의 간격을 관찰함으로써 패킷이 순서에 어긋나게 들어왔는지도 확인할 수 있음 |
| 확인 응답 오류 제어를 위하여 긍정과 부정 신호를 사용할 수 있음 수신측에서는 오류 없이 잘 수신된 패킷들에 대해서 확인응답(ACK)를 전송할 수 있음 - 수신측은 훼손된 패킷과 중복 수신된 패킷을 폐기 - 순서에 어긋나게 들어온 패킷은 폐기하거나, 손실된 패킷이 도착하기 전까지 버퍼에 저장함 송신측에서 타이머를 사용하는 경우에는 패킷의 손실을 감지할 수 있음 - 패킷을 전송한 후 송신측은 타이머를 가동하고, 타이머가 만료되기 전까지 ACK가 도착하지 않으면 송신측은 패킷을 재전송함 |
미닫이 창(sliding window)
순서 번호가 모듈러 2^m을 사용하기 때문에 0부터 2^m-1까지의 순서 번호를 원형으로 표현 가능
| 버퍼는 미닫이 창이라고 하는 일련의 조각 집합으로 표현되며, 각 조각은 언제나 원형의 일부를 점유 송신측에서 패킷이 전송되면 관련 조각은 청색으로 표현 모든 조각이 표시 된다는 것은 버퍼가 다 차서 메세지를 응용층으로부터 수신할 수 없다는 것을 의미 확인응답이 수신되면 해당 조각의 표시는 흰색으로 해제 창의 시작부터 몇 개의 연속적인 조각의 표시가 해제되면, 창의 끝에서 좀 더 많은 빈 조각을 허용하기 위해 창을 관련 순서 번호의 범위를 미는 것처럼 돌림 |


비연결형과 연결형 프로토콜
네트워크층 프로토콜과 마찬가지로 전송층 프로토콜도 비연결형과 연결형 두 가지 형태의 서비스를 제공
(전송층에서의 비연결형 서비스는 패킷 간의 독립성을 의미, 연결형 서비스는 종속성을 의미)
| 비연결형 서비스 - 비연결형 서비스에서 발신지 프로세스(응용 프로그램)는 메시지를 전송층에서 수신 가능한 크기의 여러 개의 데이터 조각으로 나눈 후 데이터 조각들을 하나씩 전송층으로 전달
- 전송층은 데이터들의 관계를 고려하지 않고 각각의 데이터 조각을 독립적인 하나의 단위로 간주 - 응용층으로부터 하나의 조각이 들어오면, 전송층은 조각을 패킷으로 캡슐화한 후에 전송 - 패킷의 독립성을 보기 위하여 클라이언트 프로세스가 서버 프로세스로 3개의 메시지 조각을 전송하는 경우를 가정 - 이 조각들은 순서에 맞게 비연결형 전송으로 전달되지만, 전송층에서는 패킷 간의 연관성이 없기 때문에 패킷의 순서가 어긋나게 목적지에 도착할 수 있으며, 따라서 서버 프로세스에도 순서에 어긋나서 도착할 수 있음 |

| 연결형 서비스 연결형 서비스에서 클라이언트와 서버는 먼저 그들간에 논리적인 연결을 설정함
- 데이터 교환은 연결이 설정된 이후에 가능하고, 데이터의 교환이 완료된 후에 연결은 해지됨
전송층에서 연결형 서비스는 네트워크층의 연결형 서비스와 다름
- 네트워크층에서 연결형 서비스는 2개의 종단 호스트와 그 사이에 있는 모든 라우터들 간의 협력을 의미함
- 전송층에서 연결형 서비스는 단지 2개의 종단 호스트만 포함하며, 서비스는 종단에서만 이루어짐
비연결형 또는 연결형 서비스 위에서 연결형 프로토콜을 구현할 수 있어야 함을 의미함
- 연결형 프로토콜에서는 흐름 제어, 오류 제어, 그리고 혼잡 제어등이 구현 가능함
|

| 유한 상태 기기(Finite State Machine: FSM) 비연결형과 연결형 프로토콜을 제공하는 전송 계층 프로토콜의 동작을 설명 가능 비연결형 전송층은 단 하나의 상태인 정착 상태만을 가지는 FSM으로 표현 - 한 끝의 기기는 항상 정착 상태에 있으며, 전송층 패킷을 송수신 할 준비가 되어 있음 연결형 전송층에서 FSM은 3개의 상태를 경유해서 설정 상태에 도달하게 되며, 연결을 종료하기 전에 3개의 상태를 경유 - 설정되어 있는 연결이 없는 기기는 닫힌(closed) 상태에 있으며, 로컬 프로세스로부터 연결 설정 요청이 들어오기 전까지는 이 상태를 유지 - 로컬 프로세스로부터 연결 설정 요청을 수신한 기기는 원격 전송층에게 개설 요청 패킷을 전송하고 open-wait-I 상태로 진행 - 상대방으로부터 확인응답을 받은 로컬 FSM은 open-wait II 상태로 진행 - 기기가 이 상태에 있는 동안에는 단방향 연결이 설정 - 그렇지만 양방향 연결이 설정되기 위해서는 상대방으로부터 연결 요청을 수신해야 하며 그전까지는 이 상태에서 대기 - 상대방으로부터 연결 요청을 수신한 기기는 확인응답을 전송하고 정착(established) 상태로 진행 - 둘 다 설정 상태에 있는 경우 양 종단 간에 데이터와 데이터 확인응답이 교환될 수 있음
- 그렇지만 비연결형과 연결형 전송층에서 설정 상태는 데이터 전송 상태를 포함
- 연결을 종료하기 위하여 응용층은 자신의 로컬 전송층에게 닫기(close) 요청 메시지를 전송
- 전송층은 상대방 전송층에게 닫기-요청(close-request) 패킷을 전송하고 close-wait-I 상태로 진행
- 상대방으로부터 확인응답을 수신한 전송층은 close-wait II 상태로 진행한 후 상대방으로부터 닫기-요청 패킷을 수신하기를 대기
- 이 패킷이 도착하면 전송층은 확인응답을 전송하고 닫힌(closed) 상태로 진행 |

전송층 프로토콜
인터넷의 전송 프로토콜에 대해 설명
| UDP - 오류 제어가 응용층 프로세스에 의해 제공되는 응용에서 단순성과 효율성으로 사용되는 신뢰성 없는 비연결형 전송층 프로토콜 TCP - 신뢰성이 중요한 응용에 의해 사용될 수 있는 신뢰성 있는 연결형 프로토콜 SCTP - UDP, TCP의 특성을 결합한 새로운 전송층 프로토콜 |

| 포트 번호 전송층 프로토콜의 역할 중 하나는 프로세스-대-프로세스 통신을 생성하는 것 - 이런 프로토콜은 이것을 수행하기 위해 포트 번호를 사용 - 포트 번호는 전송층에서 종단간 주소를 제공, 마치 네트워크층에서 IP 주소하는 역할과 동일한 다중화와 역다중화를 위해 사용 |

모든 내용은 '데이터 통신과 네트워킹 6판' 책을 공부하여 작성 하였습니다.
'데이터 통신' 카테고리의 다른 글
| [데이터 통신과 네트워킹] TCP 서비스와 특징, 세그먼트, TCP 연결 (1) | 2022.09.26 |
|---|---|
| [데이터 통신과 네트워킹] 사용자 데이터그램 프로토콜(UDP) (0) | 2022.09.23 |
| 데이터 통신과 네트워킹 6판 Chapter 7 기본 연습문제 풀이 (0) | 2022.06.08 |
| 데이터 통신과 네트워킹 6판 Chapter 6 기본 연습문제 풀이 (0) | 2022.06.06 |
| 데이터 통신과 네트워킹 Chapter7 ICMPv6, IPv6로의 변환 (0) | 2022.06.01 |