tcp 통신
네트워크 통신에서 신뢰적인 연결방식을 따르는 통신이다.
- tcp 프로토콜은 비신뢰성 네트워크에서 신뢰성있는 네트워크를 보장할 수 있도록 하는 프로토콜이다.
이를 위해 tcp는 네트워크 혼잡 회피 알고리즘을 사용한다ㅏ.
신뢰성있는 네트워크를 보장하기 위해서 다루어야 할 4가지 문제점
- 패킷이 손실될 문제가 있다
- 패킷의 순서가 바뀔 수 있다
- 네트워크가 혼잡할 수 있다
- 수신측에서 overload 될 수 있다.
흐름제어
송신측과 수신측의 데이터 처리 속도를 맞추는 기법이다.
- 수신측의 처리 속도보다 데이터가 많이 오게 되면 송신측에 자신의 상태를 알려 송신측의 데이터 전송 속도를 조절하도록 한다.
혼잡제어
송신측의 데이터 전달과
네트워크의 데이터 처리 속도 차이를 해결하는 기법이다.
전송의 전체적인 과정
- 응용 계층
전송측의 응용 계층이 socket에 data를 쓰면- 전송계층
data를 세그먼트로 감싼다. 그리고 나서 네트워크 계층에 넘긴다- 밑 계층에서부터 receiving node로 전송이 된다.
송신측은 송신측의 buffer에 데이터를 저장하고 수신측은 수신측의 buffer에 데이터를 저장한다.- 응용 프로그램은 준비가 되면 버퍼에 있는 데이터를 읽기 시작한다.
이 때 흐름제어는 수신측의 buffer가 넘치지 않게 한다.
수신측은 수신측의 buffer의 남는 공간을 송신측에 알려준다.
수신측의 데이터 처리 속도 < 송신측의 데이터 전송 속도
일경우 문제가 생긴다.
- 수신측의 buffer는 제한된 크기를 가진다. buffer가 담을 수 있는 크기를 초과하게 되면, 그 이후에 도착하는 데이터를 버퍼에 담지 못하고 손실된다. (손실되면 불필요한 응답 및 데이터 전송이 발생한다)
이러한 위험을 줄이기 위해서 송신측의 데이터 전송량을
수신측의 데이터 처리 속도에 맞추어 조절해야 한다.
흐름제어 방식
- stop and wait
- sliding window
stop and wait
매번 전송한 패킷에 대한 확인 응답을 받은 뒤에
그다음 패킷을 보내는 방식이다.큰 사이즈의 연속적인 프레임을 작게 나누어 전송해야한다.
- 전송이 길어지면 오류 발생확률이 높아진다.
- 멀티포인트 통신방식의 경우 회선 점유율이 길어지기 때문에
다른 부스테이션들의 지연이 발생할 수 있다.
sliding window (Go Back N ARQ)
수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
- sliding window 제어 기법은
데이터가 전송되었지만 ack 를 받지 못한 데이터의 byte 숫자를 파악하기 위해 사용한다.마지막에 보낸 바이트 - 마지막에 확인된 바이트 (= 남아있는 공간)
==현재 공중에서 전송중인 패킷 수 (= sliding window)
동작 방식
- 수신측에서 설정한 윈도우에 포함되는 모든 패킷을 전송하고
패킷들의 전달이 확인되는 대로 윈도우를 옆으로 옮겨 그다음 패킷을 전달받는다.window
- TCP/IP를 사용하는 모든 호스트들은 송신/수신을 위한 2개의 윈도우를 가진다
- 호스트들은 실제 데이터를 보내기 전에
3 way handshaking을 통해
송신 호스트의 윈도우 사이즈 크기를
수신 호스트의 윈도우 사이즈 크기에 맞춘다.
송신측에서 수신측으로 데이터를 전송할 때
데이터는 지역망 또는 인터넷으로 연결된 대형 네트워크를 통해 전달된다.
만약 하나의 라우터에 데이터가 몰릴 경우
자신에게 온 데이터를 모두 처리할 수 없게 된다.
이러한 경우 송신측은 다시 재전송하게 되고, 이는 혼잡만 가중시키게 된다. 결국 오버플로우나 데이터 손실이 발생한다.
- 이러한 네트워크 혼잡을 피하기 위해서
송신측에서 보내는 데이터의 전송속도를 강제로 줄이는 작업인
혼잡제어가 필요하다.
혼잡제어 방식
- AIMD
- slow start
- fast retransmit
- fast recovery
AIMD (Additive Increase / Multiplicative Decrease)
처음에 패킷을 하나씩 보내고 문제없이 도착하면
window 크기를 1씩 증가시켜 전송하는 방식이다.
- 만약 패킷 전송에 실패하거나, 일정 시간이 넘어가면
패킷 전송 속도를 절반으로 줄인다.- 여러 호스트가 하나의 네트워크를 공유할 때
나중에 진입하는 쪽이 분리하지만
시간이 흐르면 평형 상태로 수렴하게 된다- 문제점 : 초기에 네트워크의 높은 대역폭을 사용하지 못하기에
오랜 시간이 걸린다. (네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식이다)
slow start
AIMD는 처음의 전송 속도를 올리는데 시간이 오래걸리는 단점이 있다.
slow start는 AIMD와 마찬가지로 패킷을 하나씩 보내면서 문제없이 도착할 시 ack 패킷 마다 window size를 1씩 늘린다. (한 주기가 지나면 window size가 2배 된다)
- 전송속도의 증가는 지수함수 꼴로 증가하지만
혼잡현상이 발생하면 window size를 1로 떨어뜨린다.- 처음에는 네트워크 수용량에 대해 예상하지 못하지만
혼잡 현상이 발생하고나면 네트워크 수용량을 어느정도 예상 가능하다- 혼잡현상이 발생했던 window size의 절반정도까지는
지수함수 꼴로 window size 크기가 증가하고 그 이후부터는 1씩 증가한다.
fast retransmit(빠른 재전송)
TCP의 혼잡 조절에 추가된 정책이다.
- 수신측에서 먼저 도착해야할 패킷이 아닌 그 다음 패킷이 도착한 경우에도 ack 패킷을 송신측에 보낸다.
- 순서대로 잘 도착한 마지막 패킷의 그 다음 패킷 순번을 ack 패킷에 실어 송신측에 보낸다.
- 만약 중간에 패킷이 손실된 경우, 송신측은 수신측으로부터
순번이 중복된 ack 패킷을 받게 된다.
이를 감지하면 송신측은 손실된 패킷을 재전송해준다.- 중복된 순번의 패킷을 3개 받으면 재전송을 하고
혼잡한 상황임을 감지하여 window size를 줄인다.
fast recovery(빠른 회복)
혼잡한 상태에서 window size를 1로 줄이지 않고 반으로 줄여
선형증가시키는 방법이다.
- 혼잡상황을 한번 겪고 나면 순수한 AIMD 방식으로 동작하게 된다.