ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 6주차: TL (TCP: Window, Timeout)
    교내 강의/컴퓨터 네트워크 2024. 4. 13. 15:23

    TCP:

    congestion, flow control에서 window size를 조절함

    flow control은 수신쪽의 버퍼를 체크하여 맞춰보냄.

    MSS: 나눠서 보내는 양 

    full duplex data: 양방향으로 동시에 보냄

     

    Source Port, Destination Port: 출/도착지 포트번호

    Sequence Number: S Flag와 작용, random으로 지정 (2^32 sr 딜레마는 안생김.)

    Acknowledge Number: 받은 S_num으로 계산됨

    HeadLen: 헤더의 총 길이/4 

    not used: 예약된 필드(미사용)

    TCP Flags: 통신중에 연결 상태를 물어볼 때 사용하는 부분 

        U: urgent = 긴급 비트 1이면 보내는 것이 중요하다 (아래 Urgent Pointer랑 세트)

        A: ack = 승인 비트 물어본 거에 대한 응답, 승인해 줄 때 사용

        P: push = 원래 TCP 버퍼가 일정한 크기만큼 쌓여야 패킷을 보낼 수 있는데 상관 없이 보내겠다.

        R: reset = 연결된 상태에서 문제가 발생하면 1을 보내서 새로고침

        S: sync = 연결을 시작할 때 사용함, 보내진 뒤 동기화

        F: finish = 연결을 끊을 때 사용함.

    Window: TCP 수신 버퍼 공간 크기을 알려줌

    Checksum: 헤더가 온전하게 왔는지 확인

    Urgent Pointer: U bit가 1일 경우 긴급한 위치가 어딘지 표시

    TCP option: 최대 40바이트 옵셔널

     

    sequence number:

    발송 시 segment 안의 데이터의 위치를 가리킴.

    수신 시 받은 ack를 return 함.
    10,000 bit 짜리 데이터를 1,000 bit의 10개의 segment로 나누어 보냈다고 가정했을 때,

    1000바이트, 2000바이트... 이런 식으로 비트 단위의 offset을 나타낸다는 점이다.


    acknowledgement number:

    수신자가 다시 송신자에게 ACK를 보낼 때 사용하는 필드로, 다음에 받기를 원하는 데이터의 sequence number를 의미.

    1000bit를 받으면 ack = 받은 sequence number +1000이 됨.

    cumulative ack 사용: premature 발생하여 duplicate이 오면, 받아야 할 ack를 cumulative로 보냄

    TCP FSM

    1. handshake로 임의의 seqnum을 정함

    2. 임의의 seqnum에 length(data)를 보냄.

    3. ack가 Sendbase보다 크면 sendbase는 ack로 바꿈. (cumulative)

    1. 송신: 순서대로 패킷을 보냄,

    2. 수신: 연속해서 받기 위해 delay함 (ex: 500ms)

    3. 수신: 누적 ack을 보냄

     

    문제상황: 수신자가 못 받은 패킷이 있음

    1. 순서대로 잘 받은 패킷 중 gap 바로 전까지의 ack를 보냄 (duplicate: 두번 보낸것이니)

        그 이후 수신은 패킷이 올 때 마다 duplicate ack를 보냄

    2. 송신자는 누락된 하나의 패킷을 보냄 

    3. 수신자는 다시 누적 ack을 보냄

    time out은 상대적으로 오래 걸림: 

       duplicate ack를 사용하면 fast retransmit 가능 

       "triple duplicate ACKs" 오면 빠르게 해당 패킷을 재전송 함

    tcp time-out 정하는 법:

        rtt보다 길게: rtt가 올 때 마다 시간을 측정(sample RTT), estimate RTT를 구함

     

    Estimate RTT:    

        알파 = 1/8

        이전의 평균값은 7/8만큼, 현재 sample은 1/8만큼 반영하여 구함.

     

     Deviation:

        Deviation = sampleRTT - EstimatedRTT    

        이전의 deviation은 3/4, 현재의 deviation은 1/4만큼 반영

        Timeout은 EstimateRTT + 4Deviation

     

        초기 Deviation은 sampleRTT/2

Designed by Tistory.