트랜스포트 계층 3

BinaryHyeok·2023년 10월 27일
0

flow control(흐름제어)

TCP는 송신자와 수신자의 버퍼를 오버플로우 시키는 것을 방지하기 위해 애플리케이션에게 흐름 제어 서비스(flow-control service) 를 제공한다. 수신자의 버퍼 상태에 따라 송신자가 보내는 속도를 조절한다.
TCP는 송신자가 수신 윈도(receive window)변수를 유지하여 흐름 제어를 제공한다. 수신 윈도는 수신 측에서 가용한 버퍼 공간이 얼마나 되는지를 송신자에게 알려주는 데 사용된다.

Recieve Buffer의 남은 공간이 없는 경우

만약 수신 측의 receive buffer에 공간이 없고, 수신자는 송신 측에 새로 보낼 데이터가 더이상 없을 때, 송신자는 수신 측의 receive buffer에 대한 상황을 더 이상 알 수 없다.
이를 위하여 송신자는 주기적으로 1Byte 세그먼트를 보내본다. 만약 수신자가 세그먼트를 받는다면 ACK가 수신자로부터 올 것이고, buffer 상황도 알 수 있게 된다.

Silly Window Syndrome

송신, 수신측 응용 프로그램이 데이터 처리 단위가 작거나 저속일 때, 최소 IP 및 TCP의 헤더가 각각 20 바이트 씩 총 40 바이트가 부가적으로 붙여지며 이는 네트워크의 자원을 낭비하는 결과가 된다.

Sender:Nagle's algorithm
1. 송신자는 1Byte라도 보낼 데이터가 있다면 송신한다.
2. 세그먼트를 만들고, 데이터를 채우면서 기다린다.
2-1. 데이터를 Maximum size(536Byte)만큼 채웠으면 보낸다.
2-2. 방금 보낸 세그먼트에 대한 ACK를 받았다면 데이터를 덜 채웠어도 보낸다.

Receiver

  • 하나의 Maximum사이즈의 세그먼트를 받을 수 있는 공간이 있을 때 까지 receive buffer 사이즈를 0으로 보낸다.
  • 세그먼트를 받은 후 일정 기간 기다렸다가 ACK를 보낸다.

TCP 연결 관리

3-way handshake

  1. 클라이언트 TCP는 서버 TCP에게 특별한 TCP 세그먼트인 SYN 세그먼트를 송신한다. 세그먼트에 담긴 값은 다음과 같다.
    • SYNbit = 1
    • Sequence number = x
  2. 서버는 TCP SYN 세그먼트를 추출하여 연결에 TCP 버퍼와 변수를 할당한다. 그리고 클라이언트 TCP로 연결 승인 세그먼트를 송신한다. 이 세그먼트는 SYNACK 세그먼트라고도 불린다.
    • SYNbit = 1
    • Sequence number = y
    • ACKbit = 1
    • ACKnum = x + 1
  3. 연결 승인 세그먼트를 수신하면, 클라이언트는 연결에 버퍼로아 변수를 할당한다. 그 후 클라이언트 호스트는 서버로 또 다른 세그먼틀 송신한다. 이는 서버의 연결 승인 세그먼트를 확인하는 것이다.
    • ACKbit = 1
    • ACKnum = y + 1

다음 단계들이 완료되면, 클라이언트와 서버 호스트들은 각각 서로에게 데이터를 포함하는 세그먼트를 보낼 수 있다.

TCP 연결종료
1. 클라이언트가 FINbit = 1 로 설정한 뒤 세그먼트를 보낸다.
2. 서버는 이 세그먼트를 수신하면, 서버는 클라이언트에게 확인응답 세그먼트를 보낸다. 그 후 FIN 비트가 1로 설정된 자신의 종료 세그먼트를 송신하다.
3. 마지막으로 클라이언트는 서버의 종료 세그먼트에 확인응답을 한다. 이 시점에서 두 호스트의 모든 자원 할당은 해제된다. 확인응답이 유실될 경우를 대비해서 클라이언트는 대기시간을 가진 후에 자원 할당을 해제한다.

Reference

KOCW - 컴퓨터 네트워크
컴퓨터 네트워킹 하향식 접근

0개의 댓글