4장에서 IP 는 데이터 전달을 제외한 나머지는 신경을 안쓴다고 하여 데이터가 완전히 받을 수 있을지 의문이 드는데

TCP 가 언제 어디서든 데이터를 온전히 가져다 주기위한 프로토콜이다.

 

TCP :전송 제어 프로토콜

  • 신뢰성있는( 언제 어디서든 데이터를 온전히 가져다 줄거라는 믿음) 있는 통신을 위한 프로토콜
  • 데이터 유실의 오류를 감지하고 해결해 데이터가 온전히 전송 될 수 있게 해준다.

패킷 유실의 문제를 해결하는 방법?

  • TCP가 패킷마다 번호를 붙여서 무엇이 사라졌는지 확인을 한다.
  • TCP 에서 데이터를 주고 받을 때 확인 절차를 추가
    • 서버가 클라이언트에게 데이터를 잘 받았다는 메세지를 받았는 지 확인하고 받지 못했다면 다시 데이터를 보내어 확실하게 클라이언트가 데이터를 받을 수 있게 보장.

※ 패킷, 클라이언트?

패킷

데이터를 전송할때 사용되는 작은 컨테이너 개념,

네트워크 통신을 할 때 사용되는 작게 분할된 데이터 조각으로 네트워크에서 전송하는 데이터의 기본 단위

클라이언트

서버에서 보내는 서비스 요청

 

지금 데이터 상태는? 헤더와 플래그

해당 데이터에 대한 정보가 담겨 있는 헤더 (header)

패킷의 상태를 알리는 목적의 헤더 정보인 정보 플래그(flag) -> 다른 기기에 신호를 전달하기 위한 용도

TCP 헤더의 플래그 종류

  • ACK (Acknowledgement) : 앞서 받은 데이터를 잘 처리 했다는 의미
  • SYN (Synchronize) : 연결을 요청하는 플래그
  • FIN (Finish) : 통신이 마무리되어 연결의 해제를 요청하는 플래그

TCP 헤더 전체 그림

 

TCP에서 연결을 수립하고 해지하는 과정

시작은 3방향 핸드쉐이크

 3번의 메세지 교환을 통해서 클라이언트와 서버간의 연결을 수립하기 위해 준비하는 방식

아래의 그림과 같이 클라이언트와 서버가 서로 데이터를 주고 받을 수 있는 상태인지 확인을 하는 방식

 

마무리는 4방향 핸드쉐이크

4번의 메세지 교환을 통해서 클라이언트와 서버간의 연결을 끝내는 방식



연결종료 신호 (FIN) 을 받고 time_wait를 하는 이유는 클라이언트 쪽에서 혹시 모를 일 (예를 들어 아직 도착하지 못한 패킷)에 대비 해 잠시 기다렸다가 최종적으로 서버에 응답(ACK) 를 보내서 종료 시킨다.

 

사이 좋게 데이터를 주고 받는 방법

흐름제어

데이터를 주고 받을 때 전송자가 빠르거나 수신자가 빠를 수도 있다. 이때 상호간의 속도를 무시하고 전송하면 데이터 손실 같은 오류가 발생 할 수 있다. 그러므로, 전송자와 수신자의 속도에 따라 데이터 전송 속도를 조절 하는 것 을 말한다.

 

정지-대기방식

데이터의 손실? 을 막기 위해 클라이언트와 서버간에 아래와 같은 확인 절차를 거치는 방식.

서버 (데이터) 클라인언트 (응답:ACK) 서버

장점 : 데이터가 확실하게 전송되었는지 확인 가능하다.  신뢰성이 높다.

단점 : 하나하나 확인을 해야 하므로 시간이 올래 걸린다. 효율성이 떨어진다.

 

슬라이딩 윈도우 방식

한번에 여러개의 데이터를 보내서 하나하나 확인을 하지 않아도 되게하는 방식으로 아래의 그림과 같이 작동한다.

데이터를 윈도우 크기만큼 전송하고 수신자가 수신한 데이터에 대한 응답을 보내는 데 이때 헤더에 데이터 번호가 적혀있다.

윈도우라고 부르는 이유는 확인된 데이터 번호 다음으로 이동하여 다시 데이터를 전송하는 방식이므로 슬라이드 윈도우 하고 정함.

주로 전송자가 수신자의 윈도우 크키를 파악해서 전송한다.

 

혼잡 제어로 네트워크 나누어 쓰기

혼잡 제어

혼잡은 '수신자'가 전송자가 데이터를 보냈지만 네트워크 처리속도가 느려서 '재전송'을 요청하고 전송자는 데이터가 유실되었다고 판단하여 데이터를 '재전송'하는 상황에서 발생한다. → 네트워크 내에 패킷의 수가 과도하게 증가

이러한 혼잡을 제어하기 위한 기능

 

혼잡 제어 원리

천천히 데이터를 전송하다가 수신자가 잘 받으면 속도를 상승시킨다. 수신자의 데이터 수신 상태에 따라 속도를 조절

예를 들어 4번 데이터를 전송할 차례인데 수신자가 2번 데이터까지만 받았을때 속도를 늦춘다.

 

합 증가/감소

  • 수신자가 잘받았는 신호가 올때 마다 윈도우 크기를 1씩 증가
  • 신뢰성 높다
  • 속도를 증가시키는데 시간이 걸린다.

느린시작

  • 2배씩 증가하여 시간이 지날수록 많은 양의 데이터 전달 가능.
  • 느린시작인 이유 : 기존의 TCP 방식보다 시작이 느려서이다. 
    • 한번에 수신자가 받을 수 있는 최대 윈도우로 보내기 보다 1 부터 시작

더 빠르게 UDP (User Datagram Protocol)

TCP vs UDP

  TCP 🛡️ UDP ⚡️
연결방식 연결형 비연결형
전송순서 순서보장 순서보장X
혼잡제어 O X
속도 느림 빠름
신뢰성 높음 낮음

 

UDP는

전송자와 수신자가 연결이 되어있는 보장을 하지 않는다. 비연결형

프레임 1~2개 정도 잠깐 안보여도 상관이 없는 실시간으로 화면을 보여줘야하는 게 중요한 상황에 사용 → 온라인 게임, 스트리밍에 적합

 

 

 

+ Recent posts