본문 바로가기
CS/정보통신망

TCP/IP 전송 계층, UDP, TCP, 비연결형 서비스, 신뢰성, 3-way handshaking

by Renechoi 2024. 5. 17.

1. 전송 계층 

 

1) 전송 계층 개요 

전송 계층은 네트워크 계층에서 데이터를 전송할 때의 신뢰성을 보장할 수 없다.

 

하지만 전송 계층은 수신자가 신뢰할 수 있는 데이터를 전송하는 데 필요한 계층으로, 오류를 점검하여 데이터의 오류가 발생하면 재전송을 요청함으로써 신뢰성을 제공한다. 즉, 네트워크 계층에서는 데이터를 전송하지만, 전송 계층에서는 데이터가 제대로 전송되었는지 확인한다. 

 

또한 전송 계층은 수신자가 어떤 애플리케이션인지를 식별하는 기능을 가진다. 오류를 점검하여 오류 발생시 재전송을 요청함으로써 신뢰성을 제공할 수 있다. 

 



 

 

 

 

 

 

 

 

2) 전송 계층 프로토콜 

전송 계층은 UDP(User Datagram Protocol), TCP(Transmission Control Protocol)와 관련된 계층으로, 오류복구와 흐름제어(flow control)를 통해 두 시스템 간에 신뢰성 있는 데이터를 전송한다. 현재 인터넷을 사용하는 데 가장 많이 사용하는 두 프로토콜이 전송 계층의 대표 프로토콜이다.
- UDP는 비연결형 통신 프로토콜로, 간단한 메시지 전송에 유리하다.
- TCP는 연결형 통신 프로토콜로, 데이터의 정확하고 신뢰성 있는 전송을 보장한다.

 

 

 

3) 전송 계층의 통신 방식 

전송 계층은 데이터를 수신지까지 문제없이(신뢰성) 빠르고 정확하게 효율적으로 전송해야 한다. 신뢰할 수 있고 데이터를 정확하게 전달하는 통신 방식은 연결형 통신이다. 반면 효율적으로 데이터를 전송하는 통신 방식은 비연결형 통신이다. 연결형 통신은 서로 확인하고 요청과 응답을 주고받으면서 통신하고, 비연결형 통신은 일방적으로 데이터를 전송한다. 비연결형 통신에는 UDP 프로토콜이 사용되고, 연결형 통신에는 TCP 프로토콜이 사용된다.

 

연결형 VS 비연결형 

 

 

 

2. UDP 

 

UDP는 TCP/IP 응용 계층과 IP 계층 사이에 있으며, 비연결성과 비신뢰적 특징을 갖는 전송 계층의 프로토콜이다. 따라서 기본적인 IP 데이터 전달 서비스에 프로세스 간 통신이 추가된 형태로 볼 수 있다. 

 

1) UDP 비연결형 서비스 

 

UDP 정의

- User Datagram Protocol:
  - 전송 계층 프로토콜로 프로세스 간 통신을 담당
  - 비연결성과 비신뢰성의 특징을 가짐
  - 기본적인 IP 데이터 전달 서비스에 프로세스 간 통신이 추가된 형태
  - 연결성 보장과 신뢰적 전송에 소요되는 오버헤드가 없으며, 간단한 메시지를 송수신하는 데 유리

 

응용 프로세스의 데이터 전송

- 응용 프로그램은 다음 프로토콜을 이용하여 데이터를 전송할 수 있음
  - UDP: 비연결형, 비신뢰성 전송 서비스
  - TCP: 연결형, 신뢰성 전송 서비스
- 포트 번호 사용 (프로세스를 구별하기 위해)

 


UDP의 특징

- 최종 목적지의 데이터 수신 여부를 확인하지 않음: 데이터 손실 가능성
- 메시지의 도착순서를 재조정하지 않음: 데이터의 순서가 틀릴 가능성
- 호스트 사이에 데이터 흐름 제어 없음: 수신자 처리 용량을 초과하는 데이터 발생 가능성
- UDP는 비연결형 IP 전달 서비스와 검사합(checksum) 기능을 제공함

 


요약

- UDP는 비연결형 전송 방식으로, 메시지의 신뢰성을 보장하지 않으며 데이터의 손실, 중복, 순서 왜곡 등의 문제가 발생할 수 있음. 그러나 간단한 데이터 송수신이 필요한 응용 프로그램에는 유리한 프로토콜임.
- UDP는 포트 번호를 사용하여 동일한 호스트 내의 프로세스를 구별하며, 검사합을 통해 최소한의 데이터 무결성을 제공함.

2) UDP 사용자 데이터그램


UDP 사용자 데이터그램은 개념적으로 UDP 헤더와 UDP 데이터 부분으로 구성된다.

 

UDP 데이터그램 헤더는 메시지의 발신지 포트, 메시지의 목적지 포트, 메시지 길이, UDP 검사합 등으로 구성된다.

 

 

 

 

 

3) UDP 가짜 헤더 

UDP는 검사합을 계산하기 위해 12바이트의 가짜 헤더(pseudo-header)를 UDP 데이터그램에 덧붙이고, 가짜 헤더에 있는 IP 헤더로부터 얻는 데이터와 UDP 데이터그램의 16바이트 패딩 후 전체 UDP 데이터그램의 검사합을 계산한다.

 

 

 

가짜 헤더와 패딩 부분은 실제로는 전송되지 않으므로 길이에는 포함되지 않는다.

 

UDP 데이터그램을 전송받은 수신자는 검사합 필드를 '0'으로 저장하고, 가짜 헤더, UDP 헤더 및 사용자 데이터를 모두 포함하여 검사합을 계산한다.

 

 

4) UDP 포트 번호 


UDP를 사용하는 응용 프로그램은 TCP가 제공하는 신뢰성 제어 기능이 필요 없고, IP 계층이 제공하는 비연결형 데이터 전달 서비스를 이용한다. UDP는 응용 프로그램 또는 서버 프로세스를 UDP 포트 번호를 사용하여 식별한다.

 

 

위와 같이 UDP 포트 번호는 이미 할당된 포트 번호를 사용한다. 

 

 

 

3. TCP 

1) 전송제어 프로토콜

TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장하는 프로토콜이다.

 

UDP와는 달리 TCP는 연결 지향적이며 데이터 전송 전에 연결 설정을 합니다.

 

슬라이딩 윈도우, 확인 응답 패킷, 재전송 등의 기법을 사용하여 데이터 전송의 신뢰성을 높인다. 흐름 제어와 오류 제어를 통해 데이터가 손실되거나 손상되지 않도록 한다.

 

2) 신뢰성 제공

TCP는 신뢰성 있는 연결형(connection-oriented) 데이터 전송 서비스를 제공한다. 데이터는 세그먼트 단위로 전송되며, 각 세그먼트는 최대 세그먼트 크기(MSS)로 나뉜다. TCP는 다음과 같은 방법으로 신뢰성을 제공한다.

- 응답 대기 및 재전송: TCP는 세그먼트를 전송한 후, 수신자의 응답(ACK)을 기다린다. 응답이 없으면 타이머가 만료된 후 해당 세그먼트를 재전송한다. 이 과정은 데이터가 올바르게 도착할 때까지 반복된다.


- 순서 제어 및 재조립: TCP는 수신된 데이터의 순서를 유지하기 위해 각 세그먼트에 순서 번호를 부여한다. 수신자는 순서 번호를 기반으로 데이터의 올바른 순서를 맞추고, 손실된 데이터는 재전송 요청(Retransmission Request)을 통해 복구한다. 이렇게 하여 데이터가 올바른 순서로 재조립된다.

 

📌 오류제어 - 재전송(타이머 이용) 

 

(a) 패킷 손실에 의한 재전송 과정

1. 패킷 전송 및 타이머 시작
   - 발신자가 패킷을 전송하고 타이머를 시작한다.

2. 패킷 손실
   - 패킷이 전송 도중 손실된다. 수신자는 패킷을 받지 못한다.

3. 타이머 종료
   - 설정된 시간이 지나도 수신자로부터 응답이 없으면 타이머가 종료된다.

4. 패킷 재전송 및 타이머 시작
   - 발신자는 패킷을 재전송하고 다시 타이머를 시작한다.

5. 응답 수신 및 타이머 취소
   - 수신자는 재전송된 패킷을 받고 응답을 전송한다.
   - 발신자는 응답을 수신하고 타이머를 취소한다.

(b) 응답 손실에 의한 재전송 과정

1. 패킷 전송 및 타이머 시작
   - 발신자가 패킷을 전송하고 타이머를 시작한다.

2. 패킷 수신 및 응답 전송
   - 수신자는 패킷을 받고 응답을 전송한다.

3. 응답 손실
   - 응답이 전송 도중 손실된다. 발신자는 응답을 받지 못한다.

4. 타이머 종료
   - 설정된 시간이 지나도 응답이 도착하지 않으면 타이머가 종료된다.

5. 패킷 재전송 및 타이머 시작
   - 발신자는 패킷을 재전송하고 다시 타이머를 시작한다.

6. 응답 수신 및 타이머 취소
   - 수신자는 재전송된 패킷을 받고 다시 응답을 전송한다.
   - 발신자는 응답을 수신하고 타이머를 취소한다.



- 오류 검출: TCP는 데이터의 무결성을 보장하기 위해 세그먼트의 헤더와 데이터 부분에 대한 검사합(Checksum)을 계산한다. 수신자는 세그먼트를 수신할 때 이 검사합을 다시 계산하여 전송 중 오류가 발생했는지를 확인한다. 오류가 발견되면 해당 세그먼트를 폐기하고 재전송을 요청한다.

- 흐름 제어: TCP는 흐름 제어를 통해 송신자가 수신자가 처리할 수 있는 데이터 양을 조절하도록 한다. 이를 위해 윈도우 크기(Window Size)를 사용한다. 수신자는 자신의 버퍼 용량에 따라 윈도우 크기를 설정하고, 송신자는 이를 기준으로 데이터 전송량을 조절한다. 이로 인해 수신자의 버퍼 오버플로우를 방지할 수 있다.

 

📌 슬라이딩 윈도우 

 

 

 

 

 

기본 메커니즘

1. 초기 전송:
   - 발신자는 초기 윈도우 크기만큼의 패킷을 전송한다.
   - 그림에서 발신자는 1번부터 8번까지의 패킷을 전송한다.

2. 응답 수신:
   - 수신자는 패킷을 수신하고, 수신된 패킷의 순번을 확인한 후 ACK(확인 응답)를 발신자에게 전송한다.
   - 예를 들어, 1번 패킷을 수신하면 "1번 패킷을 받았다"는 ACK를 발신자에게 보낸다.

3. 윈도우 이동:
   - 발신자가 수신자로부터 ACK를 받으면, 윈도우를 앞으로 이동시킨다.
   - 그림에서 1번 패킷에 대한 ACK를 수신한 후 윈도우가 이동하여 2번부터 9번 패킷을 포함하게 된다.

4. 계속 전송:
   - 발신자는 윈도우가 이동함에 따라 다음 패킷을 계속 전송한다.
   - 윈도우가 이동할 때마다 새로운 패킷이 윈도우에 포함한다.

예시 시퀀스 분석

1. 초기 전송:
   - 발신자는 1번부터 8번 패킷을 전송한다.
   - 윈도우 크기는 8로 설정되어 있다.

2. 패킷 수신 및 응답:
   - 수신자는 1번 패킷을 수신하고, 이에 대한 ACK를 발신자에게 전송한다.
   - 발신자는 1번 패킷의 ACK를 수신한 후 윈도우를 앞으로 이동시킨다.

3. 윈도우 이동:
   - 윈도우가 1번부터 8번에서 2번부터 9번으로 이동한다.
   - 발신자는 다음 패킷인 9번을 전송할 준비를 한다.

4. 지속적 전송:
   - 발신자는 계속해서 패킷을 전송하고, 수신자로부터 ACK를 받으며 윈도우를 이동시킨다.
   - 이 과정이 반복되면서 모든 데이터가 신뢰성 있게 전송된다.

 

- 혼잡 제어: TCP는 네트워크 혼잡을 방지하기 위해 혼잡 제어(Congestion Control) 알고리즘을 사용한다. 혼잡 윈도우라는 변수를 사용하여 네트워크의 혼잡 상태를 감지하고, 혼잡이 발생하면 데이터 전송 속도를 줄인다. 대표적인 혼잡 제어 알고리즘으로는 AIMD(Additive Increase Multiplicative Decrease), Slow Start, Fast Retransmit, Fast Recovery 등이 있다.

 

 

 

3) TCP 세그먼트 형식


TCP 세그먼트는 헤더와 데이터로 구성되며, 헤더는 최소 20바이트에서 최대 60바이트까지 확장될 수 있다. 주요 필드는 다음과 같다.
   - 발신지 포트 (16비트): 데이터를 전송하는 응용 프로그램의 포트 번호
   - 목적지 포트 (16비트): 데이터를 수신하는 응용 프로그램의 포트 번호
   - 순서 번호 (32비트): 데이터의 순서를 나타내는 번호
   - 응답 번호 (32비트): 수신된 데이터의 응답 번호
   - 헤더 길이 (4비트): TCP 헤더의 길이
   - 제어 비트 (6비트): URG, ACK, PSH, RST, SYN, FIN 플래그
   - 윈도우 크기 (16비트): 수신자가 처리할 수 있는 데이터 양
   - 검사합 (16비트): 세그먼트의 오류 검출을 위한 필드
   - 긴급 포인터 (16비트): 긴급 데이터의 위치

 

4) TCP 연결형 서비스 


TCP는 연결 지향 프로토콜로서 데이터 전송 전에 연결을 설정하고 전송이 끝나면 연결을 해제한다.

 

연결 설정은 3-웨이 핸드셰이크 방식으로 이루어지며, 연결 종료는 4-방향 핸드셰이크로 처리된다.

 

-  TCP 연결: 송신자와 수신자가 연결을 설정하고 데이터를 전송한다. 예를 들어, 고려대학교 호스트(163.100.21.67)와 한국방송통신대학교 호스트(211.110.34.15) 간에 연결을 설정한다.

 

- TCP 연결 설정: SYN 세그먼트를 주고받으며 연결을 설정한다. 클라이언트는 SYN 세그먼트를 서버로 전송하고, 서버는 SYN+ACK 세그먼트로 응답하며, 클라이언트는 ACK 세그먼트로 응답하여 연결을 완료한다.

 

- TCP 연결 종료: FIN 세그먼트를 주고받으며 연결을 종료한다. 클라이언트가 FIN 세그먼트를 서버로 전송하고, 서버는 ACK로 응답하며, 다시 서버는 FIN 세그먼트를 클라이언트로 전송하고, 클라이언트는 ACK로 응답하여 연결을 종료한다.

 

 

📌 3-way handshaking 


단계 1: SYN 전송

1. 클라이언트 → 서버:
   - 클라이언트는 서버에게 연결 요청 메시지(SYN)를 보낸다다.
   - 이 메시지에는 클라이언트의 초기 순서번호(ISN: Initial Sequence Number)가 포함된다.
   - 예시: SYN 14531: 14531(0)

 

단계 2: SYN-ACK 전송

2. 서버 → 클라이언트:
   - 서버는 클라이언트의 SYN 메시지를 수신하고, 이에 대한 응답으로 SYN-ACK 메시지를 클라이언트에게 보낸다.
   - 이 메시지에는 서버의 초기 순서번호(ISN)와 클라이언트의 순서번호에 대한 확인 응답(ACK)이 포함된다.
   - 예시: SYN 35731: 35731(0), ACK 14532

 

단계 3: ACK 전송

3. 클라이언트 → 서버:
   - 클라이언트는 서버의 SYN-ACK 메시지를 수신하고, 이에 대한 확인 응답(ACK)을 서버에게 보낸다.
   - 이 메시지는 클라이언트가 서버의 초기 순서번호에 대한 확인 응답을 포함한다.
   - 예시: ACK 35732

 

 

 


 

참고자료: 정보통신망 | 손진곤 (지은이) 한국방송통신대학교출판문화원 

 

반응형