목차
0. 과제 및 과정 소개
과제 발표에 사용한 PPT파일을 첨부합니다. 이 과제는 AI스쿨 리팩토링 보안 과정의 일부로 2023년 12월 10일 발표되었으며 네트워크 프로토콜 중 중요성이 높은 TCP와 UDP에 대한 설명을 다루었습니다. 리팩토링 교육과정에 참여하고자 하신다면 AI스쿨 공식 카페에 방문하여 상세 과정을 확인해 주시기 바랍니다.
https://cafe.naver.com/itscholar
정보보안전문가 취업카페 스칼라 : 네이버 카페
비전공자 전문IT교육, 정보보안전문가, 보안을 아는 개발자, AI 양성교육, IT기술리더, 창업가 양성
cafe.naver.com
또한 앞으로 다루게 될 내용들은 기본적인 OSI 7계층에 대한 이해가 있을 것을 전제로 합니다. OSI 7계층을 모르신다면 아래 링크를 우선 참고해주시면 감사하겠습니다.
https://ericstone.tistory.com/entry/3%EC%A3%BC%EC%B0%A8-OSI-7%EA%B3%84%EC%B8%B5
3주차 - OSI 7계층
0. 과제 및 과정 소개 과제 발표에 사용한 PPT파일을 첨부합니다. 이 과제는 AI스쿨 리팩토링 보안 과정의 일부로 2023년 12월 2일 발표되었으며 기초적인 OSI 계층에 대한 설명을 다루었습니다. 리
ericstone.tistory.com
1. TCP(Transmission Control Protocol)
TCP(Transmission Control Protocol: 전송제어 프로토콜)와 UDP(User Datagram Protocol: 사용자 데이터그램 프로토콜)는 4계층, 전송 계층(Transport Layer)에서 데이터를 사용하기 위해 사용되는 프로토콜입니다.
둘 다 데이터 전송을 위해 사용되는 프로토콜이지만 차이점들이 있습니다. 사실 이러한 점 때문에 둘은 사용하는 목적이 다르며, 목적에 따른 구현방식에도 차이가 있습니다.

위 표를 보면 첫 번째로 나오는 차이점은 연결지향형 여부입니다. 사실 이 점이 가장 큰 차이점에 해당합니다.
미리 통신하는 장치들 간 연결 설정, 데이터 전송이 완료되고 연결을 종료하는 것이 이 특징입니다.
- TCP는 연결을 미리 설정, 전송, 종료하는 일련의 과정에서 순서를 보장할 필요가 있습니다. 데이터를 안정적으로 순차적으로 보내는 것이 중요하며, 이러한 데이터 흐름을 바이트 스트림이라 합니다.
- UDP는 연결 설정 없이 데이터를 전송할 수 있으며, 송신자가 수신자에게 일방적으로 데이터 그램을 전송합니다. 수신 여부가 없어서 신뢰성은 떨어지지만 속도는 빠릅니다.
1-1. TCP 기본 헤더 구조


이러한 둘의 차이는 구조 때문입니다.
3주차를 통해 알 수 있듯이 대부분의 네트워크 프로토콜은 헤더와 데이터로 나뉩니다. 네트워크 관점에서 보다 중요한 쪽은 헤더입니다. 헤더에는 통신에 필요한 중요한 제어 정보가 포함되어 있기 때문입니다. 반면 데이터에는 실제로 전송되는 애플리케이션 데이터가 포함되어 있지만, 지정된 형식 및 구조가 없습니다.
이러한 점에서 헤더는 통신 제어정보만을 주로 다루고, 발송자와 수신자가 있다는 점에서 우체국 택배의 송장과 유사합니다. 실제로 모양에서 어느 정도 유사성을 찾아볼 수 있습니다.
1-2. TCP 플래그(Flag)


TCP는 그러면 어떻게 순서를 보장할까요? 이를 알기 위해서는 TCP 플래그를 알아야 합니다. TCP에는 이러한 신호나 마커가 Flag라는 이름으로 내장되어 있습니다.
Flag란?
컴퓨터과학에서 특정 조건이나 상태를 나타내는 신호나 마커를 의미합니다.
TCP 플래그는 헤더에 포함된 제어 비트(control bits)로, TCP 연결의 상태와 데이터 패킷의 성격을 지정하는 데 사용됩니다. 즉, 연결 상태 및 조건을 표시하는 신호기 역할을 하며, 각 플래그는 특정 기능을 갖고, TCP 연결의 설정, 관리, 종료에 중요한 역할을 합니다. 아래는 TCP 플래그별 역할입니다.
이름 | 기능 | 특징 |
SYN(Synchronize) | 연결 시작을 요청 | 이 플래그가 설정된 패킷은 연결을 시작하려는 호스트의 초기 시퀸스 번호를 포함합니다. |
ACK (Acknowledgement) | 패킷 수신을 확인 | TCP연결 과정에서 사용되며 이후 데이터의 지속적인 전송 과정에서도 사용됩니다. |
FIN (Finish) | 연결 종료를 요청 | 이 플래그가 설정된 패킷은 수신자에게 모든 데이터가 전송되었음을 알립니다. 이후, 연결 종료 동의를 요청합니다. |
RST (Reset) | 연결 초기화 및 오류 복구 요청 | 에러 또는 연결 문제가 있을 경우 사용됩니다. |
PSH (Push) | 데이터를 즉시 전송하도록 요청 | TCP 통신에서는 네트워크 효율성을 높이기 위해 데이터를 일시적으로 보관하거나 버퍼링하여 더 크고 관리하기 쉬운 청크(Chunk)로 전송할 수 있습니다. 이 플래그는 이를 즉시 요청합니다. |
URG (Urgent) | 데이터의 긴급 처리를 요청 | 가장 우선순위가 높습니다. |
CWR | 더는 잘 사용되지 않는 플래그입니다. |
1-3. TCP 연결과 연결 해제
이제 플래그를 알게 되었으니 플래그를 이용해서 TCP가 어떻게 연결을 설정하고 데이터를 전송하는지 살펴보겠습니다.

TCP연결은 3-Way Handshake라고 합니다. Handshake는 악수라는 뜻인데, 이런 이름이 붙은 이유는 서버와 클라이언트 간에 3번의 메시지 연결을 통해 연결을 설정하기 때문입니다.
- SYN: 클라이언트가 서버에 연결을 요청하는 SYN 패킷을 보냅니다.
- SYN-ACK: 서버는 요청을 수락하고, 연결 준비가 되었음을 알리는 SYN-ACK 패킷을 클라이언트에게 보냅니다.
- ACK: 클라이언트가 서버의 응답을 확인하고, ACK 패킷을 보내 연결을 최종적으로 설정합니다.
이 세 단계를 통해 양쪽 모두 연결 준비가 되었음을 확인하게 됩니다.

이제 클라이언트와 서버는 계속 패킷을 교환하면서 데이터를 전송하고, 연결을 유지합니다. 각 패킷은 ACK를 통해 상대방에게 전달되는 것을 확인합니다. 그러다가 데이터 전송이 끝났습니다. 이제 연결을 종료해야 합니다.

TCP 연결 해제는 4-Way Handshake라고 합니다. 연결을 안전하게 종료하기 위해 네 번의 메시지 교환이 이루어집니다.
- FIN: 연결을 종료하려는 측(예: 클라이언트)이 FIN 패킷을 보내 연결 종료를 요청합니다.
- ACK: 상대 측(예: 서버)이 FIN을 수신하고 이를 확인하는 ACK 패킷을 보냅니다. 이때 연결은 아직 열려 있습니다.
- FIN: 서버도 데이터 전송이 완료되면 FIN 패킷을 클라이언트에게 보내 자신 쪽 연결 종료를 요청합니다.
- ACK: 클라이언트가 서버의 FIN을 확인하고 ACK 패킷을 보내 연결을 완전히 종료합니다.
1-4. TCP 헤더 구조 상세

S
이제 TCP가 어떻게 메시지 교환을 하는지 알았으므로 TCP 헤더에서 각 필드가 무슨 역할을 하는지 보겠습니다.
Source Port (16비트)
송신자의 포트 번호입니다. 송신 애플리케이션을 식별하는 데 사용됩니다.
Destination Port (16비트)
수신자의 포트 번호입니다. 수신 애플리케이션을 식별하는 데 사용됩니다.
Sequence Number (32비트)
송신자가 전송하는 데이터의 시작 위치를 나타내는 Sequence Number입니다. 데이터의 순서를 맞추고, 재전송을 처리하는 데 사용됩니다. 연결설정 시, 이 Sequence Number는 초기화됩니다.
Acknowledgment Number (32비트)
송신자가 수신한 데이터에 대한 응답 확인 번호입니다. 이 번호는 수신자가 다음에 올 것으로 기대하는 시퀀스 번호를 의미합니다.

Data Offset (4비트)
TCP 헤더의 길이를 나타내며, 단위는 4바이트입니다. 이 필드는 데이터가 어디서 시작하는지 나타내는 역할을 합니다.
Reserved (3비트)
향후 사용을 위해 예약된 필드로, 현재는 사용되지 않고 있습니다.
Window Size (16비트)
송신자가 수신 가능한 데이터의 양을 바이트 단위로 조절합니다. 흐름 제어 및 혼잡 제어를 위해 사용되는 필드입니다.

만약 TCP가 매번 확인 응답을 대기한다면 시간이 낭비될 것입니다. 반면 확인 응답을 대기하지 않고 수신 측에서 받아들일 수 있는 크기(윈도우 사이즈)만큼 전송하면 바로 다음 패킷을 전송할 수 있습니다.
그렇지만 많은 양을 한 번에 보내면 수신 측에서 처리하지 못할 수 있습니다. 그러므로 윈도우 사이즈는 수신 호스트가 한 번에 받아낼 수 있는, 다시 말해 수신 가능한 버퍼의 크기가 되어야 합니다. 그러므로 수신자의 윈도우 사이즈는 수신 측 상황에 따라 변경되며, 오버플로우를 방지할 수 있게 됩니다.
버퍼(Buffer)란?
컴퓨터 메모리 상에 위치하여 송수신하는 패킷을 일시적으로 저장하는 장소입니다.

Checksum (16비트)
체크섬은 TCP 헤더와 데이터의 무결성을 확인하기 위한 오류 검출 값입니다. 수신자는 이 값을 사용해 데이터의 손상 여부를 확인하며, 이때 손상 여부는 내부의 알고리즘으로 나온 값으로 알 수 있습니다.
Urgent Pointer (16비트)
URG 플래그가 설정된 경우 긴급 데이터의 위치를 나타냅니다. 최근에는 거의 사용되지 않습니다.
Options (가변 길이)
특별한 옵션을 지정할 때 사용되는 필드입니다. 이 필드는 최대 40바이트까지 확장 가능하며, 주로 윈도우 크기 확장, 시간 스탬프 등을 포함합니다. 아래는 옵션 필드의 주요 옵션입니다.
- MSS(Maximum Segment Size): TCP 연결 중 한번에 전송할 수 있는 최대 데이터 세그먼트의 크기를 지정합니다. 이는 네트워크 경로의 MTU(최대 전송 유닛)에 따라 결정됩니다.
- Window Scale: TCP 윈도우 크기를 확장하는 데 사용되며, 더 큰 데이터 흐름을 허용하여 성능을 향상시킨다.
- Timestamps: 패킷의 왕복 시간(Round-Trip Time, RTT) 측정과 네트워크 지연 감지에 사용됩니다.
- Selective Acknowledgment (SACK): 패킷 손실 발생 시, 효율적인 재전송을 위해 사용됩니다. 수신자가 수신한 패킷의 특정 부분만을 확인함으로써, 송신자가 필요한 부분만 재전송할 수 있게 합니다.
1-4. TCP 보안 - SYN Flooding
이처럼 TCP는 연결, 데이터 전송, 연결 종료의 과정을 거칩니다. 그렇지만 이러한 TCP 세션 연결의 취약성을 악용한 보안 공격들이 있습니다. 개중 가장 대표적인 SYN 플러딩만 다뤄보겠습니다.
SYN 플러딩(SYN Flooding)

정상적인 TCP는 앞서 말했듯이 3-Way Handshake로 작동합니다. 그렇지만 이 공격은 이를 악용해서 서버 리소스를 고갈시킵니다. 이러한 점에서 SYN 플러딩은 DoS(Denial Of Service: 서비스 거부) 공격의 일종입니다.
- SYN 패킷 전송
공격자가 다수의 SYN 패킷을 서버로 전송하여 여러 연결 요청을 보냅니다.
이때, 공격자는 가짜 IP 주소를 사용해 응답을 받을 수 없도록 설정합니다. - SYN-ACK 패킷 전송
서버는 SYN 패킷을 받고 연결을 수락하려 SYN-ACK 패킷을 공격자에게 응답합니다.
서버는 이 상태에서 연결이 완전히 수립되기를 기다리며 반열림 상태(Half-Open)로 남아 있습니다. - ACK 응답 없음
정상적인 경우 클라이언트가 ACK 패킷을 보내 연결을 완료해야 하지만, 공격자는 ACK 응답을 보내지 않습니다.
서버는 연결을 대기 상태로 유지하며, 이로 인해 리소스가 점점 소모됩니다. - 자원 고갈 및 서비스 거부
공격자는 지속적으로 많은 SYN 패킷을 보내 서버의 연결 대기 큐를 가득 채우고, 결국 서버는 새로운 요청을 처리하지 못하는 서비스 거부 상태(Denial of Service)에 이르게 됩니다.
SYN 플러딩(SYN Flooding) 방어
이러한 상황을 막기 위한 방법들은 여러 가지가 있습니다.
- 연결 요청 제한
서버는 특정 시간 동안 허용되는 연결 요청의 수를 제한할 수 있습니다. - 네트워크 장비 설정
방화벽, 침입 방지 시스템(IPS) 등의 네트워크 보안 장비를 통해 비정상적인 SYN 트래픽을 감지하고 차단할 수 있습니다. - SYN Cookie
서버가 연결 상태를 유지하지 않고 SYN-ACK 응답에 특수하게 계산된 쿠키 값을 포함시켜 전송합니다. 클라이언트가 유효한 ACK 응답을 보낼 때, 이 쿠키 값을 사용하여 서버는 연결 요청이 유효한지 확인할 수 있습니다.
2. UDP(User Datagram Protocol)
2-1. UDP 헤더 구조

UDP도 TCP와 같이 크게 세그먼트 헤더와 데이터로 나뉩니다. 그렇지만 TCP와 달리 반드시 확인 플래그(ACK)가 필요없는 비연결적 지향이기 때문에 헤더 구조는 상대적으로 단순하며 총 8바이트의 고정된 길이를 갖습니다.
Source Port (16비트)
송신자의 포트 번호를 나타내며, 송신 애플리케이션을 식별하는 데 사용됩니다. 경우에 따라 생략될 수 있습니다.
Destination Port (16비트)
수신자의 포트 번호로, 수신 애플리케이션을 식별합니다. 필수 필드입니다.
Length (16비트)
헤더와 데이터의 총 길이를 나타냅니다. 최소 값은 8(헤더의 크기)이며, 이 값을 통해 데이터의 끝을 식별할 수 있습니다.
Checksum (16비트)
헤더와 데이터의 무결성을 확인하기 위한 오류 검출 필드입니다. 데이터 전송 중 오류가 발생했는지 확인하는 데 사용됩니다. 필수는 아니며, 일부 네트워크에서 생략될 수 있습니다.

그림으로 알 수 있듯이 TCP는 응답이 와야 하지만, UDP는 이와 무관하게 계속해서 응답을 전송합니다. 이때 데이터 패킷은 도착하는 순서가 보장되지 않습니다. 즉, 늦게 출발한 응답이 먼저 도착할 수도 있습니다.
대신 UDP는 오류 검출을 위한 간단한 체크섬을 제공합니다. 이는 데이터의 무결성을 보장하지만 오류 복구는 수행하지 않습니다. 아래는 TCP와 UDP 체크섬의 차이입니다.
TCP | UDP | |
필수 여부 | O | X |
계산 방식 | 가상 헤더, 16비트 단위 합 등을 사용한다는 점에서 동일, 검증방식도 동일 | |
오류 처리 과정 | 일치하지 않을 경우, 해당 패킷을 폐기, TCP의 재전송 메커니즘에 따라 송신자가 해당 패킷을 재전송 | 일치하지 않을 경우 패킷이 폐기, 단, 재전송 메커니즘 제공 X |
이러한 점 때문에 UDP는 TCP보다 헤더의 크기가 작고, 처리 속도가 빠릅니다. 이 과정에서 UDP(User Datagram Protocol)는 이름 그대로 데이터그램이라는 네트워크 통신에서 사용되는 독립적인 패킷을 사용합니다
2-2. UDP 보안 - UDP Flooding
UDP의 대표적인 보안 공격인 UDP Flooding을 소개합니다.
UDP 플러딩(Flooding)

UDP Flooding도 TCP Flooding처럼 DoS 공격이라는 점에서는 유사하지만 약간 차이가 있습니다.
- TCP Flooding은 TCP의 연결적 특성, 3-Way Handshake를 이용합니다.
- 반면 UDP는 타깃 시스템의 네트워크 대역폭, 즉, 사용가능한 Port가 남지 않게 만드는 것을 목표로 합니다.
UDP 플러딩(UDP Flooding) 방어
TCP와 UDP는 같은 계층의 프로토콜이며, 데이터 전송이라는 유사한 역할을 수행하므로 방어 전략은 유사합니다.
- 연결 요청 제한
서버는 특정 시간 동안 허용되는 연결 요청의 수를 제한할 수 있습니다. - 네트워크 장비 설정
방화벽, 침입 방지 시스템(IPS) 등의 네트워크 보안 장비를 통해 비정상적인 SYN 트래픽을 감지하고 차단할 수 있습니다. - 네트워크 용량 확장
대역폭 요청이 증가할 경우, 일시적으로 대역폭을 증가시켜 공격 트래픽을 수용할 여유를 확보하는 방법입니다. 정상 트래픽에 대한 영향을 최소화할 수 있습니다.
참고자료
이하는 글을 작성하기 위해 참고한 자료들입니다. TCP와 UDP에 대해 보다 깊은 이해를 원하신다면 해당하는 사이트로 접속하는 것을 추천드립니다.
TCP와 UDP의 비교
https://mangkyu.tistory.com/15
[TCP/UDP] TCP와 UDP의 특징과 차이
오늘은 네트워크의 계층들 중 전송 계층에서 사용하는 프로토콜에 대해서 알아보려고 합니다. 전송계층은 송신자와 수신자를 연결하는 통신서비스를 제공하는 계층으로, 쉽게 말해 데이터의
mangkyu.tistory.com
3-Way Handshake, 4-Way Handshake
https://doohong.github.io/2019/03/06/TCP_UDP/
TCP/UDP 차이점
TCP/UDPTCP 신뢰성있는 데이터 전송을 지원하는 연결지향형 프로토콜 Sequence Number, Ack Number를 통한 신뢰성 보장 연결의 설정(3-way handshaking)과 해제(4-way handshaking) 흐름제어와 혼잡제어를 지원하며
doohong.github.io
https://better-together.tistory.com/140
쉽게 이해하는 네트워크 17. TCP 프로토콜의 기능 및 특징 - 패킷 분할과 연결형 통신
TCP 프로토콜의 기능, 특징 - 세그먼트, 연결형 통신 TCP 프로토콜의 기능과 특징 전송 계층의 대표적인 프로토콜인 TCP는 신뢰할 수 있고 정확한 데이터를 전달하기 위해 연결형 통신을 사용하는
better-together.tistory.com
TCP Sliding Window
https://m.blog.naver.com/gaegurijump/110188012832
TCP 슬라이딩 윈도우(Sliding Window)
슬라이딩 윈도우 슬라이딩 윈도우는 두개의 네트워크 호스트간의 패킷의 흐름을 제어하기 위한 방법...
blog.naver.com
TCP 체크섬
https://securitynewsteam.tistory.com/21
TCP체크섬 계산방법
개념 TCP는 TCP Segment data 송신도중 발생될 수 비트 오류를 검출하기 위해 체크섬을 사용한다. 송신자는 체크섬 계산알고리즘에 의해 계산한 체크섬을 TCP 체크섬 헤더에 삽입하여 송신하게 되며,
securitynewsteam.tistory.com
TCP 흐름제어
TCP 흐름 제어, 혼잡 제어와 재전송 제어
velog.io
TCP Flags
https://evan-moon.github.io/2019/11/10/header-of-tcp/
TCP의 헤더에는 어떤 정보들이 담겨있는걸까?
저번에 HTTP/3는 왜 UDP를 선택한 것일까? 포스팅을 진행하며 TCP에 대해 간단한 언급을 했었지만, 해당 포스팅에서는 기존의 HTTP에서 사용하던 TCP에 어떤 문제가 있었는지에 집중해서 이야기했었
evan-moon.github.io
UDP
https://hack-cracker.tistory.com/111
Network - TCP 통신과 UDP통신
Network - TCP 통신, UDP 통신 IP ( Internet Protocol ) ↑ 가장 기본이 되는 기능만을 IP( 허리 기능 )에 포함시키고, 그 위에 TCP, UDP 라는 새로운 계층을 얹는 형태 # 어떤 통신 관련 하드웨어 기술이든 IP만
hack-cracker.tistory.com
https://landwhale2.github.io/network/6/
UDP(User Datagram Protocol)
UDP(User Datagram Protocol)
landwhale2.github.io