TCP와 UDP의 특징 및 차이점

7계층 중 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층으로, 데이터의 전달을 담당한다.
데이터를 보내기 위해 사용하는 프로토콜에는 TCP와 UDP가 있다.

출처:https://user-images.githubusercontent.com/54384004/73795474-0c28a400-47ee-11ea-81b5-0325aba220e3.png

 

TCP (Transmission Control Protocol)

  • 연결지향형 프로토콜: 데이터 전송 전 연결(논리적)을 설정하고, 데이터 전송 후 연결을 해제.
  • 높은 신뢰성: 흐름제어, 혼잡제어, 오류검출 기능을 제공.
  • 1:1 유니캐스트 통신: 단일 송신자와 단일 수신자 간의 통신을 지원.(멀티x)

UDP (User Datagram Protocol)

  • 비연결형 프로토콜: 데이터 전송 전 연결 설정 없이 바로 전송.
  • 빠른 속도: 데이터의 신속한 전송이 가능.
  • 1:1, 1:다, 다:다 통신 가능: 브로드캐스트 및 멀티캐스트 지원.

출처:https://user-images.githubusercontent.com/54384004/73796232-1481de80-47f0-11ea-855e-4bf8735faa30.png



TCP의 특징 및 구조

인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜(논리적 경로)

출처:https://user-images.githubusercontent.com/54384004/73796311-3aa77e80-47f0-11ea-82c8-079cc1989c4d.png

 
+위 표 정보 외 추가 정보
*송신자와 수신자가 모두 소켓이라고 하는 종단점을 생성
*데이터 손실 등이 있을 경우 재전송 요청을 하므로 연속성있는 서비스에는 부적합 하다.
*전이중(full-duplex), 점대점(point-to-point) 방식이다.

  • 전이중 : 전송이 양방향으로 동시에 일어날 수 있다.
  • 점대점 : 각 연결이 정확히 2개의 종단점(소켓)을 가지고 있음을 의미한다.


TCP 헤더 구조

 
TCP 헤더는 데이터 전송의 신뢰성과 흐름제어, 혼잡제어를 위해 다양한 필드를 포함한다.

출처:https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkJckh%2FbtsFygVZGHz%2FpCCBK9RZAeB4ZhZYOjkoe1%2Fimg.png https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcuSVe%2FbtrzQnOKHee%2F8ViefWfmEhBwMrzXjBDSv1%2Fimg.png

 
TCP 헤더의 크기

  • 기본적으로 20bytes
  • 옵션을 포함하면 최대 60bytes


발신지 포트와 목적지 포트 (16비트): 송수신 측의 포트 번호.

  • port 번호와 함께 IP 헤더에 있는 source/destination address를 이용하여 유일한 식별되는 통신연결을 만들 수 있게 됨
  • 크기는 각 16bit로, 0~65536 사이의 포트번호를 표시한다.


시퀀스 번호 (32비트): 데이터의 순서를 나타내며, 수신자가 데이터 조립 시 사용.

  • 32bit를 할당받음
  • 이 시퀀스 번호 덕분에, 수신자는 쪼개진 세그먼트의 순서를 파악해 순서 및 도착을 보장
  • 최초로 데이터를 전송할 때는 랜덤한 수로 초기화를 시키고 보낼 데이터의 1byte(8bit)당 시퀀스 번호를 1씩 증가시키며 데이터의 순서를 표현
  • 쵀대 4,294,967,296까지 수를 담을 수 있으며, 넘어갈 경우 다시 0부터 시작


승인 번호 (32비트): 다음에 수신할 데이터의 시퀀스 번호.

  • 32bit를 할당받음
  • 연결 설정과 해제 시 발생하는 핸드쉐이크 과정에는 상대방이 보낸 시퀀스 번호 + 1(다음 시퀸스 번호)
  • 실제로 데이터를 주고 받을 때는 상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 bytes

출처:https://evan-moon.github.io/static/4c5dc85683ae837d23500d773f219316/d9199/ack.png


데이터 오프셋 (4비트): 데이터가 시작하는 위치.

  • 전체 세그먼트 중에서 헤더가 아닌 데이터가 시작되는 위치가 어디부터인지를 표시 (옵션 필드의 길이가 고정되어 있지 않기 때문에 필요한 필드)
  • 이 오프셋을 표기할 때는 32비트 워드 단위 사용. (1word = 4bytes) 이 필드 값에 4를 곱하면 세그먼트의 헤더를 제외한 실제 데이터의 시작 위치를 알 수 있음
  • 4bit를 할당 받음. 0000~1111 범위를 표현할 수 있으므로 0~15 word * 4bytes로 0~60bytes의 오프셋까지 표현할 수 있음. 단, 옵션 필드를 제외한 나머지 필드는 필수로 존재해야하기 때문에 최솟값은 20bytes(5 word)로 고정


예약 필드 (3비트): 미래를 위한 예약 필드.

  • 3bit를 할당받음. 000으로 찍힘


플래그 비트 (9비트): 세그먼트의 속성.
 
*Flag: 무엇인가를 기억해야 하거나 또는 다른 프로그램에게 약속된 신호를 남기기 위한 용도로 프로그램에서 사용되는 미리 정의된 비트를 의미합니다.
*패킷: 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송을 하는데 이때, 이 조각을 패킷이라고 한다.
 
SYN: 연결 설정.

  • TCP에서 세션을 성립할 때(연결) 가장 먼저 보내는 패킷. 시퀀스 번호를 임의로 설정하여 세션을 연결하는데 사용되며 초기에 시퀀스 번호를 보내게 된다.

ACK: 승인 번호 유효.

  • 상대방으로부터 패킷을 받았다는 것을 알려주는 패킷으로, 다른 Flag와 같이 출력되는 경우도 있다. 송신 측에서 수신 측 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK를 보낸다. (일반적으로 +1을 하여 보 냅니다) ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송한한다.

FIN: 연결 종료.

  • 세션 연결을 종료시킬 때 사용되며, 더이상 전송할 데이터가 없음을 나타낸다.

RST: 연결 재설정.

  • 재설정(Reset)을 하는 과정이며 양방향에서 동시에 일어나는 중단 작업. 비정상적인 세션 연결 끊기에 해당한다. 이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용한다.

PSH: 즉시 전달.

  • 버퍼가 채워지기를 기다리지 않고 데이터를 받는 즉시 전달하는 Flag. 데이터는 버퍼링 없이 OSI 7 Layer Application Layer의 응용프로그램으로 바로 전달한다. 

URG: 긴급 데이터.

  • 긴급한 데이터의 우선순위를 다른 데이터의 우선순위보다 높여 긴급하게 데이터를 전달하는 Flag.

NS, CWR, ECE: 혼잡 제어.

  • 전문성이 높고 사용 빈도도 적어 간단하게 혼잡 제어에 사용된다고만 이해하자



윈도우 크기 (16비트): 한번에 수신할 수 있는 데이터의 양. 흐름제어의 기능을 담당.

체크섬 (16비트): 오류 검출.

  • 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값
  • 송신 측에서 전송할 데이터를 16bit씩 나눠 Warp Around 방식으로 차례로 더한 값의 1의 보수 값을 체크섬 값으로 지정한다.
  • 수신 측은 데이터를 받아 동일한 방식으로 값을 더해 1의 보수를 취하지 않은 값과 체크섬을 더하여 모든 비트가 1인지 확인한다. (모든 비트가 1이면 데이터가 정상이라고 판단)


긴급 포인터 (16비트): 긴급 데이터의 시작 위치.

  • 일반 데이터 내에서 긴급 데이터가 시작되는 위치 정보
  • URG 플래그가 1이라면 수신 측은 이 포인터가 가리키고 있는 데이터를 우선 처리


옵션 (가변 길이): TCP 확장 기능.

  • TCP의 기능을 확장할 때 사용하는 필드들이며, 이 필드는 크기가 고정된 것이 아니라 가변적
  • 옵션을 모두 사용했을 때 옵션 필드의 최대 길이는 40byte다.(->총 20byte+40byte=60byte)
  • Data offset필드가 옵션 필드의 끝을 가리키는데, 실제 옵션 필드의 끝 < Data offset라면 부족한 부분만큼 0으로 채워야함
  • 대표적인 옵션으로는 윈도우 사이즈의 확장을 위한 WSCALE, Selective Repeat 방식을 사용하기 위한 SACK 등이 있음
  • 약 30개 정도의 옵션을 사용할 수 있음


TCP 연결 방식 (3-Way Handshaking)

TCP는 장치들 사이에 논리적인 접속성립(establish)하기 위하여 3-Way Handshaking를 사용한다.
 
3-Way Handshake의 역할은 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하는 것이다.
 

출처:https://user-images.githubusercontent.com/40616436/81503765-6e7ace80-9320-11ea-82d6-49e00e900c36.png

 
 
1. SYN 패킷 전송 (클라이언트 → 서버)

  • 클라이언트는 서버에 접속을 요청하기 위해 SYN(Synchronize Sequence Numbers) 패킷을 보낸다.
  • 이때 클라이언트는 SYN_SENT 상태가 되며, 서버의 응답을 기다린다.

2. SYN/ACK 패킷 전송 (서버 → 클라이언트)

  • 서버는 클라이언트의 SYN 요청을 받고, 이를 수락한다는 의미로 SYN과 ACK(Acknowledgment) 플래그가 설정된 패킷을 클라이언트에게 보낸다.
  • 이때 서버는 SYN_RECEIVED 상태가 된다.

3. ACK 패킷 전송 (클라이언트 → 서버)

  • 클라이언트는 서버의 SYN/ACK 패킷을 받고, 이를 확인했다는 의미로 ACK 패킷을 서버에 보낸다.
  • 이때 연결이 성립되며, 서버는 ESTABLISHED 상태가 된다.
  • 이제 클라이언트와 서버는 데이터를 주고받을 수 있다.



TCP 연결 해제 방식 (4-Way Handshaking)

반대로 TCP 연결을 종료하는 과정은 4-Way Handshake로 이루어진다.

출처:https://user-images.githubusercontent.com/40616436/81503940-7a1ac500-9321-11ea-9442-d1b86065188c.png

 

1. 클라이언트 → 서버: FIN 패킷 전송

  • 클라이언트는 연결을 종료하고자 할 때 FIN(Finish) 플래그가 설정된 패킷을 서버에 보낸다.
  • 이때 클라이언트는 연결 종료를 대기하는 상태가 된다.

2. 서버 → 클라이언트: ACK 패킷 전송

  • 서버는 클라이언트의 FIN 패킷을 받고, 이를 정상적으로 받았다는 의미로 ACK(Acknowledgment) 패킷을 클라이언트에 보낸다.
  • 서버는 CLOSE-WAIT 상태가 된다.

3. 서버 → 클라이언트: FIN 패킷 전송

  • 서버는 연결을 종료한 후, 클라이언트에게 FIN 플래그가 설정된 패킷을 보낸다.

4. 클라이언트 → 서버: ACK 패킷 전송

  • 클라이언트는 서버의 FIN 패킷을 받고, 이를 확인했다는 의미로 ACK 패킷을 서버에 보낸다.
  • 클라이언트는 일정 시간 동안 TIME-WAIT 상태가 되어 서버의 재전송 패킷을 기다린다.

5. 서버: 세션 종료

  • 서버는 클라이언트로부터 ACK 패킷을 받은 후 소켓을 닫고, 두 TCP 간의 세션이 종료된다.

6. 클라이언트: TIME-WAIT 상태

  • TIME-WAIT 상태에 있는 클라이언트는 일정 시간 동안 세션을 유지하며 도착하지 않은 패킷을 기다린다.
  • 서버에서 FIN을 전송하기 전에 전송한 패킷이 늦게 도착할 경우, 클라이언트는 서버로부터 FIN을 수신한 후에도 일정 시간 동안(기본 240초) 세션을 유지하며 잉여 패킷을 기다리는 TIME-WAIT 상태에 머물러 데이터 유실을 방지한다.
  • 일정 시간이 지나면 클라이언트도 소켓을 닫고 세션을 완전히 종료한다.



TCP 재전송과 타임아웃

클라이언트는 일정 시간 내에 서버의 확인 응답(ACK)을 받지 못하면 패킷을 재전송하여 데이터 유실을 방지한다.

사진출처:https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgJLtD%2FbtsFpQExe1R%2Fr9NSFCoPKvvSqgJ8GvMb30%2Fimg.png


재전송: 데이터 전송 후 응답 패킷 미수신 시 재전송.
타임아웃 (RTO): 응답 패킷 대기 시간. 너무 짧으면 재전송, 너무 길면 속도 저하.

  1. 패킷 전송 및 확인: 클라이언트가 서버로 데이터 패킷을 전송하고, 서버는 이를 확인(ACK)하는 응답 패킷을 보낸다.
  2. 타이머 시작: 클라이언트는 패킷을 전송한 후 타이머를 시작한다. 일정 시간 내에 서버로부터 확인 응답(ACK)을 받지 못하면 타이머가 만료된다.
  3. 패킷 유실 감지 및 재전송: 클라이언트가 타이머 만료를 감지하면 해당 패킷이 유실된 것으로 간주하고 동일한 패킷을 다시 전송한다.
  4. 서버의 응답: 서버는 재전송된 패킷을 수신하고, 이를 확인하는 응답(ACK)을 다시 클라이언트에게 보낸다.
  5. 타이머 초기화 및 재시작: 클라이언트는 서버로부터 응답을 받으면 타이머를 초기화하고 다시 시작한다. 이는 다음 패킷에 대해 동일한 과정을 반복한다.

 

UDP의 특징 및 구조

 
데이터를 데이터그램(독립적인 관계를 지니는 패킷) 단위로 처리하는 프로토콜(논리x)

출처:https://user-images.githubusercontent.com/54384004/73796004-6c6c1580-47ef-11ea-97e0-392e36728fcc.png

 

 

+위 표 정보 외 추가 정보
*흐름제어(flow control), 오류제어, 손상된 세크먼드의 수신에 대한 재전송 X
*포트들을 사용하여 IP 프로토콜에 인터페이스를 제공하는 역할을 수행한다.
*요청 또는 응답이 손실된다면 재전송 없이 단지 타임아웃 처리되고, 다시 시도하면 된다.
*코드가 간단하고 초기설정이 TCP와 비교하여 적은 메시지를 요구한다.
*연결 자체가 없어 소켓 구분이 없고, 소켓 대신 IP를 기반으로 데이터를 전송한다.
 

UDP 헤더 구조

UDP는 단순한 데이터 전송을 위해 설계되어 헤더가 간단하다.

출처:https://velog.velcdn.com/images/amercurl27/post/a9e380ac-cc47-45b2-a828-d9538cadaa8b/image.png

 

UDP 헤더의 크기

  • 8bytes

발신지 포트와 목적지 포트 (16비트): 송수신 측의 포트 번호.

길이 (16비트): 헤더와 데이터의 총 길이.

체크섬 (16비트, 선택적): 오류 검출. TCP와 달리 필수는 아님.

  • 체크섬은 데이터 전송 중 발생할 수 있는 오류를 검출하기 위해 사용되지만 TCP와 달리 UDP는 오류 복구 기능을 제공하지 않아 오류 검출 후의 처리는 응용 프로그램에서 담당해야 한다.


UDP 통신 방식

출처:https://media.geeksforgeeks.org/wp-content/uploads/20230406112559/TCP-3.png

 

  • 수신자의 수신 여부 확인 없이 데이터 전송.
  • 빠른 데이터 전송이 필요할 때 유용.
  • 브로드캐스트 및 멀티캐스트 지원.


결론(TCP와 UDP의 용도)

  • TCP는 신뢰성이 중요한 웹 페이지 로드, 이메일 전송, 파일 전송 등의 애플리케이션에 적합하다.
  • UDP는 실시간 스트리밍, 온라인 게임, VoIP 등 빠른 데이터 전송이 중요한 애플리케이션에 적합하다.

출처:https://photo.coolenjoy.co.kr/data/editor/1705/20170503123926_iqwmwzqy.jpg/https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcStJOZJ8I6GWv1kqOJVgJL7EsLYfLmiL-Vxbu7BpPrurPsUHXvE

 

 *PPT

[4주차]TCP와 UDP의 특징 및 차이점.pptx
3.09MB

*참고자료

https://bellog.tistory.com/235
https://ohcodingdiary.tistory.com/7
https://ohcodingdiary.tistory.com/12
https://evan-moon.github.io/2019/11/10/header-of-tcp/
https://github.com/yeoseon/tip-archive/issues/90

 

'Security > Network' 카테고리의 다른 글

Firewall, DDoS, IDS 와 IPS 의 특징 및 차이점  (0) 2024.08.24
계층별 주요 프로토콜(2)  (0) 2024.08.12
계층별 주요 프로토콜(1)  (0) 2024.08.10
OSI 계층 별 장비  (2) 2024.07.23
OSI 7 Layer  (1) 2024.07.16

+ Recent posts