Overview
TCP의 전체적인 특징에 대해서 살펴보면 아래와 같다.
point-to-point: 하나의 송신자와 하나의 수신자가 있다.
reliable, in-order byte steam: 메시지 경계가 없다. 이는 TCP가 데이터를 연속된 바이트 스트림으로 전송하며, 개별 메시지 구분 없이 데이터를 순서대로 전송한다는 것을 의미한다.
pipelined: TCP의 혼잡 제어와 흐름 제어는 윈도우 크기를 설정한다. 이 윈도우 크기는 얼마나 많은 데이터를 한 번에 전송할 수 있는지를 결정하며, 네트워크의 혼잡 상태에 따라 동적으로 조절된다.
full duplex data: 양방향 데이터 흐름이 동일한 연결에서 이루어진다. 즉, 송신자와 수신자가 동시에 데이터를 전송하고 받을 수 있습니다. MSS는 최대 세그먼트 크기를 의미하며, TCP 세그먼트의 최대 데이터 길이를 결정한다.
connection-oriented: 핸드쉐이킹 과정을 통해 제어 메시지를 교환함으로써 송신자와 수신자의 상태를 초기화하고 데이터 교환을 시작한다.
flow controlled: 송신자는 수신자를 압도하지 않도록 데이터 전송 속도를 조절한다. 이는 수신자가 받아들일 수 있는 데이터의 양을 초과하여 전송되는 것을 방지하기 위한 것이다.
이러한 특징들은 TCP 프로토콜이 신뢰성 있고 정확한 데이터 전송을 보장하기 위한 방법들이다.
TCP segment structure
아래는 TCP segment 구조이다.
조금 설명을 해보자면 ACK Flag가 1이면 실제 ACK를 보내는 것이고, ACK Flag가 0이면 시작하는 상태여서 ACK가 없기 때문에 아무거나 보낸다는 뜻이다. P가 1이면 데이터를 받으면 바로 상위계층으로 올리라는 뜻이다. RST가 1이면 네트워크가 꼬였을때 네트워크를 리셋하겠다는 것이다. SYN이 1인 경우는 connection을 맺는 handshaking 과정에서만 나타난다. FIN은 통신을 종료한다는 뜻으로 FIN을 1로 보낸 사람만 전송이 멈추고 수신은 할 수 있는 상태가 된다. 혹시 상대가 보낸 내용이 delay로 아직 도착하지 않았을 수 있기 때문이다.
Sequence number는 세그먼트의 데이터에서 첫 바이트에 나타나는데 이 값이 현재 데이터의 순서를 알려준다.
Acknowledgement number는 예상되는 혹은 받기를 기대하고 있는 다음 바이트의 시퀀스 넘버이다. 따라서 아래와 같이 신호가 제대로 오가면 상대가 보내준 sequence number는 내가 보내주는 ack number가 된다.
TCP의 RTT와 Timeout
TCP에서 Timeout 시간을 적절히 정하는 것은 매우 중요하다. 우선 RTT값보다 길어야 data가 도착하기 전에 섣부르게 timeout을 선언해버리고 재전송하는 비효율을 막을 수 있다. 하지만 너무 길어지는 경우 대응이 너무 늦어서 이 또한 network의 throughput을 충분히 사용하지 못하여 비효율적이다. 따라서 RTT의 평균과 분산을 이용하여 적절한 timeout value를 설정한다. 이때 단순히 평균과 분산을 계산하는 것은 효율성이 너무 떨어져서 아래와 같이 weighted average와 standard deviation을 이용한다.
Retransmission
TCP는 reliable 하기 위해서 retransmission도 철저히 진행된다. 우선 timeout 뿐만 아니라 duplicate acks들이 들어와도 retransmission의 trigger가 된다. 이 과정을 FSM으로 보면 아래와 같다.
몇몇 retransmission 시나리를 살펴보자.
위와 같은 케이스들에서 retransmission이 진행된다.
보통 cumulative ACK의 경우 기준을 3개의 ACK로 잡는다. 아래와 같이 3개의 ACK가 들어오자 timeout을 기다리는 것이 아니라 바로 문제가 생긴 data를 재전송해준다.
3-way handshake
Connection을 요청하고 수락하는 2-way handshake는 아래와 같은 실패 가능한 시나리오가 존재한다.
따라서 TCP는 3-way handshake를 지원한다.
아래는 3-way handshake의 FSM이다.
closing connection
TCP congestion control
Congestion이란 네트워크상에 너무 많은 source가 전송되고 있어서 네트워크가 감당을 못하는 상황이다. 이때 TCP가 congestion을 control하는 과정을 간단하게 그림과 함께 필기한 내용을 통해 살펴보자.
이번 필기는 손목에 주사를 맞고 바로 들은 수업에서 필기를 해서 특히나 정말 못썼다....
중간고사를 잘 준비하여 잘치고 학기 후반부에 이어서 공부를 진행해보자!
'Quality control (Univ. Study) > Computer Network' 카테고리의 다른 글
Internet Protocol(1) (0) | 2023.11.01 |
---|---|
Network Layer (0) | 2023.10.27 |
Pipelined protocols (1) | 2023.10.10 |
Reliable data transfer design (0) | 2023.10.06 |
Transport-layer services (0) | 2023.10.05 |