[CS 스터디] 2. 네트워크 - TCP/IP (흐름제어/혼잡제어)

채채·2023년 12월 13일
0

CS 스터디

목록 보기
14/21

TCP/UDP 란

  • 전송계층(Layer 3)에서 사용하는 프로토콜
    * 전송 계층: 송신자와 수신자 연결하는 통신 서비스, 데이터 전달 담당

패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜 기반으로 구현됨

TCP (Transmission Control Protocol)


1. 데이터 경계를 구분하지 않음: 바이트 스트림 (byte-stream) 서비스
2. 연결 지향 프로토콜(수신여부 확인O) -> 신뢰도 높지만 속도 느림
3. 1:1 통신
4. 가상회선 패킷 교환방식 사용: 패킷 사이 순서 보장
5. HTTP, Email, File transfer

가상회선 패킷 교환방식

  • 각 패킷에는 가상회선 식별자가 포함
  • 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착

UDP (User Datagram Protocol)


1. 데이터 경계를 구분: 데이터그램(datagram) 서비스
2. 비 연결 지향 프로토콜(수신여부 확인X) -> 신뢰도 낮지만 속도가 빠름
3. 1:1 or 1:N or N:N 통신
4. 단순히 데이터만 주는 데이터그램 패킷 교환 방식 사용: 순서 보장 X
5. DNS, Broadcasting

데이터그램 패킷 교환 방식

  • 각 패킷이 독립적으로 이동하며 최적의 경로 선택
  • 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있음
  • 도착순서가 다를 수 있음

TCP 통신

  • 네트워크 통신에서 신뢰적인 연결방식
  • TCP는 기본적으로 unreliable network에서 reliable network를 보장할 수 있도록 하는 프로토콜
  • TCP는 network congestion avoidance algorithm을 사용

reliable network를 보장한다는 것은 4가지 문제점 존재

  1. 손실: packet 손실 문제
  2. 순서 바뀜: packet 순서 바뀜 문제
  3. Congestion: 네트워크 혼잡 문제
  4. Overload : receiver가 overload 되는 문제

흐름제어/혼잡제어

  • 흐름제어 (endsystem - endsystem)
    - 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법

    • Flow Control은 receiver가 packet을 지나치게 많이 받지 않도록 조절하는 것
    • 기본 개념은 receiver 가 sender에게 현재 자신의 상태를 feedback 한다는 점
  • 혼잡제어: 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법

전송의 전체 과정

  1. Application layer: sender application layer 가 socket 에 data를 씀
  2. Transport layer: data를 segment에 감싼다. 그리고 network layer에 넘겨줌
  3. receiving node로 전송: 이 때 sender의 send buffer에 data 저장, receiver는 receive buffer에 data 저장
  4. application에서 준비가 되면 이 buffer에 있는 것을 읽기 시작
  • 따라서 flow control의 핵심은 이 receiver buffer가 넘치지 않게 하는 것
    receiver는 RWND(Receive WiNDow): receive buffer의 남은 공간 홍보

1. 흐름제어 (Flow Control)

  • 송신측(receiver)이 수신측(sender)보다 속도가 빠를 경우
  • 수신측: 제한된 저장 용량 초과 후에 도착하는 데이터 손실 가능성
  • 송신 측의 데이터 전송량을 수신 측에 따라 조절

해결

  • Stop and Wait: 매번 전송한 패킷에 대해 확인 응답
  • Sliding Window (Go Back N ARQ)
    - 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법

    - Window: TCP/IP를 사용하는 모든 호스트들은 송신 Window/수신 Window를 가짐
    수신 전에 3 way handshaking을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 됨

2. 혼잡제어 (Congestion Control)

  • 송신측의 데이터는 지역망/인터넷으로 연결된 대형 네트워크를 통해 전달
  • 한 라우터에 데이터가 몰릴 경우, 데이터 모두 처리 불가
  • 이런 경우 호스트들은 다시 재전송 => 혼잡 가중 => 오버플로우/데이터 손실 등
  • 송신 측에서 보내는 데이터의 전송속도를 강제로 줄이는 과정이 혼잡제어
  • 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라 함
  • 혼잡 현상을 방지하거나 제거하는 기능을 혼잡제어라고 함
  • 흐름제어가 송신측/수신측 사이의 전송속도를 다루는 데 반해, 혼잡제어는 호스트와 라우터를 포함한 넓은 관점에서 전송 문제를 다룸

해결

  • AIMD(Additive Increase / Multiplicative Decrease)

    • 처음에 패킷을 하나씩 보내고, 이것이 문제없이 도착하면 window 크기(단위 시간 내 보내는 패킷 수) 를 1씩 증가시켜가며 전송하는 방법
    • 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷 보내는 속도를 절반으로 줄임
    • 공평한 방식으로, 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형 상태로 수렴하게 되는 특징이 있음
    • 문제점은 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리게 되고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못함
      즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식
  • Slow Start (느린 시작)

    • AIMD 방식은 네트워크 수용량 주변에는 효율적, 그러나 초기 전송속도를 올리는데 시간이 오래 걸림
    • Slow Start 방식은 AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려줌
    • 즉, 한 주기가 지나면 window size가 2배로 됨
      전송속도는 AIMD에 반해 지수 함수 꼴로 증가
    • 대신 혼잡 현상이 발생하면 window size를 1로 떨어뜨림
    • 처음에는 네트워크 수용량을 예상할 수 있는 정보가 없지만, 한 번 혼잡 현상이 발생하고 나면 네트워크 수용량 어느정도 예상 가능
    • 그러므로 혼잡 현상이 발생했던 window size의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가
  • Fast Restransmit (빠른 재전송)
    - TCP의 혼잡 조절에 추가된 정책

    • 수신 쪽에서 먼저 도착해야 할 패킷이 도착하지 않고, 다음 패킷이 도착한 경우에도 ACK 패킷 보냄
    • 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보내게 되므로, 중간에 하나가 손실되게 되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 된다. 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송해줄 수 있다.
    • 중복된 순번의 패킷을 3개 받으면 재전송 하게 됨: 약간 혼잡한 상황이 일어난 것이므로, 혼잡을 감지하고 window size를 줄임
  • Fast Recovery (빠른 회복)
    - 혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄인 후 선형증가
    • 이 정책까지 적용하면, 혼잡 상황을 한 번 겪고 나서부터는 순수한 AIMD 방식으로 동작

출처

2023-CS-Study github
Tech Interview

profile
성장하는 사람

0개의 댓글