TCP 특징
- Point to Point : 소켓 한쌍끼리의 통신을 책임 진다
- 신뢰적으로 순서대로 전송이 된다.
- 파이프 라인 형태로 감
- 데이터가 양방향으로 작용한다 둘다 sender receiver될수 있음.(duplex data)
- MSS : maximum segment size 윈도우 사이즈 만큼이 있음 . 이것에 해당하는 버퍼가 receiver에 필요함.둘다 리시버가 될 수 있기 때문에 버퍼가 각자 있음
- 연결 기반 3-way handshaking
- Flow control : receiver가 받아드릴수 있을 만큼 보내야됨
- Congestion control: 네트워크가 받아 드릴 수 있을 만큼 보내야됨
- 전송 단위는 세그먼트이며 , 트렌스포트 계층임.
- Ack가 Cumulate Ack임 (다음 순서를 Ack의 번호로 보냄)
- Fast retransmit( timeout터지기전에 Ack가 오고나서 중복 3번오면 유실로판단 : 총 4번)
TCP 세그먼트 구조
- checksum : 오면서 에러가 있었는지 없었는지
- Receive window : 리시브에 얼마나 공간이 남았는지 알려줘야됨
TCP Reliable Transmission
- Timeout
타임아웃을 RTT로 설정하기에는 부족함 .
RTT는 모두 다르며 , 심지어 같은 경로를 거쳐 갔다 온다고 하더라도 다름
(그때 그때 라우터의 큐잉 딜레이가 다르기 때문) .
추정 RTT에 + 알파를 해서 정함.
- 3 Dup ACK
중간에 하나가 빠진경우 , fast retransmit 이라고도 부름
Timeout터지기전에 ack가 오고나서 중복 3번오면 유실로판단 : 총 4번
타임 아웃보다는 심각한 문제는 아님
TCP Flow Control
개념 : sender 는 receiver의 버퍼를 오버플로우 하게 많이 보내지 않는다
샌더도 윈도우 사이즈가 있겠지만, 기본적으로 리시버의 남은 버퍼만큼 샌더가 보내야됨
그래서 그 남은 공간을 알려줄 tcp헤더에 리시브 윈도우가 있음
플로우 컨트롤은 보내는 속도 조절? 양조절? 둘다 관련이 있으면 양이 적으면 속도도 적어지기 때문.
구현 자체는 단순한편
TCP 3-way handshaking
포인트 투 포인트 연결을 하여 데이터를 보내려면 연결을 하는 작업이 필요하고 서로의 시퀀스넘버가 몇번인지도 교류해야한다. 3-way handshake를 함으로써 이과정을 수행함.
Sender 입장:
SYN msg 보냄 seqence넘버도 같이 알려줌
SYNACK 받음
ACK 보냄
3가지 절차를 이루면 이 이후부터는 연결이 된 것으로 DATA를 보내게 된다. 보통 마지막 ack부터 데이터를 실어 보냄.
TCP Sender의 전송 속도 양 & 속도
Min(Net, Recv) 값에 맞추어야 한다.
하지만 recv의 남은 버퍼는 헤더에 포함되어 오기 때문에 어느정도 알 수가 있지만, network의 혼잡도는 정확히 알 수가 없다.
Network의 혼잡도를 보고 제어하는것이 Congestion control
Congestion Control
네트워크의 복잡도를 컨트롤 하기 위하여 대표적으로 두가지 방법을 씀
- End - end congestion control : 네트워크에서 피드백을 주지 않고 알아서 유추하는 방법 (TCP)
- Network-assisted congestion control : 라우터가 종단시스템에게 피드백을 주는 방법
TCP에서 둘 중에 현재 쓰이는건 첫번째.
피드백을 주지 않아도 보내면서 전송이 안된다던가 느리게 된다는 횟수로 유추할 수 있음 그렇기 때문에 정확하지 않음. 한마디로 intuition임
그렇다면 어떻게 유추를 할 것인가 ? 3가지 단계를 거쳐 유추함
-
Slow start 처음엔 적은양의 데이터를 보냄
-
Additive increase (exponential하게 증가 시킴)
-
Multiplicative decrease (절반으로 줄여버림)
Threshold에 도달하기 전까지는 익스포넨셜 하게 증가
Threshold에 도달하면 리니어하게 증가
TCP Tahoe vs TCP Reno
Tahoe는 1980년대 방법
Reno는 요즘 방법
Timeout일 경우 큰 문제라서 Tahoe 방식과 똑같이 작용
3-dup ack일 경우 큰 문제는 아니므로 Threshold만큼만 줄이고 리니어하게 증가 시킨다.
신기하게도 사람이 많아져도 이 방법을 하면 TCP는 네트워크를 결국 Fairness하게 이용하게 만든다.
'ComputerScience' 카테고리의 다른 글
[네트워크] Network Layer - 네트워크 계층 (0) | 2021.01.07 |
---|---|
[1장] 운영체제 - Operating System Concepts 공룡책 (0) | 2021.01.07 |
알고리즘 정리 (0) | 2020.12.14 |
마이크로프로세서 용어정리 (0) | 2020.12.07 |
[소프트웨어 공학] 3. UML Class Diagram (0) | 2020.09.28 |