-
(3) TCP/IP (흐름제어 & 혼잡제어)CS 지식/○ Network 2021. 7. 23. 16:19
> 내글 참조
https://korshika.tistory.com/134
1. TCP 통신이란?
1-1) 정의
- 네트워크 통신에서 신뢰적인 연결방식
- TCP는 기본적으로 unreliable할 수 있는 network에서 reliable network를 보장할 수 있도록 하는 프로토콜
- TCP는 network congestion avoidance algorithm 사용
1-2) reliable network의 조건
- 손실 : packet의 손실을 막아야 함
- 순서 : packet이 여러개 도착할 때 순서가 바뀌는 것을 막아야 함
- Congestion : 네트워크가 혼잡한 문제
- Overload : reciever가 overload 되는 문제
1-3) 전송의 process
- Application layer(세션, 표현, 응용) : sender application layer가 socket에 socket library 통해 data를 씀
- Transport layer(전송) : data를 segment로 감싼다 / TCP-UDP layer, 3 way handshake
- Network layer(네트워크) : 라우터, IP / 패킷 단위로 전송 → 하위 layer거쳐 결과적으로 상대방 buffer에 도착
- 결국 receiver / sender 들은 자신의 buffer에 패킷들을 저장하고, 여기서 데이터를 읽어와서 처리하는데,
이 buffer가 넘치지 않도록 관리하는 것이 필요
2. 흐름제어 & 혼잡제어
2-1) 흐름 제어
(a) 정의
end system 대 end system
- 수신측이 송신측 보다 데이터 처리 속도가 빠르면 문제가 없지만
송신측의 속도가 빠를 경우 문제가 생김 - 수신측에서 제한된 저장 용량을 초과한 이후 도착하는 데이터는 손실될 수 있음,
만약 손실이 자주 발생한다면, 불필요하게 같은 데이터를 2번이상 전송하는 낭비가 발생 - 이런 위험을 줄이기 위해, 데이터 전송량을 수신측의 수신 상태에 따라 조절해야 함
(b) 특징
- 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
- Flow Control
- Reciever가 packet을 지나치게 많이 받지 않도록 함 - reciever가 자신의 상태를 sender에게 feedback하여 흐름을 제어하도록 하는 것
(c) 해결 방법
- Stop and Wait : 매번 전송항 패킷에 대해 확인 응답을 받고 다음 패킷 전송
- Sliding Window :
- 수신측에서 설정한 윈도우 크키만큼, 송싱측에서 확인응답 없이 세그먼트(패킷)을
전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
2-2) 혼잡 제어
(a) 정의
송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
- 송신측이 송신하는 데이터는 라우터 등을 거쳐 전송되게 되는데,
한 라우터 등에 데이터가 몰리면 Client / host등이 추가 데이터를 보내게 되는 등
전체 네트워크에 혼잡성이 올라가게되고, 데이터 손실이 일어날 수 있음 - 이러한 혼잡을 피하기 위해, 송신측에서 보내는 패킷 전송 속도를 제어하는 것이
혼잡 제어의 기능
(b) 특징
- 흐름제어 scope : 송신측 - 수신측 사이의 전송속도
혼잡제어 scope : 호스터 + 라우터 포함하는 넓은 범위에서의 전송문제를 다룸
(c) 해결 방법
- AIMD (Additive Increase / Multiplicative Decrease)
(a) 작동방식
- 처음에 패킷을 1개씩 보내고
문제가 없을 시, window크기(단위시간에 보내느 패킷 수)를 1씩 증가시켜 전송
- 패킷 전송 실패 / timeout시 패킷 속도를 절반으로 줄임
- 여러 호스트가 한 네트워크 공유시, 나중에 진입하는 쪽이 불리하지만 시간이 흐르면 평형을 이룸
(b) 단점
- 초기에 높은 대역폭을 사용하지 못하여 오랜시간이 걸림
- 네트워크가 혼잡해지는 상황을 미리 감지하지 못하고, 혼잡해진 이후에 줄일 수 있음 - Slow Start (느린 시작)
(a) 작동방식
> 초기에 오랜 시간이 걸리는 AIMD방식 극복을 위함
- (1) 처음에 패킷을 1개씩 보내고
문제 없을시 1 주기당 2배씩 증가( === 각각의 ack 패킷마다 windowsize 1씩 증가 )
(2) 전송속도는 지수배로 증가
- 문제 발생시, window size를 바로 1로 떨어뜨리고
window size는 이전의 절반까지는 지수꼴로 증가, 이후부터는 완만하게 1씩 증가 - Fast Retransmit (빠른 재전송)
- 빠른 재전송은 TCP 혼잡 제어에 추가된 정책
- 중복 순번의 패킷을 감지하여 window size를 줄임 - Fast Recovery (빠른 회복)
- 혼잡한 상태가 되면, window size를 1로 줄이지 않고
반으로 줄이고 선형증가 시키는 방법
- 혼잡상태로 반까지 줄고 난 이후, AIMD방식처럼 동작
참조
반응형'CS 지식 > ○ Network' 카테고리의 다른 글
(6) HTTP / HTTPS (0) 2021.07.27 (5) 대칭키 & 공개키(비대칭키) & SSL (0) 2021.07.27 (4) UDP & DNS (0) 2021.07.25 (2) 3 way handshake - 연결 (0) 2021.07.22 (1) OSI 7 계층 (0) 2021.07.22