05-17 01:24
Recent Posts
Recent Comments
관리 메뉴

miinsun

[Network] TCP의 흐름제어, 연결제어, 혼잡제어 본문

Infra/Network

[Network] TCP의 흐름제어, 연결제어, 혼잡제어

miinsun 2022. 7. 12. 16:43
  1. TCP의 흐름제어
    • TCP연결이 성립되면 전송자와 수시자 모두 sendBuffer와 receiveBuffer를 가짐
    • 보내는 입장에서 window-size만큼 데이터 전송
    • 받는 입장에서 receive buffer보다 이상의 데이터가 들어오면 전부 폐기됨
    • 받는 입장의 receive buffer를 고려해서 보내는 것이 관건
    • 흐름제어를 할때 Receive Window 필드를 사용
      • 보내는 입장에서 window-size를 알려줌
      • 받는 입장에서 데이터를 받으면 receive buffer를 알려줌
      • receive buffer만큼 데이터를 전송하게 됨
      • 흐름 제어란 수신자의 버퍼가 넘치지 않도록 데이터 전송을 조절하는 작업
      • 버퍼의 크기 확인 할 때 Receive window 필드의 값만 채워서 보내고 나머지는 쓰레기 값을 보냄
    • [흐름제어] 더 자세한 이야기는?
  2. TCP의 연결제어
    • 연결이 성립되기 전에 약속되어야 하는 항목
    • 전송자와 수신자의 sendBuffer, receiveBuffer
    • 전송자와 수신자가 서로 주고 받을 패킷의 시퀀스 넘버
    • TCP 3-way handshake(연결)
      • 3번의 과정을 거치는 TCP의 연결제어 방법 
      • 1) 클라이언트 측에서 시퀀스 넘버를 정하고 서버 측에 연결 요청
        1. 해당 요청을 SYN msg
        2. 평소 SYN 필드는 0이지만 새로운 연결 요청시에는 1로 변경
      • 2) 서버에서 SYN msg 수신하고 서버를 열겠다는 뜻으로 SYNACK를 보냄
        1. 시퀀스 넘버
        2. 시작할 ACKbit를 보냄
        3. 증가할 ACK값도 보냄
      • 3) 클라이언트 측에서 SYNACK를 받고 서버가 열였음을 인지, 대답으로 ACK을 보냄

  • TCP 4-way handshake(종료)
    1. 클라이언트 측에서 FIN 세그먼트 전송
    2. 서버는 FIN세그먼트를 받고 ACK를 보냄
    3. 서버는 FIN 세그먼트를 보냄
      1. ACK와 FIN을 같이 보내지 않는 이유는 남아있는 전송 데이터가 존재할 수 있기 때문
    4. 클라이언트는 FIN을 받고 ACK을 보내줌

 

3. TCP의 혼잡제어

혼잡도란?
네트워크는 공공의 영역이기 때문에 혼잡도가 저마다 다르다. 같은 네트워크 상에서도 혼잡도를 낮추기 위해 데이터의 양을 조절한다. 네트워크의 혼잡이 예상되면 데이터의 양을 줄여 혼잡도를 낮출 수 있고, 네트워크가 혼잡하지 않을 것으로 예측되면 데이터의 양을 유동적으로 늘린다.

혼잡도 고려 사항
라우터들이 지속적으로 혼잡도의 변화를 알려준다. 혼잡도는 보통 RTT를 보고 판단한다. 혼잡제어는 성능이 더 안좋은 쪽을 고려하여 발생함.

 

TCP slow start

  • 처음에 전송시에는 적은 데이터를 전송
  • RTT를 확인한 후 괜찮다는 판단이 들면 데이터의 양을 늘림

 

 

 

 

 

 

  • 데이터를 보내다가 한계점 이상이 되면 패킷 손실이 발생함
    • 모든 사용자가 보내는 패킷의 양을 줄임
    • 혼잡 제어가 가능

 

 

 

 

4. TCP의 혼잡 제어 방시

TCP Tahoe TCP Reno
  • 데이터를 보내다가 한계점에서 유실이 발생되면 다시 처음으로 돌아감
  • 한계점은 유실이 발생한 곳에서 절반이 됨
  • timeout 발생 시 다시 처음으로 돌아감
  • timeout 발생 전에 ACK응답들이 오는 경우(3번 중복)
  • 한계점은 Tahoe와 마찬가지로 유실이 발생한 지점에서 절반이 됨

'Infra > Network' 카테고리의 다른 글

[Network] TCP TimeOut, TCP 재전송  (0) 2022.07.12
[Network] TCP의 이해  (0) 2022.07.12
[Network/Java] 자바 소켓 통신  (0) 2021.12.03
[Network] TCP와 UDP의 차이  (0) 2021.12.03
[Network/Python]파이썬 소켓 통신  (0) 2021.12.02
Comments