Flow Control
A | B | |
send buffer(나의 seq#) | ===> | recv buffer(상대방의 seq#) |
recv buffer(상대방의 seq#) | <=== | send buffer(나의 seq#) |
(A,B) 각자 자기 자신의 데이터를 보내는 양 & 속도를 조절할 수 있다
실제 sender가 receiver에게 available space만큼 segment를 보내줘야한다
Q. 초과해서 보내면?
A. 오버플로우 발생 (누수)
이렇게 recv buffer에 맞춰서 전송속도를 control하는 것을, flow control이라고 한다
sender가 recv의 상황을 알 수 있도록 recv가 header에 available space를 report해준다
(segment를 보낼때 RcvWindow값을 포함시킨다)
전송속도를 조절한다는 것 : 단위시간당 보내는 양을 조절한다는 의미이다
minor issue
남아있는 공간은 application이 읽는 속도와도 관련이 있다 : 읽을때 recv buffer를 비우기 때문
- recv buffr에 남은 공간이 10byte이면, sender는 10byte를 보내준다
- recv buffr에 남은 공간이 하나도 없으면, sender는 아무것도 보내주지 않는다
만약에, B가 A한테 보낼 데이터가 없다고 가정하자. 이 상태에서 B의 application이 읽어서 recv buffer에 빈공간이 생겼다면, sender에게 알려줄 수가 없다
(sender도 멈춰있고 receiver도 멈춰있는 상황이기 때문에 진전이 안된다)
그래서 sender가 receiver에게 주기적으로 segment를 보낸다. 여기서 segment는 data부분이 비워져있다
Connection management
SYN bit = 1 // 보통 0이다
ㄴ 너랑 TCP 연결하고 싶어
세번째 연결때 (ACKbit = 1, ACKnum = y+1, 데이터를 포함하고 있다)
Q. 왜 두번이 아니라 굳이 세번을 연결시켰을까?
A입장 : 야호1했을 때 B의야호2를 받아야 잘 연결됐는지 확인된다
B입장 : 야호2했을때 A의 야호3을 받아야 잘 연결됐는지 확인된다
1. SYN : 클라이언트가 서버에 연결을 요청한다
ㄴ 클라이언트의 seq#를 서버에 알려준다
ㄴ SYN 메세지를 보낸다는 것은 TCP 연결을 요청하는 것이다
ㄴ TCP Header에 있는 syn신호를 통해 올릴 수 있다
2. SYN/ACK : 서버가 클라이언트에게서 SYN을 받고 SYNACK 세그먼트를 전송한다
ㄴ 서버의 seq#를 클라이언트에게 알려준다
ㄴ 이 과정을 통해 서버가 버퍼를 만든다
ㄴ TCP Header에 있는 SYN신호와 ACK신호를 이용한다
ㄴ 제대로 메세지가 전송됐다는 것을 알 수 있다
3. ACK : 클라이언트가 SYNACK를 받고 서버에 ACK를 보내준다
ㄴ ACK과정에서는 클라이언트가 서버에 실제 데이터를 담아 보낼 수 있다
ㄴ 제대로 메세지가 전송됐다는 것을 알 수 있다
http프로토콜을 사용할 때 client와 server연결과정
client | server | |
TCP (SYN) | ||
TCP (SYNACK) | ||
HTTPresponse(3번째에 데이터를 포함하고 있다) |
Closing TCP Connection
FIN : 내가 보낼 데이터는 다 보냈다는 의미
한쪽에서 데이터를 다 보냈으면, 끝났다고 FIN을 보낸다
양쪽에서 FIN을 보내고 ACK를 받은 후에 기다렸다가 닫는다
Q. 왜 바로 닫지 않고 기다릴까?
A. 마지막 ACK가 유실됐다고 가정해보자. 만약에 그렇다면 timeout해서 다시 ACK를 보내는데 한쪽이 먼저 철수해버리면 곤란한 상황이 되기 때문이다
timeout value는 고정된 값이 아니라 항상 변하는 값이다
Principles of congestion control
Network의 능력치 한계
sender의 전송속도는 network와 recv buffer중 더 상태가 안좋은 것에 맞춰야한다
congestion control : 네트워크 상태에 맞춰서 전송속도를 조절하는 것
네트워크가 막히면 TCP는 재전송한다. 네트워크가 막히면 안된다 ! 개인속도를 줄이는 것은 모두 살 수 있는 길이다
(라우터는 이미 할일이 많다)네트워크 상황을 따로 리포트 해주는 것이 없다
A,B가 알아서 RTT로 내부 상황을 유추해야한다
TCP의 ACK를 보고 어떻게 동작해야하는지 결정한다. 따라서 아주 정확하게 조절속도를 맞추는것은 불가능하다
'Computer Network' 카테고리의 다른 글
[Lecture] Network layer : IP(Internet Protocol) (0) | 2024.02.24 |
---|---|
[Lecture] TCP : Congestion control (0) | 2024.02.23 |
[Lecture] Connection-oriented transport: TCP (0) | 2024.02.22 |
[Lecture] Pipelined protocol (Go-Back-N과 Selective Repeat) (0) | 2024.02.20 |
[Lecture] Principles of Reliable Data Transfer (0) | 2024.02.20 |