관리 메뉴

코딩하는 락커

3. 전송 계층 5 본문

🌐 네트워크

3. 전송 계층 5

락꿈사 2022. 4. 4. 18:15

흐름 제어flow-control 

  • 애플리케이션이 데이터를 읽는 속도가 비교적 느리다면, 송신자가 점점 더 많은 데이터를 빠르게 전송함으로써 연결의 수신 버퍼에 아주 쉽게 오버플로를 발생시킴.
  • 흐름 제어 서비스flow-control-service: TCP가 송신가자 수신자의 버퍼를 오버플로 시키는 것을 방지하기 위해서 애플리케이션에게 제공하는 서비스. (수신자 제어)
  • 혼잡 제어 서비스congestion-control-service: TCP 송신자가 IP 네트워크에서 혼잡 때문에 억제되는 것. (송신자 제어)
  • 수신자는 수신 윈도우(receive window, rwnd)라는 변수를 유지하여 흐름제어 제공.
    • rwnd(버퍼의 여유공간) = RcvBuffer - |LastByteRead - LastByteRcvd|
    • LastByteRead: 수신자의 애플리케이션 프로세스에 의해서 버퍼로부터 읽힌 데이터 스트림의 바지막 바이트 수
    • LastByteRcvd: 수신자의 네트워크로부터 도착하여 수신 버퍼에 저장된 데이터 스트림의 마지막 바이트 수
  • 송신자는 rwnd의 값보다 작은 확인응답 안 된 데이터를 유지함으로써 송신자는 수진자의 수신 버퍼에 오버플로가 발생하지 않는다는 것을 확신함
    • 전송 확인응답 안된 데이터의 양: LastByteSent - LastByAcked
  • 문제점
    • 수신자의 수신 버퍼는 rwnd=0으로 가득 찼다고 가정.
    • 송신자에게 rwnd=0이라고 알림.
    • 수신자에서의 애플리케이션 프로세스가 버퍼를 비우더라도 송신자는 rwnd=0이므로 세그먼트를 보내지 않음.
  • 해결방안
    • TCP는 송신자가 수신자의 rwnd=0일 대 1바이트 데이터로 세그먼트를 계속해서 전송.
    • 이 세그먼트들은 수신자에 의해서 ACK를 보냄.
    • 결과적으로 버퍼는 비워지고 ACK의 rwnd에는 0이 아닌 값이 전송됨.

 

 

TCP 연결 관리

  • 3-way-handshaking

 

  1. 클라이언트 측 TCP는 애플리케이션 데이터를 포함하지 않고, 세그먼트의 헤더에 SYN 비트라고 불리는 비트가 1이고, 최초 순서번호로 client_isn인 세그먼트를 서버로 송신함.
  2. 서버는 TCP 연결 승인 세그먼트로 애플리케이션 데이터를 포함하지 않고, 세그먼트의 헤더에 SYN 비트라고 불리는 비트가 1이고, ACK는 client_isn+1 이고, 최초 순서번호는 server_isn인 세그먼트를 클라이언트로 송신함. (SYNACK 세그먼트로 불림)
  3. 클라이언트는 애플리케이션 데이터를 포함하고, ACK는 server_isn+1이고, 최초 순서번호는 client_isn+1인 세그먼트를 서버로 송신함.

  • TCP close
  1. 클라이언트 TCP가 서버 프로세스에게 FIN비트라고 불리는 비트가 1인 종료 세그먼트를 송신함.
  2. 서버는 이 세그먼트를 수신하면 클라이언트에게 ACK 세그먼트를 보내면서 아직 보내지 못한 세그먼트를 전송함.
  3. 서버는 FIN비트가 1인 종료 세그먼트를 송신함.
  4. 클라이언트는 서버의 종료 세그먼트에 확인 응답함.
  5. 두 호스트의 자원(버퍼와 변수)들은 할당이 해제됨.

 

  • TCP 상태 전이
    • 클라이언트 측
      • 클라이언트 TCP가 FIN비트가 1인 세그먼트를 서버측에 송신함.
        • 클라이언트는 FIN_WAIT_1 상태 진입
      • 클라이언트는 서버로부터 ACK를 포함하는 세그먼트를 수신받음.
        • 클라이언트는 FIN_WAIT_2 상태 진입
      • 클라이언트는 서버로부터 FIN비트가 1인 세그먼트를 수신받음.
      • 클라이언트는 서버에게 ACK 송신.
        • TIME_WAIT 상태 진입.
      • TIME_WAIT이 끝나면 연결 종료, 클라이언트 측 자원 해제.
    • 서버 측
      • 클라이언트로부터 FIN비트가 1인 세그먼트 수신.
      • 서버는 클라이언트에게 ACK 세그먼트 수신.
        • 서버는 CLOSE_WAIT 상태 진입.
      • 서버는 클라이언트에게 FIN=1인 세그먼트 전송.
        • 서버는 LAST_ACK 상태 진입.
      • 서버는 클라이언트로부터 ACK 수신, 연결 종료, 자원 해제.

'🌐 네트워크' 카테고리의 다른 글

4. 네트워크 계층 1  (0) 2022.04.11
3. 전송 계층 6  (0) 2022.04.05
3. 전송 계층 4  (0) 2022.04.04
3. 전송 계층 3  (0) 2022.03.29
3. 전송 계층 2  (0) 2022.03.28
Comments