TCP
정의
- 응용 프로그램이 데이터를 교환할 수 있는 네트워크 대화를 설정하고 유지하는 방법을 정의하는 표준이다.
특징
- IP 네트워크를 통해서 통신하는 호스트에서 실행되는 애플리케이션 간에 신뢰할 수 있다.
- 통신의 순서가 정해져있으며, 오류를 체크하고 전송할 수 있다.
- 네트워크 혼잡 방지 알고리즘을 사용한다. (Network Congestion Avoidance Algorithm)
- 네트워크에서 부하로 인해 패킷 손실이 발생하는 것을 줄인다.
Reliable(신뢰성) Network 보장으로 인한 문제점
- 손실 : Packet이 손실될 수 있는 문제
- 순서 바뀜 : Packet의 순서가 바뀔 수 있는 문제
- Congestion (혼잡) : Network내의 Packet의 수가 과도하게 증가하는 현상
- Overload : 수신측이 Overload 되는 문제
TCP 연결 및 연결 해제 방법
- 연결 : 3 way hadshake 방법 사용
- 연결 해제 : 4 way handshake 방법 사용
- 세부 내용은 다음 포스트에서 다룰 예정 입니다.
흐름 제어
정의
-
수신측이 송신측보다 데이터 처리 속도가 빠르면 문제없지만, 송신측의 전송 속도가 빠를 경우 문제가 생긴다.
-
수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실 될 수 있다.
- 만약 손실된다면, 송/수신 측에서 불필요한 응답과 데이터 전송이 발생 할 수 있다.
-
이러한 위험을 줄이기 위해 송신 측의 데이터 전송량을 수신측에 따라 조절해야한다.
해결 방법
- Stop and Wait
매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
그러나 패킷을 하나씩 보내야 하기 때문에, 비효율적인 방법이다.
- Sliding Window
수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK) 없이 패킷을 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법이다.
Sliding Window
윈도우 크기
- 최초의 윈도우 크기는 호스트들의 연결 방법인 '3 way handshaking'을 통해 수신 측 윈도우 크기로 설정됩니다.
이후 수신 측의 버퍼에 남아있는 공간에 따라 변할 수 있다.
- 윈도우 크기는 수신 측에서 송신 측으로 확인 응답(ACK)을 보낼 때 TCP 헤더(window size)에 담아서 보낸다.
동작 방식
- 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
- 최초로 수신자는 윈도우 사이즈를 7로 정한다.
- 송신자는 수신자의 확인 응답(ACK)을 받기 전까지 데이터를 보낸다.
- 수신자는 확인 응답(ACK)을 송신자에게 보내면, 슬라이딩 윈도우 사이즈을 충족할 수 있게끔 윈도우를 옆으로 옮긴다
- 이후 데이터를 다 받을 때까지 위 과정을 반복한다.
재전송
- 송신 측은 일정 시간 동안 수신 측으로부터 확인 응답(ACK)을 받지 못하면, 패킷을 재전송한다.
- 만약, 송신 측에서 재전송을 했는데 패킷이 소실된 경우가 아니라 수신 측의 버퍼에 남는 공간 없는 경우면 문제가 생긴다.
- 이를 해결하기 위해 송신 측은 해결 응답(ACK)을 보내면서 남은 버퍼의 크기 (윈도우 크기)도 함께 보내 준다.
혼잡 제어
정의
-
송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
-
네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라 하며, 혼잡 현상을 방지하거나 제거하는 기능을 혼잡제어라고 한다.
-
흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를포함한 보다 넓은 관점에서 전송 문제를 다루게 된다.
해결 방법