9장. TCP의 이해
(1) 전송 계층의 기능
강의 목표
- 전송 계층 프로토콜이 제공하는 기능을 이해한다.
- 전송 계층 프로토콜을 설계하는 과정에서 고려할 사항을 이해한다.
전송 계층의 기능
- 데이터 링크 계층과 유사
-
오류 제어, 흐름 제어, 멀티플렉싱, 데이터 순서화 기능 등 제공
- 멀티플렉싱: 단일 링크를 통해 여러 개의 신호를 동시에 전송할 수 있도록 해주는 기술
-
데이터 링크 계층과 차이점
- 데이터 링크 계층은 물리적으로 1:1 연결된 호스트 사이의 전송. 직접 묶여있는 호스트-노드 또는 노드-노드 사이에서 오류 제어, 흐름 제어
- 전송 계층은 논리적으로 1:1 연결된 송신과 수신 호스트 사이의 전송. End to End(종단간) 호스트로, 양 끝에 있는 호스트 사이에서 오류 제어, 흐름 제어
-
흐름 제어
- 흐름 제어란, 수신단에서 소화할 수 있는 속도로 송신단에서 데이터를 보내는 것
- 수신자가 송신자의 전송 속도보다 느리게 수신 -> 버퍼 용량 초과로 데이터 분실 -> 타임아웃 기능을 통한 재전송 유발
- 전송 계층에서 흐름 제어는 데이터 링크 계층과 유사한 점이 많지만 보다 복잡하고, 데이터 링크 계층과는 다른 관리 방법 필요
-
수신자가 슬라이딩 윈도우 프로토콜을 사용하여 패킷의 흐름을 제어
- TCP와 같이 데이터의 전달을 보증하는 프로토콜에서는 패킷 하나하나가 정상적으로 전달되었음을 알리는 확인 신호(ACK)를 받아야 하며, 만약 패킷이 중도에 잘못되었거나 분실되어 응답을 받지 못할 경우, 해당 패킷을 재전송 해야한다. 슬라이딩 윈도우는 일단 ‘윈도우(메모리 버퍼의 일정 영역)‘에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달을 확인하는대로 이 윈도우를 옆으로 옮김(slide)으로써 그 다음 패킷을 전송하는 방식이다.
- 전송 성공 응답을 받기 전까지 다음 패킷을 전송하지 않는 stop-and-wait 방식보다 효율적
-
오류 제어
- 데이터 변형, 데이터 분실 시 재전송 기능으로 복구하는 것
- 수신자의 명시적 요구(ACK) 또는 송신자의 판단(타임아웃)으로 진행
- 전송 계층에서 오류는 선로에서 발생하는 매체 오류보다는 각 계층의 소프트웨어 동작 과정 중에 분실하는 경우가 대부분
- 네트워크 계층의 기능적 한계 또는 잘못된 위치/경로 정보에 의해 발생
-
분할과 병합
- 상위 계층에서 요구한 데이터 크기가 전송 계층에서 처리할 수 있는 크기보다 큰 경우, 일정한 크기로 잘라서(분할) 다시 합침(병합)
-
서비스 프리미티브
- OSI 7계층 및 TCP/IP의 상위 계층과 하위 계층의 서비스 요구, 지시, 응답, 확인 통한 계층 간 통신 기능을 의미
- 네트워크 계층은 대부분 비연결형 서비스 프리미티브가 정의
- 전송 계층은 비연결형 프리미티브와 신뢰성이 향상된 연결형 서비스 모두 제공
전송 계층 설계 시 고려할 사항
-
주소 표현
-
구조적 표현
- 여러 개의 계층적 필드로 구성
- 각 필드는 상하 계층 관계를 나타냄
- 예) 도메인, 집 주소
-
비구조적 표현
- 값만 해석해서는 논리적 위치 파악 불가
- 예) 초등학교 반 번호, 일련번호
-
IP 주소
- 네트워크와 호스트의 계층적인 정보 제공
- 위치 정보와 관련해서는 비구조적 특징 (왜? IP 주소를 바탕으로 위치 파악 불가능)
- 도메인 주소는 구조적 특징을 가짐
-
-
멀티플렉싱
-
상방향
- 다수의 전송 계층 연결을 하부의 네트워크 계층에서 하나의 연결로 지원
- 네트워크 계층의 가상회선 연결 개수를 줄일 수 있음
-
하방향
- 하나의 전송 연결에 대해 네트워크 계층에서 다수의 가상회선을 지원
- 멀티미디어 전송에 유리: 음성, 영상, 자막 등을 별도의 가상 회선으로 처리
-
-
연결 설정
-
개념적으로 양자 합의 필요
- Conn_Req: 한쪽의 연결 설정 요구
- Conn_Ack: 상대방의 연결 수락 응답
-
2단계 연결 설정
- 최소한의 단계
- 수신단에서 거부 가능
- 프리미티브 전달 과정에서의 분실, 변형, 복사 가능성 있으므로 이런 문제를 고려해야함
-
3단계 연결 설정
- 실제 통신 환경의 오류 발생 가능성을 고려한 형태
- DataReq는 ConnAck에 대한 응답 기능도 수행
- DataReq로 보낼 데이터가 없는 경우, ConnAck(y, x)에 대한 응답을 따로 보내야 함
-
-
연결 해제
-
일방적 연결 해제
- 한쪽의 연결 해제 요구(Disc_Req)에 의해 연결 해제
- 상대방이 송신할 데이터가 남아있어도 연결이 해제되므로, 전송 진행 중인 데이터 처리를 완료하지 못함
-
점진적 연결 해제
- 논리적으로 2개의 단방향 연결 지원
- 양쪽 합의 하에 연결 해제
- 양쪽 모두 Disc_Req를 전송해야 해제되므로, 전송 진행 중인 데이터 처리는 계속됨
-