별의 공부 블로그 🧑🏻‍💻
728x90
728x170

22. 전송 계층(Transport Layer)

1. 전송 계층의 개요

  • 전송 계층
    • 송신자와 수신자 간에 논리적 연결(Logical Communication) 을 수행하는 것
    • TCP 프로토콜과 UDP 프로토콜이 존재함.
      • TCP 프로토콜
        • 연결 지향(Connection Oriented) 방식 사용
        • 신뢰성 있는 전송을 수행
      • UDP 프로토콜
        • 비연결성(Connection Less) 방식 사용
        • 신뢰성이 없는 전송을 수행
    • 수신 측에 전달되는 데이터의 오류가 없고, 데이터의 순서가 수신 측에 그대로 보존되도록 보장하는 연결 지향 서비스(Connection Oriented Service)의 역할을 하는 종단간(End-to-End) 서비스 계층

 

2. 세그먼트(Segment)

  • 전송 계층에서 TCP 혹은 UDP를 사용할 때, 해당 헤더(Header)를 메시지에 붙이는 것
Message TCP Header
Message UDP Header
  • TCP 혹은 UDP Header를 붙이면 Segment라고 함.

 

3. 세그먼트의 TCP와 UDP

  • TCP Header
    • UDP에 비해 크기가 큼.
  • TCP
    • 신뢰성 있는 데이터 전송을 위해 가상의 연결을 수행함.
    • 가상의 연결 이후에 데이터를 송수신함.
      • 송신자가 메시지를 전송하면 수신자는 ACK 를 되돌려서 수신 여부를 확인해 줌.
      • 만약 수신자가 동일한 ACK 번호를 반복적으로 전송할 경우
        • 어떤 이유로든 데이터를 받지 못하는 것을 의미함.
      • 반복적인 ACK가 되돌아오면 TCP는 에러 제어 기법을 통해 재전송을 수행함.
        • 네트워크 전송망을 효율적으로 사용함.
        • 에러 제어 기법의 종류
          • GO-BACK-N 방법
            • 되돌아온 ACK 번호 이후의 모든 것을 전부 재전송하는 방법
          • 혼잡 제어(Congestion Control)
            • 동일한 ACK 번호가 송신자에게 계속 돌아오면 송신자는 전송 속도를 낮춤.
        • 수신받지 못하는 상황에서 계속적으로 빠르게 전송한다면 네트워크 부하만 유발될 것임.
    • Sequence 번호를 가지고 메시지의 순서를 파악할 수 있게 해 줌.
    • 송신자의 메시지가 꼭 순섣대로 도착하지 않음.
      • 비동기 방식으로 데이터를 보내면서 경로 또한 다른 경로로 보내질 수 있기 때문
  • Check Sum
    • TCP와 UDP에 모두 존재하는 방법
    • 송신 중에 메시지의 변조를 파악 하기 위해서 송신자와 수신자 간에 에러를 체크하기 위한 방법
      • 패리티 비트 가 같음.
  • Receive Window
    • 수신자의 윈도우 크기
    • 메모리 버퍼와 관련이 있음.
      • 목적 : 전송 효율 관리
      • 수신자의 버퍼가 비어있으면 송신자는 해당 버퍼의 크기만큼의 데이터를 한꺼번에 전송함.
      • 수신자의 버퍼가 1개 비어 있으면, 송신자가 1개만 보냄.

 

4. TCP

(1) TCP(Transmission Control Protocol) 개요

  • 네트워크 계층 상위에서 수행되는 전송 계층의 프로토콜
  • 클라이언트와 서버 간의 연결 지향, 신뢰성 있는 데이터 전송, 에러 제어, 흐름 제어 등의 기능을 수행하는 프로토콜
  • 메시지를 송수신하기 전에 연결 지향으로 먼저 연결을 확인함.
    • 연결이 확립되면 메시지를 송수신하는 방식으로 기동됨.
  • 하지만, 연결을 지향할 뿐, 물리적으로 연결된 것은 아님.
    • 주기적으로 메시지를 송수신해서 송수신 가능 여부를 확인함.
      • 이러한 송수신 가능 여부를 확인하는 것은 TCP의 역할이 아님.
      • TCP/IP 프로토콜 군의 ICMP 프로토콜 이 이 역할을 담당함.

 

(2) TCP 상태 전이

  • TCP 프로토콜에서 가장 중요한 요소
  • TCP의 최초 연결 신청부터, 연결, 종료까지의 상태 변화를 의미함.
  • TCP의 상태 정보를 확인할 수 있는 가장 쉬운 방법
    • 윈도우 CMD에서 netstat 명령 실행
  • TCP 상태 전이도

이미지 출처 : https://m.blog.naver.com/ryangjm/220812871577

 

(3) TCP 상태 전이 과정

  • 클라이언트는 먼저 서버에 연결 요청 메시지인 SYN 신호를 보내고, SYN-SENT 상태가 됨.
  • 서버는 처음 기동이되면 클라이언트의 연결을 받기 위해서 LISTEN 상태에서 클라이언트이 연결을 대기함.
  • 클라이언트로부터 SYN 메시지가 수신되면, 서버는 클라이언트에게 SYN, ACK 를 전송하고 SYN-RECEIVED 상태로 바뀜.
  • 그리고 클라이언트는 _ACK_를 서버에 전송하고 클라이언트와 서버는 **_ESTABLISHED_** 상태인 연결 확립 상태가 됨.

TCP를 사용하는 클라이언트 프로그램과 서버 프로그램의 상태 전이

 

(4) TCP 상태 값 확인

  • netstat 명령어를 사용해서 TCP 연결 상태를 확인해 볼 수 있음.
  • -p 옵션을 지정하면 모니터링하고 싶은 프로토콜을 지정할 수 있음.
PS > netstat -p tcp

활성 연결

  프로토콜  로컬 주소           외부 주소              상태
  TCP    127.0.0.1:*****        DESKTOP-38RRRRR:*****  ESTABLISHED
  TCP    127.0.0.1:*****        DESKTOP-38RRRRR:*****  ESTABLISHED
  TCP    127.0.0.1:*****        DESKTOP-38RRRRR:*****  ESTABLISHED
  TCP    127.0.0.1:*****        DESKTOP-38RRRRR:*****  ESTABLISHED
....

 

(5) TCP 프로토콜의 Header 구조

TCP Header

  • 신뢰성 있는 전송, 에러 제어
  • 순서 제어(Sequence Control)
  • 완전 이중 방식(Full Duplex Data)
  • 연결 지향(Connection Oriented)
  • 3-Way Handshaking
  • 흐름 제어(Flow Control)

 

TCP의 주요 기능

  • 신뢰성 있는 전송
    • 수신자는 데이터를 송신 받고 ACK Number 를 송신자에게 전송함.
    • 송신자가 ACK Number 가 수신되지 않으면 재전송을 실행하여 신뢰성 있는 데이터 송수신을 진행함.
  • 순서 제어
    • 송신자의 메시지 순서를 맞추기 위해서 송신자는 메시지 전송 시에 Sequence Number를 같이 보냄.
    • 그러면 수신자는 메시지의 순서가 맞지 않게 도착해도 Sequence Number 를 통해서 정렬을 수행할 수 있음.
  • 완전 이중(Full Duplex)
    • 전화기처럼 송신자는 송신, 수신자는 수신을 동시에 할 수 있음.
  • 흐름 제어(Flow Control)
    • 수신자가 메시지를 제대로 받지 못하면, 송신자는 전송 속도를 늦추어 네트워크 효율성을 제어함.
  • 혼잡 제어(Congestion Control)
    • 수신자의 메모리 버퍼 정보 즉, Window Size를 송신자가 수신 받아서 수신자의 버퍼 상태를 보고 전송 속도를 조절함.

 

(6) TCP 헤더 세부 내용

1) TCP Header 구조 세부 내용 (1)

항목 내용
근원지 포트(Source Port) 가상 선로의 송신 측 포트(End Point of Sender)
목적지 포트(Destination Port) 가상 선로의 수신 측 포트(End Point of Receiver)
일련 번호(Sequence Number) 송신자가 전송하는 데이터의 일련 번호
전송 확인(Piggyback Acknowledgement) 수신자가 응답 받은 데이터의 수
  • 일련 번호와 전송 확인은 데이터 흐름 제어(Flow Control)에 사용되는 32비트 정수
  • 슬라이딩 윈도우 프로토콜
    • 송신자가 일련 번호와 함께 데이터를 전송함.
    • 수신자는 받은 데이터의 수를 의미하는 전송 확인 번호를 응답함으로써 안정적인 데이터 전송을 보장함.

 

2) TCP Header 구조 세부 내용 (2)

항목 내용
TCP 헤더 길이(TCP Header Length) - TCP 헤더에 몇개의 32비트 워드가 포함되어 있는가를 나타내는 필드
- 옵션 필드가 가변 길이를 갖기 때문에 필요함.
- 이 값을 이용하여 실제 데이터의 시작점을 게산
URG(Urgent) 긴급 지점(Urgent Pointer)이 사용될 때 1로 설정
ACK(Acknowledgement) 전송 확인(Piggyback Acknowledgement)이 필요할 때 설정
EOM(End of Message) 마지막 메시지임을 가리킴.
재설정(RST, Reset) 연결의 재설정(Reset a Connection)
동기화(SYN, Synchronization) 연결 설정 요구(Establish Connection)
FIN(Finish) - 연결 해제에 사용됨.
- 송신 측에서 더 이상의 전송할 데이터가 없음을 의미
윈도우 크기(Window Size) 수신 측에서 수신할 수 있는 최대 바이트(Byte) 수
체크썸(Checksum) - 전송 데이터에 대한 완벽한 신뢰성을 위한 것
- 모든 데이터의 합에 대한 '1'의 보수로 계산
급송 지점(Urgent Point) - 다음에 이어지는 데이터가 급송되어야 함을 의미함.
- 인터럽트 메시지 대신 사용
옵션(Options) 전송 셋업 과정의 버퍼 크기에 대한 통신 등 기타 목적에 활용
  • 송신 측
    • 전송한 데이터에 대한 수신 측의 전송 확인(ACK)이 도착하기 전에도 윈도우 크기만큼의 데이터를 연속적으로 보낼 수 있음.
  • 수신 측
    • 자신의 버퍼 크기에 따라 이 값을 조절하며, 윈도우 크기가 0이 되면 송신자는 전송을 잠시 중단함.

 

(7) 흐름 제어(Flow Control)

  • 송수신측 사이의 전송 패킷의 양과 속도를 조절하여 네트워크를 효율적으로 사용함.
  • 송수신측 사이의 처리 속도와 버퍼 크기 차이에 의해 생길 수 있는 수신측의 오버 플로우를 방지함.

 

(8) 슬라이딩 윈도우(Sliding Window)

1) 슬라이딩 윈도우 개요

  • 슬라이딩 윈도우(Sliding Window)
    • 흐름 제어를 수행하는 방법
    • 수신자가 수신 받을 만큼 데이터를 전달한느 방법
  • . TCP 호스트 간의 효율적인 데이터 전송을 위해서 호스트 간에 송수신 혹은 수신할 수 있는 Size 정보를 제공함.
    • 송신 측의 윈도우와 수신 측의 윈도우 제공
  • Stop-and-Wait의 단점을 보완한 방식
    • 수신 측의 확인 신호를 받지 않더라도 미리 정해진 프레임의 수만큼 연속적으로 전송함.
  • TCP가 사용하는 방법

 

2) 슬라이딩 윈도우 동작 방법

  • 수신측은 설정한 윈도우 크기만큼 송신측에서 확인 응답(Ack)이 없어도 전송할 수 있게 하여 동적으로 패킷의 흐름을 제어하는 방식
  • 일정한 수의 패킷을 전송하고, 응답이 확인되면 윈도우를 이동하여 그 다음 패킷을 전송함.

 

3) 슬라이딩 윈도우 처리 단계

  • Step 1 : 송신자와 수신자의 윈도우 크기를 맞춤.
    • Window Size = 3
    • 송신자는 1, 2, 3을 전송함
1 2 3 4 5
  • Step 2 : 응답대기 및 전송
    • 송신 후, 수신자로부터 ACK 1, 2에 대한 응답이 오면 다음 윈도우로 이동하여 전송함.
1 2 3 4 5

 

4) 슬라이딩 윈도우의 장점

  • 송신자와 수신자 간의 네트워크 전송 효율을 극대화하기 위해서 수신자의 버퍼 크기를 확인하고, 최대한으로 전송 효율을 극대화 함.
  • 수신자의 ACK의 경우, 매번 ACK를 받을 수도 있지만, ACK 신호도 묶어서 처리하여 불필요한 네트워크 부하를 최소화 함.

 

(9) 혼잡 제어(Congestion Control)

1) 혼잡 제어의 개요

  • 라우터가 패킷을 처리할 수 있는 속도보다 많은 패킷을 수신하는 경우
    • 라우터는 패킷을 손실하게 되고, 송신측에서는 패킷을 재전송하게 됨.
    • 이러한 과정의 연속으로 데이터의 손실이나 지연이 발생함.
  • 혼잡 제어는 송신 단말의 전송률을 직접 제어하여 혼잡으로 인해 손실된 데이터를 최소화 함.

 

2) TCP Slow Start

  • Sender에서 패킷을 정송하는 비율과 Receiver에서 수신된 ACK를 통해 Congestion Window(Cwnd)를 지수의 크기로 증가시키는 기법
  • 혼잡 제어를 하는 방법 중 하나
  • TCP가 시작될 때 전송 속도를 초기값부터 지속적으로 올리는 방법
    • 1 Mbps의 속도로 데이터 전송을 시작하고, 조금씩 임계값까지 속도를 올림.
    • 그러다가 수신자에게 Duplication ACK 값이 오면, 데이터를 제대로 수신 받지 못함을 판단하고 송신 속도를 초기 값으로 낮춤.
    • 또한 Duplication ACK 값이 송신자에게 오지 않아도 전송속도가 임계값에 도착하면 전송 속도를 임계값의 50%로 낮추고 다시 전송 속도를 올림.

 

3) TCP Slow Start 동작 방식

동작 방식 내용
- 처음 연결이 설정될 때, cwnd값은 1로 초기화
- 송신 단말이 하나의 세그먼트 전송 후, 이 세그먼트에 대한 ACK를 수신하면, 송신 단말은 2개의 세그먼트 전송 가능
- 이 2개의 세그먼트에 대한 ACK가 수신되면 다시 4개의 세그먼트를 전송할 수 있음.
- 다음에는 8개, 16개, 지수적으로 세그먼트 증가
- cwnd는 계속적으로 증가하다가 임계값에 이르게 되면 Congestion Avoidance로 동작

 

4) Congestion Avoidance

  • 일정 시간 동안 ACK가 수신되지 않거나, 일정 수의 Duplicate ACK가 수신되면 Sender는 Packet Loss를 알게되고, Congestion Avoidance 상태가 됨.
  • 각 연결마다 Congestion Window와 Slow Start Threshold 두 개의 변수를 유지함.
  • Congestion Avoidance 동작 방식
동작 방식 내용
- Slow Start 상태에서 cwnd의 값이 계속 증가하여 임계값에 도달하면 Congestion Avoidance 상태로 들어가게 됨.
- Congestion Avoidance 상태에서는 매번 ACK가 수신될 때마다 cwnd를 1/cwnd 만큼 증가
- Slow Start에서의 cwnd의 증가가 지수적인데 반해 Congestion Avoidance 상태에서는 선형적인 증가
  • TCP 혼합 제어 알고리즘
Fast Retransmit Fast Recovery
Retransmit Threshold 이상 연속된 Duplicate ACK를 수신하는 경우, TCP는 해당 세그먼트를 즉시 다시 전송함. Fast Retransmit한 이후 새로 Slow Start를 통해서 설정된 연결의 안정 상태에 도달할 필요 없이 Congestion Avoidance 상태에서 전송할 수 있도록 하는 것

 

5. UDP(User Datagram Protocol)

(1) UDP 개요

  • UDP는 데이터를 빠르게 전송할 용도로 사용함.
  • TCP에 비해 기능은 없지만, 데이터를 빠르게 송수신할 수 있는 장점이 있음.
  • 하지만 재전송 기능이 없어서 네트워크에서 패킷이 손실될 수 있음.
    • 데이터가 전송되는 것을 보장하지 않는 단점이 있음.
  • 비연결성, 비신뢰성의 특성으로 패킷을 빠르게 전달할 수 있는 프로토콜
  • 송수신의 여부에 대한 책임을 Application이 가짐.

(2) UDP 특징

  • 비신뢰성(Unreliable)
    • 패킷을 목적지에 성공적으로 전송한다는 것을 보장하지 않음.
  • 비접속형(Connectionless)
    • 전달되는 패킷에 대한 상태 정보 유지를 하지 않음.
  • 간단한 Header 구조
    • TCP에 비해서 간단한 헤더 구조로 인하여 처리가 단순함.
  • 빠른 전송
    • TCP에 비해 전송 속도가 빠름.

 

(3) UDP 프로토콜의 Header 구조

Header 내용
- 가상 선로(Virtual Circuit)의 개념이 없는 비연결성
- 블록 단위로 데이터 전송
- 블록 재전송 및 흐름 제어 등이 없음. (데이터의 신뢰성이 없음.)
- 슬라이딩 윈도우 등의 복잡한 기술을 사용하지 않음.
- UDP의 각 사용자는 16비트의 포트 번호를 할당 받음.

 

  • 실제 UDP 헤더를 보면, 송신자의 포트 번호, 수신자의 포트 번호 길이(Length), 무결성 검사를 위한 Check Sum 필드 만이 존재하는 것을 확인할 수 있음.

내용 출처 : 이기적 네트워크관리사 1·2급 필기 (임호진, 황성하 공저, 영진닷컴)

728x90
그리드형(광고전용)

'Certificate > Network Manager' 카테고리의 다른 글

26. HTTP  (0) 2021.04.25
25. Telnet과 SSH  (0) 2021.04.25
24. 네트워크 접근(Network Access) 계층  (0) 2021.04.24
23. 인터넷 계층  (0) 2021.04.23
21. 애플리케이션 계층  (0) 2021.04.19
20. TCP/IP 프로토콜  (0) 2021.04.18
19. 에러 제어(Error Control)  (0) 2021.04.18
18. OSI 7 계층  (0) 2021.02.25
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖