Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 공인 IP
- Code complete
- Public IP
- float
- Sector
- 가독성
- floating point
- 명령어
- refactoring
- L3 Router
- MMU
- ALU
- Clean code
- ack
- interrupt
- osi 7
- 사설 IP
- cache
- physical address
- register
- addressing mode
- private ip
- CPU
- network
- 클린 코드
- L2 switch
- 리펙토링
- page
- 코드 컴플릿
- TCP
Archives
- Today
- Total
Software Lab
4. 흐름제어(Flow Control) 본문
흐름 제어가 필요한 이유를 알아보자.
왼쪽 송신 호스트(B 호스트)는 오른쪽 수신 호스트(C 호스트)에게 데이터를 전송한다. 그런데 송신 호스트는 20M/Sec 송신하는데 오른쪽 수신 호스트는 겨우 10M/Sec으로 수신받아 처리할 수 있다. 이렇게 되면 수신 호스트는 나머지 10M/Sec의 데이터를 수신할 수 없는 문제가 생긴다. 따라서 송신 호스트가 20M/Sec에서 10M/Sec으로 송신 속도를 낮추어야 한다.이렇듯 수신 속도에 맞게 송신 속도를 낮추는 것을 흐름 제어라고 한다.
다음은 TCP에서 흐름제어를 어떻게 하는지 알아보자.
왼쪽 송신 호스트와 오른쪽 수신 호스트는 각각의 큐 구조의 송수신 버퍼를 가진다. 송신 버퍼에 있는 전체 데이터에서 MSS 단위(그림에서는 1000 byte) 만큼을 잘라서 패킷을 만들어 송신한다. 패킷에서 4계층의 TCP 헤더에는 다음 정보가 들어간다.
Sequence : 패킷을 보낼 때마다 그것의 데이터양만큼 누적되어 증가한다. 다음 송신 패킷의 Sequence는 현재 송신 패킷의 Sequence와 Length를 더한 값이다. |
Length : 데이터 길이이다. |
패킷을 받은 수신 호스트는 패킷에서 헤더를 제거하고 데이터를 수신 버퍼에 넣는다. 그리고 ACK 패킷 만들어 응답으로 보낸다. ACK 패킷의 4계층의 TCP 헤더에는 다음 정보가 들어간다.
ACK 번호 : 수신 받은 패킷의 Sequence 번호이다. |
Window : 수신 버퍼에서 남은 공간 크기이다. 송신 호스트는 해당 값을 통해 흐름 제어를 한다. |
ACK 패킷을 받은 송신 호스트는 ACK 번호보다 작은 Sequence의 데이터 구간을 송신 버퍼에서 제거한다. 송신 호스트는 Window의 크기를 보고 패킷의 송신 속도를 조절한다. 즉 흐름 제어한다. Window가 작다면 수신 호스트의 수신 처리 능력이 부족한 것이므로 송신 속도를 낮추고 반대로 크다면 송신 속도를 높인다.
'네트워크 > 4 Layer' 카테고리의 다른 글
6. 혼잡제어(Congestion Control) (0) | 2022.10.31 |
---|---|
5. 오류제어(Error Control) (0) | 2022.10.31 |
3. 슬라이딩 윈도우(Sliding Window) (0) | 2022.10.31 |
2. MSS, MTU (0) | 2022.10.31 |
1. TCP(Transmission Control Protocol) (0) | 2022.10.31 |
Comments