Chapter 3.5 connection-oriented transport: TCP

Computer Networking : A Top Down Approach 7th Edition, Global Edition Jim Kurose, Keith Ross

Point-to-Point

TCP는 연결지향(Connection-oriented) 프로토콜이다. 즉, 1대1 연결 상태를 유지하여 통신하는 것을 말한다.

이는 point-to-point 로써, 한명의 송신자에는 한명의 수신자만 있음을 의미한다.

1대 다수의 통신인 multicasting이 불가능하다.

 

reliable, in-order byte stream

tcp는 메시지의 경계(또는 구분)가 없다.

신뢰적인 순서 보장 스트림이 있다(reliable, in-order byte stream)

즉, Application에서 준 데이터는 순서대로 정확히 전달된다.

 

pipelined

TCP 혼잡(congestion)과 flow control(흐름 제어)에 따라 Window Size를 설정한다.

 

full duplex data

동일한 연결에서 양쪽에서 보내는 것과 받는 것이 동시에 가능하다.

-전이중 방식

MSS(Maximum Segment Size) : segment에 담길 수 있는 최대 data 양

Link layer의 가장 큰 frame에 의해 결정된다.

- Segment에서 layer data의 크기 제한

- 사이즈가 큰 파일을 전송할 때, MSS 크기로 파일을 자름.

 

Connection-oriented

3-way handshake를 수행하며, 상호 간에 통신을 초기화 하는데

Window Size, buffer 할당, 순서번호(seq#) 등이 결정된다.

양 side에 3개의 요소가 생긴다.

( buffer, variable, socket connection)

 

 

flow controlled

송신자는 수신자가 받을 수 있을 만큼만 보내고 receiver가 전송량을 통제한다.


TCP segment structure

source port, dest port : 출발지, 목적지 포트로 다중화/역다중화에 사용

---

sequence number : 순서번호 필드

---

acknowledgement number : 확인 응답번호 필드 ( 500 일 경우, 499까지는 받았다는 뜻)

---

URG : 일반적으로 사용하지 않는다(generally not used)

ACK

PSH : 일반적으로 사용하지 않는다(generally not used)

R(RST) : reset

S(SYN) : sync

F(FIN) : finish

receive window :수신측이 갖고 있는 buffer size. flow control 시 사용

---

checksum : 체크섬 오류 검출

Urg data pointer : 현재 사용하지 않음

---

otions

---

application data


TCP seq numbers, ACKs

seq number : Segment의 첫 번째 byte의 stream에서의 byte 순서 번호를 의미.

   예) 데이터 스트림이 500,000byte이고, MSS가 100일 경우 500개의 Segment가 생성.

        이 때, 첫 번째 Segment의 seq number은 0,

        두 번째 세그먼트의 순서번호는 1000

   

ACKs : 다음에 받을 것으로 예상되는 seq number

         -TCP는 오직 첫 missing byte만을 ACK 하기 때문에 Cumulative ACK 가 가능하다.

  예) 수신자가 0~535byte를 포함하는 Segment와 900~1000byte를 포함하는 Segment를 수신받고

       536~899byte는 수신 받지 못했을 경우, 536번째 byte를 수신하기 위해

      다은 세그먼트 확인 응답 번호 필드(Acknowledgement num)를 536으로 지정한다.

 

Q. 순서가 틀린 Segment를 수신한 경우는?

- 특별히 정해둔 규칙이 없음.(프로그래머의 마음대로)

- 즉시 버리거나 ,buffering 하는 방법이 존재

 

 

위 그림에서 호스트 A는 seq num가 42, 호스트 B의 seq num은 79이다.

호스트 A는 42번째 byte를 보내면서 79번째 byte를 호스트 B에게 요구한다.

호스트 B는 79번째 byte를 보내면서 다음으로 원하는 byte인 43번째 byte를 호스트 A에게 요구한다.

 

마지막에 data가 없는데 Seq num을 가지는 경우는 TCP header에는 seq number field를 채워야하기 때문에

ACK로 온 number을 Seq number에 넣어 보낸 것이다.

 


TCP round trip time, timeout

tcp의 timeout은 어떻게 설정할까?

- RTT(round trip time) 보다는 길어야 한다.

- 너무 짧을 경우 : 불필요한 재전송이 일어난다.

- 너무 큰 경우 : Segment 손실에 대한 대응이 늦어진다.

 

RTT(round trip time)의 측정 방법

- Sample RTT : segment가 보내진 후로부터 해당 segment의 ACK가 도착하기까지 걸린 RTT.

재전송된 Packet은 RTT를 측정하지 않는다. 

Estimated RTT는 매우 smooth하게 변경된다. 변경폭이 크지 않다.

Sample RTT를 통해 평균을 내어 Estimated RTT를 측정한다.

 

Exponential weighted moving average를 사용한다.

 

a(알파)값은 대략 0.125로 잡는다.

 

RTT 추청지 예제

timeout 설정

- Estimated RTT보다 약간의 여유값을 더한 값으로 설정

- Dev RTT - Sample RTT 와 Estimated RTT의 차에 의해 결정된다.

   : Sample RTT가 Estimated RTT로부터 얼마나 벗어나는지에 대한 예측

이때, b(베타)의 권장값은 0.25이다.

 

이제 이 Estimated RTT와 Dev RTT를 이용해 timeout interval을 계산한다.

 

실제 timeout 설정

 

+ Recent posts