본문 바로가기
공부/자료조사

TCP와 UDP

by 고구밍 2022. 4. 7.

간단한 영상 : TCP / UDP 02:00 - 03:08

https://youtu.be/ePbatYX_ppo?t=121

 

0. 프로토콜(Protocol)

더보기

클라이언트에서 발생한 데이터가 서버로 전달되기 위해서는

표준화 된 어떠한 약속 혹은 절차를 따라야 한다.

 

보내는 쪽에서는

데이터를 안전하고, 정확하고, 신속하게 규격화

 포장하는 방법이 필요

 

받는 쪽에서는

그 데이터를 안전하고 정확하고 신속하게

해석하는 방법이 필요

 

그런 기술적 약속을 프로토콜이라고 한다.

→ 하드웨어와 소프트웨어의 논리적인 변경없이 통신할 수 있는 표준 모델 → OSI 7계층 모델

 

https://velog.io/@hidaehyunlee/데이터가-전달되는-원리-OSI-7계층-모델과-TCPIP-모델

 

"데이터가 전달되는 원리" OSI 7계층 모델과 TCP/IP 모델

우선 데이터의 기술적 개념부터 생각해보자. 데이터는 0혹은 1로 이루어진 `숫자`이고, 컴퓨터는 이진법의 숫자를 전기의 `켜짐`과 `꺼짐`으로 표현할 수 있다. 즉, 데이터는 아주 긴 `전기 신호`

velog.io

 

1. 전송계층

TCP와 UDP는 TCP/IP의 전송계층에서 사용되는 프로토콜이다.

 

전송계층은

IP에 의해 전달되는 패킷의 오류를 검사하고

재 전송 요구 등의 제어를 담당하는 계층

 

2. TCP vs UDP

더보기

TCP (Transmission Control Protocol)

UDP (User Datagram Protocol)

 

그림으로 비교하는 TCP vs UDP

 

먼저, TCP의 데이터 송신 과정을 살펴보자.

반면, UDP는 일방적이다.

즉, 신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고

간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용한다.

TCP / UDP 게임들

https://youtu.be/0ZXIRuEVa5E?t=1660

TCP(안정성) : 화투, 보드게임, RPG

UDP(반응성 빠름) : 슈팅게임(FPS), LOL(AOS), 격투게임, 스타크레프트

 

 

표로 비교하는 TCP vs UDP

TCP TCP
Connection-oriented protocol
(연결지향형 프로토콜)
Connection-less protocol
(비 연결지향형 프로토콜)
Connection by byte stream
(바이트 스트림을 통한 연결)
Connection by message stream
(메세지 스트림을 통한 연결)
Congestion / Flow control
(혼잡제어, 흐름제어)
NO Congestion / Flow control
(혼잡제어와 흐름제어 지원 X)
Ordered, Lower speed
(순서 보장, 상대적으로 느림)
Not ordered, Higer speed
(순서 보장되지 않음, 상대적으로 빠름)
Reliable data transmission
(신뢰성 있는 데이터 전송 - 안정적)
Unreliable data transmission
(데이터 전송 보장 X)
TCP packet : Segment
(세그먼트 TCP 패킷)
UDP packet : Datagram
(데이터그램 UDP 패킷)
HTTP, Email, File transfer 에서 사용 DNS, Broadcasting
(도메인, 실시간 동영상 서비스에서 사용)

 

3. TCP (Transmission Control Protocol)

TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜로서,

장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 연결을 설정하여

신뢰성을 보장하는 연결형 서비스 이다.

 

TCP는 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에

일련의 옥텟(데이터, 메세지, 세그먼트라는 블록 단위)를

안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.

 

 

3.1. TCP의 특징

더보기

연결형 서비스

연결형 서비스로 가상 회선 방식을 제공한다.

TCP의 3-WAY연결 & 4-WAY연결 : https://youtu.be/ikDVGYp5dhg?t=427

  • 3-way handshaking 과정을 통해 연결을 설정
  • 4-way handshaking 을 통해 연결을 해제.

 

흐름제어(Flow control)

→ 송수신자 간의 데이터 처리 속도 차이

(수신자가 처리할 수 있는 데이터 량 초과)

데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지

  • 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.
  • 수신자가 윈도우크기(Window Size) 값을 통해 수신량을 정할 수 있다.
  •  

혼잡제어(Congestion control)

→네트워크의 데이터 처리 속도

네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지

  • 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.

→ 송신이 제대로 안됨 → 데이터 손실 발생

 

 

신뢰성이 높은 전송(Reliable transmission)

  • Dupack-based retransmission
    • 정상적인 상황에서는 ACK 값이 연속적으로 전송되어야 한다.
    • 그러나 ACK값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.
  • Timeout-based retransmission
    • 일정시간동안 ACK 값이 수신을 못할 경우 재전송을 요청한다.

 

전이중, 점대점 방식

  • **전이중 (Full-Duplex)**전송이 양방향으로 동시에 일어날 수 있다.
  • **점대점 (Point to Point)**각 연결이 정확히 2개의 종단점을 가지고 있다.

=> 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.

 

 

3.2. TCP Header 정보

더보기

 

세그먼트 : 데이터의 단위

→ 어플리케이션 단에서, 데이터를 전송을하면

→ TCP 안에서 데이터를 자르고

→TCP 헤더를 데이터에 추가함

→ 프로토콜 안에서 처리함

https://youtu.be/ikDVGYp5dhg?t=282

 

https://youtu.be/ikDVGYp5dhg?t=331

응용 계층으로부터 데이터를 받은 TCP는 헤더를 추가한 후에 이를 IP로 보낸다.

헤더에는 아래 표와 같은 정보가 포함된다.

 

헤더정보

 

필   드 크   기 내   용
송신자의 포트 번호 16 데이터를 보내는 애플리케이션의 포트 번호
수신자의 포트 번호 16 데이터를 받을 애플리케이션의 포트 번호
순서 번호 (Sequence Number) 32 송신자가 지정하는 순서 번호(바이트 수 기준)
순차 전송의 신뢰성을 보장
응답 번호 (ACK Number) 32 수신 완료된 데이터 순서 번호(바이트 수 기준)
순차 전송의 신뢰성을 보장
데이터 오프셋 (Data Offset) 4 데이터의 시작 위치
예약 필드 (Reserved) 6 사용을 하지 않음
제어 비트 (Flag Bit) 6 SYN, ACK, FIN 등의 제어 번호
윈도우 크기 (Window) 16 수신자에서 수신할 수 있는 데이터의 크기
체크섬 (Checksum) 16 데이터 오류 검사에 사용
긴급 위치 (Urgent Pointer) 16 긴급하게 처리할 데이터의 위치

 

자세한 내용

필    드 내    용
송수신자의 포트 번호 TCP로 연결되는 가상 회선 양단의 송수신 프로세스에 할당되는 포트 주소
순서 번호(Sequence Number) 송신자가 지정하는 순서 번호, 전송되는 바이트 수를 기준으로 증가
응답 번호 (ACK Number) 수신 프로세스가 제대로 수신한 바이트의 수를 응답하기 위해 사용
데이터 오프셋(Data Offset) TCP 세그먼트의 시작 위치를 기준으로 데이터의 시작 위치를 표현(TCP 헤더의 크기)
예약 필드(Reserved) 사용을 하지 않지만 나중을 위한 예약 필드
제어 비트 (Flag Bit)  
윈도우 크기(Window) 수신 윈도우의 버퍼 크기를 지정할 때 사용
체크섬(Checksum) TCP 세그먼트에 포함되는 프로토콜 헤더와 데이터에 대한 오류 검출 용도
긴급 위치(Urgent Pointer) 긴급 데이터를 처리하기 위함, URG 플래그 비트가 지정된 경우에만 유효

 

자세한 내용

 종   류 내    용
URG 긴급 위치를 필드가 유효한지 설정
ACK 응답 번호 필드가 유효한지 설정
PSH 현재 세그먼트에 포함된 데이터를 상위 계층에 즉시 전달할 때
RST 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답용
SYN 연결 설정 요구
FIN 더 이상 전송할 데이터가 없을 때 연결

 

 

3.3. TCP의 연결 및 해제 과정

더보기

설명 영상

https://youtu.be/ikDVGYp5dhg?t=428

TCP Connection (3-way handshake)

  1. SYN비트를 1로 설정해 패킷 송신
  2. SYN ACK비트를 1로 설정해 패킷 송신
  3. ACK 비트를 1로 설정해 패킷 송신
  1. 클라이언트 → 패킷을 보냄
  2. 서버에서 잘받았으면 → ACK를 보냄
  3. 만약 패킷을 못받았으면?
  4. 클라이언트에서 잠시 기달렸다 → 다시 패킷을 보냄

 

TCP Disconnection (4-way handshake)

  1. 클라이언트가 → FIN을 1로 설정해서 보냄
  2. 서버 → ACK
  3. 서버의 정보가 다 올 때까지 잠시 기다림
  4. 서버가 → FIN을 보냄
  5. 클라이언트가 → ACK 송신

 

4. UDP Header 정보