<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에 의해 결정됨)
'CS(Computer Science) > 네트워크' 카테고리의 다른 글
4. Link Layer(링크 계층) (0) | 2020.08.31 |
---|---|
3. Network Layer(네트워크 계층) (0) | 2020.08.28 |
1. Application Layer(어플리케이션 계층) (0) | 2020.08.25 |
(시작 전에) 네트워크 기본 (0) | 2020.08.23 |