Search
Duplicate
🌐

TCP Overview 1️⃣

간단소개
TCP의 특징과 작동 원리
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
네트워크
Scrap
태그
TCP
network
9 more properties

TCP: Overview

point-to-point: 프로세스와 프로세스 간(한 쌍의 소켓끼리)의 1:1 통신을 관장한다.
reliable, in-order byte stream: 유실되지 않고 순서대로 간다.
pipelined: 한 꺼번에 데이터를 보낸다.
sender & receiver buffers: 센더이면서, 리시버의 역할을 한다.
full duplex data: 같은 연결 내에서 양방향 데이터 전송
connection-oriented: 연결을 통해 센더와 리시버 사이의 전달이 발생함(handshaking)
flow controlled: 윈도우 크기만큼 데이터를 보내되, 리시버의 소화 능력에 맞춰서 보내야한다.

TCP segment structure

Application Layer의 전송단위: Message
Transport Layer의 전송단위: Segment[Header(부가적인 정보) | Data(= Message)]
Network Layer의 전송단위: Packet[Header | Data(= Segment)]
Link Layer의 전송단위: Frame[Header | Data(= Packet)

TCP seq # and ACK

Seq #

보내는 Segment 내의 byte stream에서 첫 번째 byte 번호

ACK

성공적으로 받은 마지막 byte의 다음 번호(현재 기다리고 있는 번호)
위 예시에서 보내는 Seq #, ACK가 번호가 다른 이유는 TCP에서는 각각의 소켓이 센더 / 리시버 버퍼를 가지기 때문에 Host A의 센더는 42번을 보내고 리시버는 ACK으로 79번을 받아야 할 차례이기 때문이다. (일반적으로 프로토콜은 헤더를 가진다. Data: 하고자 하는 말, Header: 부가적인 설명)

Timeout - function of RTT(round trip time)

How to set TCP timeout value?

longer than RTT: 하지만 RTT 값은 너무 다양하다.
too short: 필요없는 재전송을 함으로 오버헤드가 많이 발생한다.
too long: Segment loss에 대한 반응이 늦어진다.

How to estimate RTT?

SampleRTT: ACK를 받을 때 까지의 시간을 측정한다.
SampleRTT는 너무 다양하기 때문에 현재 SampleRTT 만으로는 불가능하다.
EstimatedRTT = (1 - a) * EstimatedRTT + a * SampleRTT
EstimatedRTT로 Timeout 시키는 것은, Timeout이 과다하게 발생할 수 있기 때문에
실제로는 아래와 같이 사용된다.

TCP reliable data transfer

Piepelined segments: 데이터를 한 번에 다량 발송한다.
Cumulative acks: ACK가 왔을 때, 해당 ACK 번호 전까지는 데이터를 잘 받았다.
Single retransmission timer: TCP는 타이머를 하나만 가진다.

TCP: retransmission scenarios