TCP - 특징 및 헤더 구조

LGE·2025년 3월 4일
post-thumbnail

공통점

TCP와 UDP는 OSI 4계층인 전송 계층에서 주로 사용하는 프로토콜이며 두 프로토콜 모두 포트 번호를 이용하여, 여러 애플리케이션이 동일한 장치에서 네트워크를 공유를 가능케 한다.

TCP는 세그먼트, UDP는 데이터그램으로 데이터를 나누어 전송하며, 나눠진 조각들은 네트워크를 통해 전송되어 목적지에서 다시 조립된다.

차이점

TCPUDP
연결 방식연결 지향 (3-way Handshake)비연결형
신뢰성보장됨(데이터 손실 시 재전송)보장되지 않음
흐름 제어있음없음
혼잡 제어있음없음
속도상대적으로 느림빠름
데이터 순서 보장보장됨보장되지 않음
사용 예웹 브라우징, 이메일, 파일 전송스트리밍, 온라인 게임, DNS


TCP (Transmission Control Protocol)

: TCP는 신뢰성을 보장하는 연결 지향형 프로토콜이며, 데이터가 정확하고 순서대로 도착해야 하는 애플리케이션에서 사용된다.



1. 특징

1.1. 연결 지향성 (Connection-oriented)

  • 송신자와 수신자가 먼저 3-way Handshake를 통해 연결을 설정한 후 데이터 전송을 시작한다.

1.2. 신뢰성 보장 (Reliability)

  • 데이터 순서 보장 (Ordered Data Transfer)
    • TCP는 데이터 전송 시, 손실된 세그먼트를 재전송하고 순서대로 도착하도록 보장한다.
    • 각 패킷에는 순서 번호(Sequence Number)가 붙어 있어, 수신자는 패킷의 순서를 추적하고, 순서대로 조립이 가능하다.
  • 데이터 손실 방지
    • 수신자는 세그먼트를 받을 때마다 확인 응답(ACK, Acknowledgment)를 요청자에게 보내 데이터가 제대로 도착했음을 알린다.
    • 만일 확인 응답이 일정 시간 내 오지 않는다면, 요청자는 데이터를 다시 전송한다.
  • 오류 제어 (Error Control)
    • 체크섬(CheckSum)을 사용해 데이터 오류를 감지하고 필요하면 재전송한다.

1.3. 흐름 제어 (Flow Control)

: 송신자가 수신자의 처리 속도를 고려하여 데이터를 전송한다.

  • TCP는 요청자가 세그먼트 전송 시, 수신자의 버퍼가 넘치지 않도록 흐름 제어를 사용한다.
  • 수신자는 자신이 처리할 수 있는 데이터의 양(윈도우 크기, Window Size)을 요청자에게 알려주고, 요청자는 그 크기에 맞춰 데이터를 전송한다.

1.4. 혼잡 제어 (Congestion Control)

: 네트워크가 과부하 상태일 때 전송 속도를 조절한다.

  • TCP는 네트워크가 과부하 상태에 있을 시 전송 속도를 조절한다.
  • 네트워크 혼잡 발생 시 전송 속도를 줄이고, 혼잡 해소 시 다시 속도를 늘리는 방식으로 네트워크의 안정성을 유지한다.


2. TCP 헤더 구조

  • TCP 헤더는 데이터를 신뢰성 있게 전송하고, 요청자와 수신자 간 통신을 관리하는 데 필요한 다양한 정보를 포함하고 있다.
  • TCP 헤더는 필드로 구성되어 있고 각 필드는 데이터 전송을 관리하는 데 중요한 역할을 담당한다.

2.1. 소스 포트(Source Port) (16비트)

요청자가 데이터를 보내는 포트 번호. 출발지.
주로 응용 프로그램과의 통신을 구별하는 데 사용됨.

2.2. 목적지 포트(Destination Port) (16비트)

데이터를 받는 수신자의 포트 번호.
특정 애플리케이션에 데이터를 전달하기 위해 사용됨

2.3. 순서 번호(Sequence Number) (32비트)

요청자가 보낸 데이터의 바이트 순서를 나타냄.
데이터 전송의 흐름 추적 및 세그먼트 손실 발생 시 올바른 순서로 재전송할 수 있도록 도와 줌.

2.4. 확인 응답 번호(Acknowledgment Number) (32비트)

데이터를 받은 수신자가 예상하는 다음 시퀀스 번호를 의미.
송신된 데이터를 수신자가 제대로 받았는지 확인하기 위한 필드.

2.5. 데이터 오프셋(Data Offset) (4비트)

TCP 헤더의 길이를 나타내는 필드.
헤더에 옵션 필드가 추가될 경우, 이 필드를 통해 TCP 헤더의 전체 크기를 알 수 있음.

2.6. 예약 필드(Reserved) (3비트)

미래를 위해 예약된 필드. 비워져 있어야 함.

2.7. 제어 비트(Flags) (9비트)

TCP 연결의 상태와 제어를 관리하기 위해 사용하는 플래그들.
현재 세그먼트의 속성을 나타냄.

  • URG (Urgent Pointer)

    Urgent Pointer(긴급 포인터) 필드에 값이 있음을 알리는 플래그
    긴급으로 설정된 데이터는 먼저 처리됨

  • ACK (Acknowledgment)

    응답 번호(Acknowledgment Number)가 유효함을 알린다.
    해당 플래그가 0이면, 승인 번호 필드 자체가 무시됨.

  • PSH (Push)

    Push 플래그, 수신 측이 데이터를 즉시 상위 계층으로 전달해야 함을 요청함

  • RST (Reset)

    Reset 플래그, 연결 재설정 시 사용.
    연결이 확립된 Established 상태에서 상대방에게 강제로 리셋을 요청함

  • SYN (Synchronize)

    Synchronize 플래그, 연결 요청 시 사용.
    연결 생성 시, 시퀀스 번호의 동기화를 맞추기 위한 세그먼트임을 의미.

  • FIN (Finish)

    Finish 플래그, 연결 종료 요청 시 사용

  • NS

    ECN에서 사용하는 CWR, ECE 필드가 실수나 악의적으로 은폐되는 경우를 방어하기위해 RFC 3540에서 추가된 필드.

  • ECE (ECN Echo)

    해당 필드가 1이면서, SYN 플래그가 1일 때는 ECN을 사용한다고 상대방에게 알림.
    SYN 플래그가 0이면, 네트워크가 혼잡하니 세그먼트 윈도우 크기 축소 요청을 알림.

  • CWR

    이미 ECE 플래그를 받아, 전송하는 세그먼트 윈도우 크기를 줄였다고 알림

2.8.윈도우 크기(Window Size) (16비트)

수신자가 수용할 수 있는 데이터의 양을 나타냄.
흐름 제어에 사용되며, 요청자는 이 크기보다 많은 데이터를 전송하지 않도록 함

2.9. 체크섬(Checksum) (16비트)

데이터의 무결성을 확인하기 위한 필드.
요청자가 계산한 체크섬 값과 수신자가 계산한 값이 일치하는지 확인하여 데이터가 손상되지 않았는지 검사함.

2.10. 긴급 포인터(Urgent Pointer) (16비트)

URG 플래그가 설정된 경우 해당 데이터를 빠르게 처리하기 위해 사용됨.

2.11. 옵션 및 패딩(Option and Padding) (가변 길이)

추가적인 TCP의 기능을 지원하기 위한 필드.



참고 및 출처

profile
안녕하세요

0개의 댓글