ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3.5 연결지향형 트랜스포트: TCP
    Computer Networking 2018. 12. 11. 01:34

    1. TCP 연결

     - connection-oriented (연결지향형) -> three-way handshake: parameter 설정하기 위한 사전 세그먼트들을 보내야 함


     - TCP '연결' 

    1) 오직 종단시스템에서만 동작하고 중간의 라우터, 브리지에서는 동작하지 않음

    2) 전이중(full-duplex) 서비스를 제공한다 -> 두 호스트의 application layer 사이에 양방향 data flow

    3) pipelined - congestion control, flow control set window size

    4) point-to-point - one sender, one receiver

    5) MSS (maximum segment size): 


     - TCP 송수신

    data write -> (socket) -> TCP 전송 buffer -> (network) ->TCP 수신 buffer -> (socket) -> data read



    2. TCP 세그먼트 구조


    - MSS 는 세그먼트의 data 필드의 크기를 제한 (용량 큰 파일의 경우 MSS 단위로 파일을 분할)

    - seq num, ack num: 신뢰적인 data 서비스 구현에서 송수신자가 사용

    - reveive window: flow control에 사용

    - header length: TCP 헤더의 길이

    - option: MSS 길이 등을 협상

    - flag: ACK(응답 유효), RST, SYN, FIN(연결 설정 및 해제), PSH(상위 계층에 즉시 전달), URG(긴급 data)



     # seq num, ack num


    MSS가 1,000 bytes 이고 첫 번째 바이트가 0으로 설정되었을 때, 각 세그먼트의 seq num 은 0, 1,000, 2,000 ...


    ack num 은 수신자가 다음에 받을 것으로 기대되는 seq num

    ex) 0~535, 900~1,000수신 -> ack num은 536 (<- 누적 확인응답(cumulative acknowledgment))  



    3. RTT 예측과 time out

      - time out 값이 RTT에 비해 너무 길거나 짧을 경우, 세그먼트 손실에 반응이 느려지거나 불필요한 재전송이 발생할 수 있다.


     1) RTT 예측

    SampleRTT - 송신 segment의 ACK가 도착하기까지의 시간 (재전송은 측정하지 않음). 해당 값은 segment 마다 다르기 때문에 평균값을 이용한다.


    (alpha 값은 대개 0.125 로 계산한다.)



     DevRTT - RTT의 변화율


    * 재전송 타임아웃 주기의 설정 및 관리



    4. 신뢰적인 데이터 전달


    - 신뢰적인 데이터 전달 서비스 : data stream이 손상되지 않았으며, 손실이나 중복이 없고 순서가 유지된다.


             

     - timeout 주기의 두 배화 : timeout 발생 시, timeout 의 주기를 두 배로 증가시킨다.

     - fast retransmit : 중복 ACK(기대 수신 seq num보다 큰 값을 받은 경우, 마지막으로 받은 정상 세그먼트의 seq num으로 응답)


     event at reveiver

    TCP receiver action 

    순서가 맞는 세그먼트의 도착. 이전 세그먼트들은 모두 ACK 전송 완료

    delayed ACK. (다른 순서 맞는 세그먼트의 도착 잠시 대기 후 응답) 

     순서가 맞는 세그먼트 도착. ACK 전송 대기 중인 이전 세그먼트 존재

    하나의 누적된 ACK

    기다리는 것보다 높은 순서의 세그먼트 도착 

    즉시 대기 바이트를 나타내는 중복 ACK

    격차를 채우는 세그먼트 도착

    즉시 ACK 전송 


    - TCP 오류 복구 매커니즘은 GBN 과 SR 의 혼합으로 분류




    5. Flow control


     - TCP 송신자가 수신자의 버퍼를 오버플로우 시키는 것을 방지하기 위한 서비스


     * LastByteRead : 호스트 B의 app 프로세스에 의해서 버퍼로부터 읽힌 데이터 스트림의 마지막 바이트의 수

     * LastByteRcvd : 호스트 B에서 네트워크로부터 도착해 수신 버퍼에 저장된 데이터 스트림의 마지막 바이트의 수


     --> rwnd = RcvBuffer - (LastByteRcvd - LastByteRead) : 수신자 버퍼의 여유 공간


    이 값을 TCP segment 의 receive window 에 넣어 송신자에게 전달. 수신자는 이를 통해 오버플로우가 발생하지 않도록 보다 적은 데이터를 전달한다.


     Q) rwnd가 0인 경우, 송신자는 어떻게 작동하는가?

     A) 버퍼가 언제 확인하는지를 알기 위해 계속 1바이트의 데이터로 세그먼트를 전송한다.



    6. TCP 연결 관리


    ● 연결 시작


     - 1단계 : client가 server에 특별한 TCP segment 송신(app 계층 데이터 없음, SYN). 이 segment가 최초의 순서번호를 선택

     - 2단계 : TCP SYN segment를 포함하는 datagram이 서버에 도달 시, 연결에 TCP 버퍼와 변수를 할당 후 연결 승인 segment를 송신. SYN flags가 1, 확인 응답은 client 설정값 + 1, server 최초 순서번호 설정.

     - 3단계 : 클라이언트는 연결에 버퍼와 변수를 할당. 이번의 응답은 SYN 0.


    2-way handshake는 연결 응답이 timeout 될 경우 재전송된 연결 요청이 연결 종료 이후에 도착하면 문제가 발생할 수 있다.


    ● 연결 종료


     - 종료 명령 시, 양방향에서 서로 종료 메시지와 응답 메시지를 주고받는다.


     - 종료 명령 segment는 FIN flags의 값을 1로 갖는다.


    'Computer Networking' 카테고리의 다른 글

    4.3 IP: Internet Protocol  (0) 2018.12.15
    4.2 What's inside a router  (0) 2018.12.14
    4.1 Network Layer 개요  (0) 2018.12.14
    3.7 TCP congestion control  (0) 2018.12.14
    3.6 혼잡제어의 원리  (0) 2018.12.14

    댓글

Designed by Tistory.