CS/Network

3-4-3 TCP Flow control & Connection Management

WakaraNai 2021. 12. 3. 22:59
728x90
반응형

TCP  3. Flow Control

TCP layer는 data만 추출하여

TCP socket receiver buffer에 저장

 

application process는 그 buffer 에서 데이터를 읽음

 

flow control은 sender가 너무 많이 보내서 

이 buffer에 넘치도록 하는 것을 방지하는 것

 

 

receive buffer size는 OS가 지정

  • 보통 4096을 할당
  • 대부분의 OS는 RcvBuffer를 auto-adjust할 수도 있음

 

rwnd : receive window in TCP header

  • free buffer space
  • sender는 unacked된,
  • 즉 inflight data의 양이 receiver의 rwnd 값을 넘지 않도록 조절

 

계산식 : RcvBuffer - buffered data = free buffer space

 

 

TCP의 rwnd는 sending side에서 유지하는 parameter인데, 

 

이것은 receiver가 보내는

segment header의 receive window field에 의해 결정된다. 

 

즉, sender는 ack.된 sequence 번호로부터 

receive window field에 표시된 byte 만큼을 

ack. 받지 않은 상태로 더 보낼 수 있다.

 

 

 link가 더 느리기에 A의 TCP socket은 100Mbps에 맞추어 전송.

B의 reciever buffer에서 50Mbps 이후로 buffer가 넘치기에

host B는 host A에게 RcvWindow=0를 통해 그만 보내라고 알림.

 

RcvWindow>0이 될 때까지 host A는 TCP segment를 보내지 않음

이렇게 host A가 stop and start 를 반복하며 flow control.

 

 

TCP  4. Connection Management

handshake 시기에 connection 설립 동의를 둘 다 확인할 수 있어야 함

connection parameter를 설정 : initial sequence number, rcvBuffer size

 

clientSocket() 생성 하여 welcomeSocket에 요청이 들어오면

connectionSocket() 생성

 

2-way handshake : 사람만 가능

 client server에서는 loss로 인한 retransmission이나 delay 등으로 실패하기 쉬움

 

 

TCP 3-way handshake

SYN bit로 처음에는 initial sequence number를 보냄

syn에 대해 synack으로 답함 : syn, ack 모두 세팅됨

ACKnum = sequence num+1

그 크기는 ACKbit 에

 

TCP 3-way handshake : FSM Final state machine

<client>

clientsocket을 생성하면  syn 생성

 synack과 ack을 생성 - 여기에 실제 보내려는 data를 받음

 

<server>

listen은 상대방으로부터 syn 받을 때까지

거기에 대한 synack을보낸 뒤 SYN rcvd 상태로 넘어감

거기서는 이에 대한 ack을 기다림

 

 

TCP : closing connection

클라이언트 서버 각각 자신의 커넥션을 닫아야 함

 ( TCP는 양방향이라서)

FINAL FIN bit = 1로하여 TCP segment를 전송

너에게 보낼 데이터가 더 없다고 알림 ( close waiting state)

이에 대한 응답은 ACK을 하면서 동시에 할 수 있음

 

동시에 FIN을 교환하는 것도 가능 (simultaneous)

 

LAST_ACK을 받은 뒤로

max segment lifetime의 2배만큼 기다림

LAST_ACK에 대한 ACK이 loss일 때 

LAST_ACK을 다시 보낸 것을 받을 수 있도록

 

max segment lifetime의 2배까지면 충분히 기다린 것으로 생각

그 이상은 ghost packet이 너무 많이 떠다니게 됨

 

 

728x90
반응형

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

3-6 TCP detecting loss & Fairness & ECN  (0) 2021.12.03
3-5 TCP Congestion Control  (0) 2021.12.03
Reliable data transfer - TCP  (0) 2021.10.16
Connectionless Transport : UDP (checksum)  (0) 2021.10.16
Transport Layer - MUX, DeMUX  (0) 2021.10.16