wa_ter_ve
전송층 본문
참조 교재: Wireshark로 배우는 컴퓨터 네트워크
전송계층(Transport layer)
- 네트워크계층과 응용계층 사이에 위치
- 응용계층에게 서비스를 제공할 의무가 있음
- 네트워크계층으로부터 서비스를 제공받음
#️⃣ 전송층 서비스
🔸 프로세스-대-프로세스 통신
: 전송층 프로토콜은 메시지를 적절한 프로세스에 전달해야 함
- '프로세스'는 전송층 서비스를 사용하는 응용층 개체(실행 중인 프로그램)
🔸 주소 체계: 포트번호
- 프로세스-대-프로세스 통신 방법: 클라이언트&서버
➡ '클라이언트(로컬 호스트에 있는 프로세스)'는 보통 서버(원격 호스트에 있는 프로세스로부터 제공되는 서비스)를 필요로 함
- 클라이언트와 서버 프로세스는 같은 이름
- 오늘날의 운영체제는 다중 사용자와 다중 프로그래밍 환경 제공 (원격 컴퓨터는 여러 개의 서버 프로그램 실행 /
로컬 컴퓨터로 여러 개의 클라이언트 프로그램 수행)
► 필요한 사항 for 프로세스 통신
• 로컬 호스트(local host)
• 로컬 프로세스(local process)
• 원격 호스트(remote host)
• 원격 프로세스(remote process)
🔵 포트 번호의 역할 in 프로세스 통신
- 로컬 호스트와 원격 호스트의 정의 : IP 주소
- 프로세스를 정의하기 위한 두번째 식별자: 포트 번호
- TCP/IP 프로토콜 모음에서 포트 번호 범위: 0 ~ 65,535 사이 정수
- 임시 포트 번호(ephemeral port number)
: 클라이언트 프로그램이 자신을 임의의 포트 번호로 지정 (1,023 이상 권장)
- 잘 알려진 포트 번호(well-known port number)
: 서버 프로그램은 포트 번호 임의로 선택 불가능 ➡ TCP/IP가 서버를 위해 사용하는 범용 포트 번호
- 모든 클라이언트 프로세스는 대응되는 서버 프로세스의 잘 알려진 포트 번호를 앎
🔵 IP 주소-대-포트 번호
: 목적지 IP 주소는 특정 호스트를 정의하기 위해 사용
- 특정 호스트 선택 후, 여러 프로세스 중에서도 하나의 프로세스만 정의
🔵 ICANN 범위
- Internet Corporation for Assigned Names and Numbers
● 잘 알려진 포트 번호(well-known port number): 0 ~ 1,023
→ ICNN에 의해 배정,제어됨
● 등록된 포트 번호(registered port): 1,024 ~ 49,151
→ ICNN 관리 받진 않지만, 중복을 피하기 위해 등록 가능
● 동적 포트 번호(dynamic port): 49,152 ~ 65,535
→ 사설 포트 번호
🔵 소켓 주소(Socket address)
: 각 종단점에서 연결을 만들기 위해 필요한 주소
🔸 캡슐화와 역캡슐화
► 캡슐화(encapsulation): 전송측에서 수행
- 프로세스는 [메시지 & 한 쌍의 소켓 주소 & 필요 정보들]을 전송층으로 전달➡ 전송층은 수신한 데이터에 전송층 헤더를 추가
► 역캡슐화(decapsualtion): 수신측에서 수행
➡ 메시지가 도착하면 전송층은 헤더 제거 후, 응용층 프로세스로 전달
🔸 다중화와 역다중화
► 다중화(multiplexing): 개체가 여러 발신지로부터 정보를 수신하는 경우
→ 송신측(보내기) 전송층 수행
► 역다중화(demultiplexing): 개체가 여러 목적지로 정보를 전달하는 경우
→ 수신측(받기) 전송층 수행
🔸 흐름 제어
: 정보를 생산자로부터 소비자로 전달하는 방법
why? → 정보 생산자와 소비자 간에 생성율과 소비율의 균형 중요
🔵 전달 방법
► 밀기(Pushing): 소비자의 요청 없이도 정보가 생성되어 전송측에서 정보를 전달하는 경우
► 끌기(Pulling): 소비자가 요청한 때에만 생산자가 정보를 전달하는 경우
🔵 전송층에서 흐름 제어
☑ 송신 프로세스, 송신 전송층, 수신 전송층, 수신프로세스
• 송신 프로세스: 생산자
• 송신 전송층: 소비자&생산자
→ 생산자가 전송한 메시지를 패킷으로 캡슐화 후 밀기 방식으로 수신 전송층에 전송
• 수신 전송층: 생산자
→ 메시시지를 역캡슐화 후 끌기 방식으로 응용층에 전송
(전송층은 응용층 프로세스가 메시지를 요청하기 전까지 기다림)
🔵 버퍼
: 버퍼는 송신 측과 수신 측에서 패킷을 저장할 수 있는 일련의 메모리 영역
- 여러 방법 중 일반적으로는 송신 전송층에 1개 수신 전송층에 또 다른 1개 등 ~> 2개 버퍼 이용
- 수신 전송층의 버퍼가 가득 차면, 수신 전송층은 패킷의 전송을 멈추도록 송신 전송층에게 알림
- 버퍼에 빈 공간이 생기면, 수신 전송층은 송신 전송층에게 다시 전송해도 된다고 메시지를 보냄
🔸 오류 제어
: 신뢰성을 제공하기 위해 사용
● 에러 발생으로 훼손된 패킷의 감지 및 폐기
● 손실되거나 제거된 패킷 추적과 재전송
● 중복 수신 패킷 확인 및 폐기
● 손실된 패킷이 도착할 때까지 순서에 어긋나게 들어온 패킷을 버퍼에 저장
🔵 순서 번호(sequence number)
• 어떤 패킷을 재전송해야 하는지
• 어떤 패킷이 중복되었는지
• 어떤 패킷이 순서에 어긋나게 도착했는지
• 패킷에 부여된 일련번호: 0~2m-1, m 비트
🔵 확인응답(ACK)
• 긍정 / 부정
🔸 흐름 제어와 오류 제어의 결합
- 송신측과 수신측에 각각 버퍼 사용
- 버퍼에 번호 부여 → 순서 번호와 확인응답 번호로 사용
🔵 미닫이 창(sliding window)
🔸 혼잡 제어
☑ 네트워크로 전송되는 패킷의 수를 나타내는 로드가 네트워크에서 처리할 수 있는 용량을 초과할 때 혼잡 발생
: 혼잡을 제어하고 로드가 용량보다 작도록 하기 위한 메커니즘 (송신 창 크기를 조절 가능)
혼잡 발생 원인?
→ 네트워크나 인터넷에서의 혼잡은 라우터나 스위치가 패킷을 저장하기 위한 버퍼인 큐를 가지고 있기에 발생
🔵 개방 루프 혼잡 제어(open-loop)
● 재전송 정책
- 정책과 타이머 사용
● 창 정책
- 선택적 반복이 go-back N 윈도우 방식보다 효율적
● 확인응답 정책
- 일일이 응답하기 보다는 타이머 이용, 한 번에 여러 개의 패킷에 대해 확인응답, 응답 메시지 자체도 부하가 됨
🔵 폐 루프 혼잡 제어(closed-loop)
: 혼잡이 발생한 후 완화시키기 위한 방식
- 송신창 크기는 가변적 ← 인터넷 혼잡은 송신창의 크기를 결정하는 하나의 요인
🔸 비연결형과 연결형 서비스
🔵 비연결형 서비스
- 발신지 프로세스(응용 프로그램)는 메시지를 수신 가능한 크기의 여러 개의 데이터 단편으로 나눈 후 각 데이터 단편을 하나씩 전송층으로 전달
➡ 전송층은 데이터들의 관계 고려X 각 데이터 단편을 독립적인 하나의 단위로 간주
➡ 응용층으로부터 조각이 들어오면, 전송층은 단편을 패킷으로 캡슐화 후 전송
- 패킷간의 연관성이 없어 순서에 어긋나게 서버 프로세스에 도착
● 문제 발생 원인
- 두 개의 전송층이 서로 협력하지 않기 때문
(수신 전송층은 첫번째 패킷이 언제 도착할지 또는 모든 패킷이 다 도착했는지에 대해 알 수 X)
- 비연결형 서비스에는 흐름 제어/오류 제어/혼잡 제어가 구현될 필요 X
🔵 연결형 서비스
- 먼저 서버와 클라이언트간 연결 설정 (데이터 교환은 연결 설정 되어야 가능)
→ 데이터 교환 완료 후 연결 해제
- 전송층의 연결형 서비스 ≠ 네트워크층의 연결형 서비스
• 네트워크층의 연결형 서비스: 두 개의 종단 호스트와 그 사이 모든 라우터들 간의 협력을 의미
• 전송층의 연결형 서비스: 두 개의 종단 호스트만을 포함 [서비스는 종단끼리만 이루어짐]
- 연결형 서비스에는 흐름 제어 • 오류 제어 • 혼잡 제어가 구현 가능 O
#️⃣ 전송계층 프로토콜
🔸 단순 프로토콜(Simple protocol)
: 흐름/오류 제어가 없는 비연결형 프로토콜
- 수신측에서는 과도한 패킷의 수신으로 인한 버퍼 발생X
🔸 정지-후-대기 프로토콜 (Stop-and-Wait)
► 흐름제어와 오류제어를 제공하는 연결형 프로토콜
► 송신측과 수신측 모두 크기가 1인 미닫이 창 사용
► 확인 응답이 오기 전까지는 다음 패킷을 전송하지 않음
► 패킷 훼손 확인을 위해 검사합 추가
► 전송 시 타이머 구동, 확인 응답이 오면 타이머 정지
► 패킷이 훼손되거나 손실되면 재전송
🔵 순서 번호(Sequence Number)
: 패킷을 중복 수신하지 않기 위해 사용
- 패킷 헤더 부분에 순서번호 필드 추가
- x번 순서 번호 수신 ➡ x+1번 확인응답 번호 사용 (x+2 필요X)
🔵 확인 응답 번호(ACK-Acknowledgement Number)
: 수신측에서 수신한 패킷의 다음 패킷 순서 번호
- 송신측이 확인응답을 기다리게 함으로써 흐름 제어 기능을 제공
- 훼손된 패킷을 폐기하고 송신측으로 하여금 타이머가 만료되면
확인응답되지 않은 패킷을 재전송하여 오류 제어 기능 제공
- 이 프로토콜에서 모든 연산은 modulo-2 방식 ( 0, 1, 0, 1, …)
{ 정지-후-대기 프로토콜의 예 }
① 패킷 0이 전송 → 확인응답
② 패킷 1은 손실 → 타임-아웃 후에 재전송
③ 재전송된 패킷1 확인응답 O, 타이머 중단
④ 패킷 0은 전송되고 확인응답 되었으나, ACK(확인응답 번호) 손실
⑤ 송신측은 패킷 or ACK가 손실되었는지 알 수 X
→ 타임-아웃 후에 패킷 0을 재전송
→ 패킷 확인응답 O
🔵 효율
- '정지-후-대기 프로토콜'은 채널의 대역폭(고속)이 두껍고 왕복 지연시간이 긴 경우에 상당히 비효율적
- 대역폭-지연 곱(Bandwidth-Delay product)
: 두 가지를 곱한 것 (비트로 표현된 파이프 용량)
➡ 수신 측의 확인을 기다리면서 송신측에서 파이프를 통해 전송할 수 있는 비트 수
[예제 12.5]
Q. 회선의 대역폭이 1 Mbps이고, 1 비트가 왕복하는 데 20 msec가 걸린다. 대역폭-지연 곱은 얼마인가?
➡ 대역폭 지연 곱은 (1 × 106) × (20 × 10–3) = 20,000 비트
Q. 시스템의 데이터 패킷이 1,000 비트의 길이이면, 링크의 이용율은 얼마인가?
• 시스템은 송신측에서 수신측으로 데이터가 전송되고 그 반대의 방향으로 확인 응답이 돌아오는데 걸리는 시간 동안 20,000 비트를 전송 가능
• but, 이 시간 동안 시스템은 1,000비트만 전송 가능
➡ 회선의 이용율이 1,000/20,000 또는 5%라는 의미
• 고속 또는 긴 지연을 갖는 회선에서 정지 후 대기 프로토콜을 사용하는 것은 링크의 용량을 낭비하는 것
[예제 12.6]
Q. 예제 12.5에서 확인응답에 대한 고려하지 않고 최대 15개의 패킷을 전송할 수 있는 프로토콜을 이용하면 회선의 이용률은 얼마인가?
• 대역폭 지연 곱은 여전히 20,000 비트이다. 시스템은 왕복 시간동 안 15개의 패킷인 15,000 비트를 전송 가능
➡ 회선의 이용율이 15,000/20,000 또는 75%라는 의미
• 물론 훼손된 패킷이 있는 경우에는 패킷의 재전송으로 인하여 이용 률은 상당히 낮아질 것
🔸 N-프레임-후퇴 프로토콜 (Go-Back-N)
- 전송 효율을 높이기 위해, 송신측은 확인응답을 기다리는 동안 여러 개의 패킷을 전송 가능
🔵 순서 번호
- modulo 2ᵐ
- m은 순서 번호 필드의 비트 수
🔵 확인응답 번호
- 누적 값
- 수신되기를 기대하는 다음 패킷의 순서 번호를 의미
🔵 송신창
: 전송 중이거나 전송될 데이터 패킷의 순서 번호를 포함하는 가상의 상자 (추상적 개념)
- 세 개의 변수가 창의 크기와 위치를 정의
▣ Sᶠ [송신창, 첫번째 미해결 패킷의 순서번호]
▣ Sₙ [송신창, 전송할 다음 패킷의 순서번호]
▣ Sˢⁱᶻᵉ.[고정값을 가지는 송신창의 크기]
- 창의 최대 크기: 2ᵐ− 1
- 송신창 구성하는 순서 번호 4개의 영역으로 나뉨
1. 창 바깥 왼쪽 부분
: 확인 응답된 패킷에 속하는 순서번호
송신측에서는 이 패킷의 전송이 완료된 것으로 간주 (사본 보관X)
2. 창 내부 왼쪽 부분
: 이미 전송 되었지만 아직 응답확인 되지 않은 패킷의 순서번호
송신측은 패킷들이 수신측에서 수신됐는지 아닌지 확인 기다림 ⬅ '미해결 패킷(outstanding)'
3. 창 내부 오른쪽 부분
: 전송 가능하나, 해당 데이터가 아직 응용층으로부터 수신되지 못한 패킷의 순서번호
4. 창 바깥 오른쪽 부분
: 프로세스로부터 데이터를 수신하더라도 창 이동 전에는 패킷 전송 불가능한 순서번호
- ackNo가 Sᶠ ~ Sₙ 사이의 값을 갖는 오류 없는 ACK(확인응답 번호)를 수신하는 송신창은 하나 이상의 틈새를 이동
🔵 수신창
: 하나의 변수 R ₙ 을 갖는 크기 1인 가상 상자를 나타내는 추상적인 개념
- 'N-프레임-후퇴' 프로토콜에서 수신창의 크기는 항상 1
- 수신측은 항상 특정한 패킷을 기다림
- 창이 올바른 패킷이 도착하는 경우에 이동, 한 번에 한 틈새만 이동 가능
☑ Rₙ = (Rₙ +1) modulo 2ᵐ
- 순서에 어긋나게 도착한 패킷은 폐기&재전송
- 창의 바깥 번호들을 가지면 폐기
☞ 창 바깥의 왼쪽 부분 번호들은 이미 수신했거나 확인응답 된 패킷
☞ 창 바깥의 오른쪽 부분 번호들은 수신 불가능한 패킷
🔵 타이머
- 미해결 패킷들을 하나의 그룹으로 처리
- 전송된 각각의 패킷에 대한 타이머(timer)가 있지만, 하나의 타이머만 사용한다고 가정
→ why? 첫 번째 미해결 패킷을 위한 타이머는 항상 먼저 만료되기 때문
- 이 타이머가 만료되면 모든 미해결 패킷은 재전송됨
🔵 패킷 재전송
- 타이머가 만료되면, 송신 측은 미해결된 모든 패킷들을 재전송
✓ 송신 측에서 이미 패킷 6(Sn=7)까지를 전송했지만, 타이머가 만료되었다고 가정
• 만일 Sf =3이면, 패킷 3, 패킷 4, 패킷 5, 패킷 6의 패킷이 아직까지 확인응답되지 않았다는 것을 의미
• 타이머가 만료되면 송신 측은 패킷 3부터 패킷 6까지 네 개의 패킷을 재전송
» 타임-아웃이 발생하면 기기는 N 위치만큼 후퇴하며 모든 패킷을 재전송
🔵 송신창 크기
- 송신 창의 크기가 2ᵐ 보다 작아야 함
✓ m=2 라고 하면, 최대 창의 크기는 2ᵐ −1 = 3
{ ⬇ N-프레임-후퇴의 예 }
✓ 포워드(forward) 채널은 신뢰성이 있지만 백워드(backward) 채널은 그렇지 않다고 가정
- 즉, 데이터 패킷은 손실되지 않지만, ACK의 일부는 지연되거나 손실
{ ⬇ 패킷이 손실된 경우 }
- 패킷 0, 1, 2, 3 전송 but, 패킷 1 손실
- 수신측에서는 패킷 2와 3을 수신했으나, 수신된 패킷이 모두 순서에 어긋나게 들어왔기 때문에
(수신측은 패킷 1의 수신을 기대) 수신측은 수신한 패킷을 모두 폐기
- 수신측에서 패킷 2와 3을 수신하면, 수신측은 자신이 패킷 1의 수신을 기다리고 있다는 것을 알리기 위하여 ACK 1을 전송
but, 이러한 ACK는 송신측에서는 쓸모 X
🔸 선택적 반복 프로토콜 (SR: Selective-Repeat)
- 순서에 어긋난 패킷만 재전송
- 네트워크 프로토콜에서 맣은 패킷이 손실되는 경우에 비효율적
- 하나의 패킷 손실될 때마다 송신측은 모든 미해결 패킷 재전송 → 복잡도up
🔵 창
- 송신창, 수신창의 크기가 동일 (최대 2ᵐ⁻¹ )
- 수신창의 크기만큼 많은 패킷이 순서 어긋나게 도착하면, 이 패킷들은 버퍼에 저장 후
→ 순서에 맞는 패킷만 응용층으로 전달
- 신뢰성 있는 프로토콜에서 수신측은 순서에 어긋난 패킷을 절대 응용층으로 전달하면 안됨
- 시간이 느려지고, 할 일이 많아짐
- 창 내부 음영으로 표시된 틈새들은 순서에 어긋나게 도착해서, 송신측으로부터 먼저 전송된 패킷이 도착하길 기다림
🔵 타이머
- 미해결 패킷들을 독립적으로 처리
- 선택적 반복을 구현하는 대부분의 전송층 프로토콜은 하나의 단일 타이머만 사용
🔵 확인응답
- 오류 없이 수신된 패킷의 순서 번호
🔵 창의 크기
- 2ᵐ의 반
• 창의 크기가 2, 모든 확인응답이 손실 → 패킷 0에 대한 타이머 만료 → 패킷 0 재전송
• but, 수신측 창은 0이 아닌 2를 수신하길 기대
• 중복 수신된 패킷 폐기
• 창의 크기가 3, 모든 확인응답 손실 → 송신측이 패킷 0의 복사본을 전송
• but, 수신측 창은 0의 수신을 기대
• 수신측은 패킷 0을 다음 사이클에 속하는 패킷으로 간주하고 받아들임 ➡ 오류
🔸 양방향 프로토콜: 피기백킹(Piggybacking)
: 양방향 통신의 효율을 향상시키 위해 사용
①단순 프로토콜, ②정지-대기 프로토콜, ③N-프레임-후퇴 프로토콜, ④선택적 반복 프로토콜
➡ 4가지는 단방향 프로토콜
'공부 > 컴퓨터네트워크' 카테고리의 다른 글
사용자 데이터그램 프로토콜(UDP) (0) | 2024.08.23 |
---|---|
인터넷 프로토콜(IP) - ④ 검사합 & IP패키지 (0) | 2024.06.08 |
인터넷 프로토콜(IP) - ③ 옵션 (0) | 2024.06.04 |
인터넷 프로토콜(IP) - ② 단편화 (0) | 2024.06.03 |
인터넷 프로토콜(IP) - ① 데이터그램 (0) | 2024.06.02 |