본문 바로가기

CS(Computer Science)/네트워크

2. Transport Layer(전송 계층)

<UDP>

기능

multiplexing  -> 여러 소켓의 메시지를 하나의 통로로 내려보냄                     

demultiplexing ->메시지를 분류해서 해당 소켓으로 올려줌(port 넘버 이용)

                        (udp는 destination port 번호만 보고 demultiplexing진행) 

checksum   ->  오류있는지 확인  , 오류 있으면 drop                                      

 


<TCP>

주요 기능

 

- reliable data transfer(유실 없이 순서대로 전송)(buffer에 순서대로 저장)  -> 재전송, sequence number , timer 등

- flow control             -> 상대방의 능력에 맞게 제어

- congestion control    -> 네트워크 상태에 따라 제어

- udp기능 모두 포함    -> 단 tcp의 demultiplexing 경우 source ip, dest ip, source port, dest port 모두 보고 진행 (즉 저거 다 합한 id의 소켓으로 올라감)

                                (즉 특정 컴퓨터의 특정 프로세스와 1대1 매핑) 

 

<flow control> (수신측의 능력에 맞게 제어)

- tcp헤더에는 receive window부분이 있다. 수신 측은 receive buffer의 남은 공간의 크기를 바탕으로 받을 수 있는 크기를 송신측에 알려준다. 그리고 송신측은 send buffer의 window size를 조절하여 상대방의 능력에 맞게 보내준다.

- timer는 window의 첫 segment에 설정된다. 그리고 윈도우가 이동할 때 마다 다시 첫 부분에 timer가 세팅 된다.

- (송신측의 window size가 0이고 수신측이 보낼 패킷이 없다면 상대방의 receive buffer의 크기를 계속 알 수 없으니 

  송신측은 주기적으로 빈 segment를 보내본다.)

 

<congestion control> (네트워크 상태에 따라 제어)

- congestion control은 네트워크 상태에 따라 window size를 조절하여 send rate을 조절한다.

  (send rate을 조절하지 않고 마구잡이로 서로 보내려고하면 네트워크 트래픽은 더욱 악화된다.)

   -> 네트워크 상태를 아는 방법은 피드백을 통해서 알수 있는데 두가지가 있다. timeout 과 3-duplicate 

      ack이다. 둘다 패킷 유실 될 경우나 delay될 경우 발생하므로 네트워크 상황을 알 수 있다. 

 

<TCP Tahoe 버젼> -> 초기버젼

 위의 그림에서 보이듯이 처음엔 네트워크 상황을 모르니 조심스럽게 slow start로 윈도우 사이즈를 증가시킨다. 그리고 threshold값에 도달하면 그 뒤로는 linear하게 증가시킨다. 그러다가 timeout 이나 3-duplicate ack상황이 발생하면 threshold를 window size의 절반으로 줄이고 slow start로 다시 1부터 시작한다.

(slow start : 처음엔 window사이즈를 1개로 시작하지만 점차 exponential 하게 증가시키는 방법. -> 1,2,4,8,.....)

 

<TCP Reno 버젼> ->후기버젼

timeout 상황에는  Tahoe버젼과 같다. 단 3-duplicate ack 상황이 발생하면 다르다. 3-duplicate ack상황이 발생하면 window size를 1부터 다시 시작하는 것이 아니라 threshold지점부터 linear하게 증가 시킨다.

(이유 : 3-duplicate ack는 timeout상황에 비해 네트워크가 훨씬 양호할 확률이 높다. 3-duplicate ack는 애초에 수신이 계속 되고있고 그 특정한 패킷만 도착하지 않았을 확률이 높기에 네트워크가 좀 더 양호할 확률이 높다.)

 


<TCP 부가적 참고 사항>

sequence number -> 시작 데이터의 바이트 번호로 정함.

cumulative ack    -> ack 10 이면 9전까지 잘 받았으니 10 요청하는 것(delay ack를 적절히 사용하면 효율 증가)

send buffer, receive buffer   -> socket하나 생길 때 마다 OS에 생김.

 

<TCP 재전송 하는 경우>

1. timer가 터진 경우                     -> 정해놓은 timer의 시간이 초과한경우

2. 3-duplicate ack(fast retransmit)   -> 같은 요청을 3번 중복으로 더 받은 경우

                                                       (타이머가 터지기 전에 미리 재전송 가능)

<TCP 3-way handshake>

- 서로 데이터를 송수신 하기 전에 연결하는 시작 과정

- 서로 시작할 sequence number를 주고 받음.

 

<TCP Window>

- TCP는 데이터를 송신할 때 하나씩 전송하는 것이아니라 파이프 라인형태로 쏟아 붓는다. 

   그 때 tcp는 window size만큼 한번에 보내게 된다.

- window size은 flow control 과 congestion control에 의해서 사이즈가 결정된다. 즉 flow control 요인에 의해

  결정되는 사이즈와 congestion control에 의해 결정되는 사이즈 중 작은 사이즈로 결정된다.

  (주로 congestion control에 의해 결정됨)

 

 

반응형