Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

wa_ter_ve

전송층 본문

공부/컴퓨터네트워크

전송층

수win 2024. 8. 23. 00:20

참조 교재: 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가지는 단방향 프로토콜