hello

TCP 공부하기

Share

TCP(전송 제어 프로토콜) 개요

TCP는 불안정한 네트워크 환경에서도 신뢰성 있고 순서가 보장된 데이터 전송을 가능하게 하는 핵심 인터넷 프로토콜이다. IP가 호스트 간 패킷 전달만을 담당한다면, TCP는 포트 기반 프로세스 간 통신, 오류 복구, 재전송, 순서 제어를 제공한다. 흐름 제어와 혼잡 제어를 통해 TCP는 수신 버퍼와 네트워크 대역폭의 고갈을 방지한다.

이 글에서는 간단한 TCP 서버와 C 언어로 구현한 HTTP 서버를 예시로 소켓 생성, 바인딩, 리스닝, 연결 수락, 데이터 교환 과정을 살펴본다. 시퀀스 번호·응답 번호, 윈도우 크기, 체크섬, 제어 플래그(SYN, ACK, FIN, RST)와 같은 TCP 핵심 메커니즘을 분석함으로써 오늘날 인터넷이 안정적으로 동작할 수 있는 기반을 이해한다.


TCP의 필요성 및 역할

  • 전송 계층의 요구: IP는 단순히 호스트 간 패킷 포워딩만을 수행한다. 프로세스 간 신뢰성 있는 통신을 위해서는 TCP·UDP와 같은 전송 계층 프로토콜이 필요하다.
  • 주소 체계 비유: IP 주소는 건물에 비유될 수 있고, 포트는 그 건물 안의 호수와 같다. 각 애플리케이션은 특정 포트에 바인드하여 통신에 참여한다.
  • 신뢰성 보장: TCP는 패킷 손실·중복·재정렬 등 네트워크 결함을 재전송·체크섬·기타 메커니즘으로 감춘다.
  • 라우팅 단순화: 신뢰성 관리는 통신 종단점에서 처리되므로 라우터는 단순하게 유지될 수 있어 전체 인프라 복잡도가 감소한다.
  • 서비스 기반: HTTP, SMTP, SSH 등 주요 인터넷 서비스는 모두 TCP 위에서 안정적으로 동작한다.

흐름 제어와 혼잡 제어

  1. 수신 버퍼 관리 – 수신자는 커널의 수신 버퍼에 들어오는 데이터를 일시적으로 저장한다. 버퍼 크기는 net.ipv4.tcp_rmem으로 조정 가능하다.
  2. 윈도우 기반 전송 – 송신자는 수신자가 광고하는 윈도우 필드 값을 기준으로 전송 속도를 조절한다. 이는 수신자가 현재 받아들일 수 있는 데이터 양을 의미한다.
  3. 혼잡 회피 – 대역폭이 서로 다른 경로에서 발생할 수 있는 네트워크 전체 혼잡을 방지하기 위해 TCP는 혼잡 제어 알고리즘을 도입한다. 1986년 발생한 혼잡 붕괴 사건을 계기로 “백오프(back‑off)” 메커니즘이 추가되었다.

구현 예시

간단한 TCP 에코 서버 (C)

  • Berkeley sockets API(socket(), bind(), listen(), accept(), send(), recv())를 활용한다.
  • 클라이언트가 전송한 문자열을 “you sent:”라는 접두어와 함께 에코한다.
  • 서버가 슬립 상태에 있는 동안 클라이언트 데이터는 수신 버퍼에 적재되고, 서버가 깨어나면 순차적으로 처리된다.

최소 HTTP/1.1 서버 (C)

  • TCP 연결을 수락하고 HTTP/1.1 요청을 파싱한 뒤 200 OK 헤더와 본문을 반환한다.
  • 요청 횟수를 카운트(i)하여 curl localhost:8080 호출 시 [1] Yo, I am a legit web server와 같은 응답을 제공한다.

TCP 세그먼트 구조 및 핵심 필드

필드 설명
Source / Destination Port 16비트 포트 번호, 최대 65 536개의 포트 사용 가능
Sequence Number 세그먼트에 포함된 첫 바이트의 오프셋을 나타냄
Acknowledgment Number 상대방이 다음에 기대하는 바이트 번호
Window Size 수신 버퍼에 남은 공간을 광고
Checksum 16비트 체크섬, 오류 검출 용도
Flags SYN, ACK, FIN, RST 등 연결 상태를 제어하는 비트
  • 5‑tuple 식별: (프로토콜, 출발지 IP, 출발지 포트, 목적지 IP, 목적지 포트) 로 연결을 고유하게 식별한다.
  • 시퀀스·ACK 동작: 데이터 누락 시 ACK가 정지하고, 재전송 후 누적 ACK가 전송된다.
  • 연결 설정·해제: SYN/ACK가 3‑way handshake를 수행하고, FIN이 4‑way termination을 수행한다. RST는 비정상 연결을 즉시 종료한다.
  • 윈도우 확인: ss 명령으로 버퍼 상태를 확인할 수 있다(예: rb131072, tb16384).

결론

TCP는 신뢰성·순서·데이터 무결성을 보장함으로써 애플리케이션이 불안정한 인터넷 경로에서도 정상 동작하도록 한다. 초기 네트워크가 몇 킬로바이트 전송에 애를 먹던 시절과 달리, 현대 구현은 4K 영상 스트리밍을 포함한 대용량 데이터 전송을 무리 없이 지원한다. TCP의 정교한 설계와 구현은 인터넷 지속 성장의 초석이라 할 수 있다.

Read more

AI 에이전트 시대의 코드 호스팅: Cursor ‘Origin’은 왜 등장했나

AI 코딩 도구로 빠르게 성장한 Cursor가 이제 코드 에디터를 넘어 코드 호스팅 영역까지 확장하고 있습니다. 2026년 8월 17일 Cursor는 Origin이라는 새로운 코드 호스팅 서비스를 early beta로 공개했습니다. 쉽게 말하면 GitHub처럼 Git 저장소를 만들고, 코드를 올리고, Pull Request(PR)를 만들고 리뷰할 수 있는 서비스입니다. 그런데 단순히 "Cursor가 GitHub 비슷한

By JHL

코딩 에이전트에 1,000억 토큰을 써보니, 병목은 모델 밖에 있었다

Codex 화면에 집계된 누적 사용량은 약 866억 토큰이었다. Claude는 내가 확인할 수 있었던 로컬 머신의 집계값만 합쳐도 약 127억 토큰이었다. 다만 Claude는 여러 워크스테이션과 서버에서 사용했고, 중간에 사용량 데이터를 한 번 날려버리기도 했다. 누락된 머신과 기간을 감안하면 실제 사용량은 300억 토큰을 넘었을 가능성이 높다. 여기에 Ollama Cloud로 사용한 GLM, Qwen

By JHL

AI가 짜준 코드가 배포 속도를 높였다면, 이제는 '신뢰성 가드레일'을 세울 때입니다

최근 많은 팀이 AI 코딩 어시스턴트나 에이전트를 도입하면서 코드 생산 속도가 비약적으로 상승했습니다. 하지만 속도가 빨라졌다는 것은 그만큼 잠재적인 결함이 프로덕션 환경으로 유입되는 속도 또한 빨라졌음을 의미합니다. DevOps.com의 이번 글은 AI가 생성한 코드의 특성과 그로 인해 발생하는 새로운 유형의 리스크, 그리고 이를 제어하기 위한 '신뢰성 가드레일(Reliability Guardrails)

By JHL

LLM 시대, 프롬프트 엔지니어링보다 '도메인 전문성'이 더 강력한 무기인 이유

최근 AI 도구들이 비약적으로 발전하면서 '프롬프트 엔지니어링'이라는 기술적 기법에 많은 관심이 쏠렸습니다. 하지만 실제 현업에서 LLM을 극한으로 활용해 고도의 결과물을 만들어내는 사람들의 공통점은 정교한 프롬프트 템플릿을 쓰는 능력이 아니라, 해당 분야에 대한 깊은 '도메인 전문성'을 갖추고 있다는 점입니다. 많은 이들이 LLM이 지식의 격차를 줄여준다고

By JHL