<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>TCP on Kelly Dev</title><link>https://kelly-chui.github.io/tags/tcp/</link><description>Recent content in TCP on Kelly Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 31 Jan 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://kelly-chui.github.io/tags/tcp/index.xml" rel="self" type="application/rss+xml"/><item><title>Network. TCP Flow &amp; Congestion Control</title><link>https://kelly-chui.github.io/posts/cs-network-tcp-flow-congestion-control/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/cs-network-tcp-flow-congestion-control/</guid><description>&lt;h2 id="개요"&gt;개요&lt;/h2&gt;
&lt;p&gt;TCP는 신뢰성 있는 데이터 전송을 위해 흐름 제어(Flow Control) 와 혼잡 제어(Congestion Control) 기능을 제공함.&lt;/p&gt;
&lt;p&gt;흐름 제어는 송신자와 수신자 사이의 데이터 전송량을 조절하고, 혼잡 제어는 네트워크 전체의 혼잡을 방지하기 위한 메커니즘이다.&lt;/p&gt;
&lt;h2 id="흐름-제어-flow-control"&gt;흐름 제어 (Flow Control)&lt;/h2&gt;
&lt;p&gt;송신자와 수신자의 처리 속도 차이로 인해 데이터가 손실되지 않도록 전송량을 조절하는 기능이다.&lt;/p&gt;
&lt;h3 id="정지-대기-stop-and-wait"&gt;정지-대기 (Stop-and-Wait)&lt;/h3&gt;
&lt;p&gt;수신 측의 ACK를 받은 후에 다음 패킷을 전송하는 방식, 한 번에 하나의 패킷만을 전송할 수 있음&lt;/p&gt;
&lt;h3 id="슬라이딩-윈도우-sliding-window"&gt;슬라이딩 윈도우 (Sliding Window)&lt;/h3&gt;
&lt;p&gt;ACK를 이용해서 송신 데이터의 양을 조절하는 방식, ACK를 받지 않더라도 미리 정해진 패킷의 수 만큼 연속적으로 전송하는 방식&lt;/p&gt;</description></item><item><title>Network. TCP vs. UDP</title><link>https://kelly-chui.github.io/posts/cs-network-tcp-vs-udp/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/cs-network-tcp-vs-udp/</guid><description>&lt;h2 id="tcp-vs-udp"&gt;TCP vs. UDP&lt;/h2&gt;
&lt;p&gt;TCP와 UDP는 모두 전송 계층에서 동작하는 프로토콜이지만, 연결 방식과 데이터 전송 방식이 다르다.&lt;/p&gt;
&lt;p&gt;TCP는 신뢰성을 우선으로 하고, UDP는 속도와 실시간성을 우선으로 설계되었다.&lt;/p&gt;
&lt;h2 id="비교"&gt;비교&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;구분&lt;/th&gt;
&lt;th&gt;TCP&lt;/th&gt;
&lt;th&gt;UDP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;연결 방식&lt;/td&gt;
&lt;td&gt;연결 지향 (Connection-oriented)&lt;/td&gt;
&lt;td&gt;비연결형 (Connectionless)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;신뢰성&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;순서 보장&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터 전송 방식&lt;/td&gt;
&lt;td&gt;스트림(Stream)&lt;/td&gt;
&lt;td&gt;데이터그램(Datagram)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;흐름 제어&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;혼잡 제어&lt;/td&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;헤더 크기&lt;/td&gt;
&lt;td&gt;20~60 Byte&lt;/td&gt;
&lt;td&gt;8 Byte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;속도&lt;/td&gt;
&lt;td&gt;상대적으로 느림&lt;/td&gt;
&lt;td&gt;상대적으로 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="언제-사용할까"&gt;언제 사용할까?&lt;/h2&gt;
&lt;h3 id="tcp"&gt;TCP&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;웹 서비스 (HTTP, HTTPS)&lt;/li&gt;
&lt;li&gt;이메일 (SMTP)&lt;/li&gt;
&lt;li&gt;파일 전송 (FTP)&lt;/li&gt;
&lt;li&gt;데이터의 정확성이 중요한 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="udp"&gt;UDP&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;실시간 스트리밍&lt;/li&gt;
&lt;li&gt;VoIP&lt;/li&gt;
&lt;li&gt;온라인 게임&lt;/li&gt;
&lt;li&gt;빠른 응답이 중요한 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="선택-기준"&gt;선택 기준&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;데이터의 정확성과 순서가 중요하다면 TCP를 사용한다.&lt;/li&gt;
&lt;li&gt;일부 패킷 손실이 발생하더라도 실시간성이 더 중요하다면 UDP를 사용한다.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Network. TCP(Transmission Control Protocol)</title><link>https://kelly-chui.github.io/posts/cs-network-tcp/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/cs-network-tcp/</guid><description>&lt;h2 id="소개"&gt;소개&lt;/h2&gt;
&lt;p&gt;TCP(Transmission Control Protocol)는 전송 계층(L4)에서 동작하는 연결 지향(Connection-oriented) 프로토콜이다.&lt;/p&gt;
&lt;p&gt;신뢰성 있는 데이터 전송을 위해 연결 설정, 순서 제어, 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공한다.&lt;/p&gt;
&lt;h2 id="특징"&gt;특징&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;신뢰성 있는 연결형 서비스 제공&lt;/li&gt;
&lt;li&gt;포트 번호를 이용한 다중화, 순서 제어, 오류 제어, 흐름 제어, 혼잡 제어 기능 제공&lt;/li&gt;
&lt;li&gt;애플리케이션에는 메시지 경계를 보존하지 않는 연속된 바이트 스트림을 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tcp-헤더"&gt;TCP 헤더&lt;/h3&gt;
&lt;p&gt;TCP 세그먼트 앞부분에 위치한 데이터 전송을 위한 제어 정보를 포함하는 구조, 20바이트로 구성되며 최대 60바이트로 확장 가능&lt;/p&gt;</description></item><item><title>Network. Network 오버뷰</title><link>https://kelly-chui.github.io/posts/cs-network-overview/</link><pubDate>Tue, 30 Apr 2024 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/cs-network-overview/</guid><description>&lt;h2 id="네트워크"&gt;네트워크&lt;/h2&gt;
&lt;p&gt;노드와 링크(엣지)들이 서로 연결되어 리소스를 공유하는 구조이며, 그래프 형태로 표현할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;노드: 서버, 라우터, 스위치&lt;/li&gt;
&lt;li&gt;링크: 유선 or 무선&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="키워드"&gt;키워드&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;네트워크 토폴로지&lt;/li&gt;
&lt;li&gt;클라이언트와 서버&lt;/li&gt;
&lt;li&gt;패킷&lt;/li&gt;
&lt;li&gt;주소와 전송 방식&lt;/li&gt;
&lt;li&gt;프로토콜&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="네트워크-참조-모델"&gt;네트워크 참조 모델&lt;/h2&gt;
&lt;p&gt;통신이 이루어지는 단계를 계층적으로 표현한 모델&lt;/p&gt;
&lt;h3 id="osi-model"&gt;OSI Model&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;계층&lt;/th&gt;
&lt;th&gt;대표 역할&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Application&lt;/td&gt;
&lt;td&gt;HTTP, DNS 등 네트워크 서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Presentation&lt;/td&gt;
&lt;td&gt;인코딩, 압축, 암호화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session&lt;/td&gt;
&lt;td&gt;세션 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transport&lt;/td&gt;
&lt;td&gt;TCP, UDP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network&lt;/td&gt;
&lt;td&gt;라우팅, IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Link&lt;/td&gt;
&lt;td&gt;같은 LAN에서의 통신&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Physical&lt;/td&gt;
&lt;td&gt;비트 전송&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="tcpip-model"&gt;TCP/IP Model&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;응용 계층(Application Layer): OSI 모델에서 세션, 표현, 응용 계층&lt;/li&gt;
&lt;li&gt;전송 계층(Transport Layer): OSI 모델에서 전송 계층&lt;/li&gt;
&lt;li&gt;인터넷 계층(Internet Layer): OSI 모델에서 네트워크 계층&lt;/li&gt;
&lt;li&gt;네트워크 액세스 계층(Network Access Layer): OSI 모델에서 데이터 링크 계층 (+ 물리 계층)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="캡슐화와-역캡슐화encapsulation-decapsulation"&gt;캡슐화와 역캡슐화(Encapsulation, Decapsulation)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;캡슐화
&lt;ul&gt;
&lt;li&gt;데이터가 계층를 거치면서 헤더가 추가되는 과정, 상위 계층로부터 내려받은 패킷을 페이로드로 하고, 각 계층에 포함된 프로토콜의 헤더나 트레일러를 덧붙이는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;역캡슐화
&lt;ul&gt;
&lt;li&gt;캡슐화 과정에서 덧붙인 헤더들을 각 계층에서 확인한 뒤, 제거하는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;각 계층마다 패킷을 부르는 명칭이 다르다.&lt;/p&gt;</description></item><item><title>TCP/IP 4계층</title><link>https://kelly-chui.github.io/posts/cs-network-tcp-ip-layer-4/</link><pubDate>Wed, 13 Mar 2024 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/cs-network-tcp-ip-layer-4/</guid><description>&lt;h2 id="소개"&gt;소개&lt;/h2&gt;
&lt;p&gt;TCP/IP 4계층은 OSI 7계층과 더불어 인터넷에서 데이터를 주고받기 위해 사용하는 대표적인 네트워크 참조 모델이다.&lt;/p&gt;
&lt;p&gt;네트워크 통신 과정을 역할에 따라 계층으로 분리하여 관리하며, 각 계층은 독립적인 역할을 수행한다.&lt;/p&gt;
&lt;p&gt;덕분에 특정 계층의 구현이 변경되더라도 다른 계층에 미치는 영향을 최소화할 수 있다.&lt;/p&gt;
&lt;h2 id="계층-구성"&gt;계층 구성&lt;/h2&gt;
&lt;h3 id="애플리케이션application"&gt;애플리케이션(Application)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;대표 프로토콜: HTTP, HTTPS, DNS, FTP, SMTP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;응용 프로그램이 사용되는 프로토콜 계층 이메일, 웹 서비스 등 서비스를 실질적으로 제공&lt;/p&gt;
&lt;h3 id="전송transport"&gt;전송(Transport)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;대표 프로토콜: TCP, UDP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;송신자와 수신자 간의 데이터 전송을 담당하는 계층&lt;/p&gt;</description></item></channel></rss>