본문 바로가기

컴퓨터 네트워크/Computer Networking 정리

CH3 : Transport Layer (3)

* 이 글에 관련된 모든 내용은 Computer Networking A Top-Down Approach 7th에서 가져온 내용이다. *

 

이전글에서는 UDP와 ARQ에 대해서 배웠다.

이번글에서는 TCP에 대해 자세하게 다룰 예정이다.

 

TCP(Transmission Control Protocol)


- 여러번 얘기했듯이 TCP는 연결지향형 프로토콜이다. 

3-handshaking을 통해 상호간의 connection을 생성한 뒤 소통한다.

 

- 1:1방식의 프로토콜이다.

 

- full-duplex data 방식을 지원한다.

full-duplex와 다른 개념에는 half-duplex, simplex가 있다.

simplex : 단방향 통신, A는 B에게 또는 B는 A에게로만 통신할 수 있음

half-duplex : 양방향 통신이지만 A가 B에게 전달하는 중에는 B는 A에게 전달할 수 없고 그 반대도 마찬가지

full-duplex는 양방향 통신이면서 서로 데이터 전송이 동시에 가능하다.

 

- 또한 MSS(Maximum Segment Size)가 정해져있다. 

여기서 말하는 segment는 Layer4의 PDU(트랜스포트 레이어의 PDU)를 칭하는 segment가 아닌 Layer4의 PDU에서 헤더부분을 뺀 payload만을 말한다.

 

- reliable하고 in-order byte stream이다.

TCP가 reliable한 이유는 많이 설명했다. 또한 TCP는 순차적인 바이트 스트림을 지원한다.

각 스트림에는 스트림넘버가 붙어있고 SW(Sliding Window) 프로토콜을 통해 스트림형식으로 데이터를 전송한다. 때문에 message boundary는 없다.

 

- Flow Control을 지원한다.

sender는 receiver의 buffer에서 overflow가 나지 않도록 전송을 조절한다.

 

- Congestion Control을 지원한다.

TCP내부에서 데이터를 전송받는 네트워크쪽에서의 congestion이 일어나지 않게한다.

 

TCP 구조


TCP는 헤더는 20bytes(위에 쓰여져있는) + 40bytes(option)으로 총 60bytes까지 사용가능하다. 

8byte에 불과했던 UDP의 헤더보다 많이 큰 것을 볼 수 있다.

 - seq number와 ack number는 ARQ에 필요한 것이다.

 - HLEN은 헤더의 사이즈를 나타낸다.

 - WS는 flow control에 사용된다.

 - Checksum은 에러판별에 사용된다. (UDP에서와 동일)

 - 그리고 Urgent pointer는 긴급한 내용이 있을 시 사용한다. 

urgent data는 segment(payload)맨 앞에 붙는데 이때 urgent pointer는 urgent data의 처음을 나타낼 수도 있고 끝을 나타낼수도 있다. (표준에 따라 다르다고 한다.)

 - Option에는 MSS, window scale factor, timestamp 등이 있다.

 

 

Seq num에 사용되는 비트수가 상당히 크다는 것을 볼 수 있다. (우리가 이전에 살펴보았던 ARQ매커니즘에는 저렇게 큰 bits가 필요하지 않아보였다)

왜냐하면 TCP에서는 segment별로가 아닌 byte별로 seq num을 붙이기 때문이다. 이때, segment의 seq num은 해당 segment의 가장 앞에있는 byte의 seq num으로 한다.

 

flag bits(위에 빨간색 부분)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RTT(Round Trip Time)


RTT는 요청을 보냈다가 응답이 돌아오는 시간을 말한다.

timeout value는 RTT보다 커야한다. 생각해보면 당연하다.

하지만 네트워크상의 트래픽은 우리가 예측할 수 없는 문제들이 생길 수 있기 때문에 RTT는 변동이 너무 크다.

 

만약 timeout value가 RTT에 비해 매우 작다면 불필요한 재전송이 너무 많이 일어날 것이고,

timeout value가 RTT에 비해 매우 크다면 sement의 loss에 대한 리액션이 너무 느릴 것이다.

 

때문에 timeout value를 정하기 위한 또는 RTT를 예상하기 위한 고도의 알고리즘 기술이 필요하다.

 

이전에 많이 사용되었던 RTT estimation method는 다음과 같다.

이전동안 측정해온 RTT의 평균을 내는 것이다.

이때, 오래된 RTT값들은 가중치를 낮게두고 비교적 최근에 측정된 RTT값들에 가중치를 높게두어서 최대한 정확하게 예측하는 것이다.

보통 알파값은 7/8이다. 

 

이때 정해진 timeout value는 추정된 RTT에 2배를 한다.

그러나 이 값은 너무크다고 판단되어 최근에는 타이트하게 줄인다고 한다.

 

이 측정방식을 통해 RTT를 측정하면 실제 Sample RTT와 예측된 RTT의 차이는 다음과 같다.

 

이에 대해 더 향상된 알고리즘을 Jacobson님께서 만드셨다.

표준편차를 이용하는 방식인데 결론만 말하자면 RTT의 추정값과 RTT분산에 대한 추정값에 4를 곱하여 timeout value를 사용한당

'컴퓨터 네트워크 > Computer Networking 정리' 카테고리의 다른 글

CH3 : Transport Layer (5)  (0) 2021.10.18
CH3 : Transport Layer (4)  (0) 2021.10.18
CH3 : Transport Layer (2)  (0) 2021.10.17
CH3 : Transport Layer (1)  (0) 2021.10.17
CH2 : Application Layer (6)  (0) 2021.10.17