- TCP/IP : 데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약
- TCP : Transmission Control Protocol
- 많은 양의 데이터를 가져와서 패킷으로 컴파일한 다음 동료 TCP 계층에서 수신하도록 전송하여 패킷을 유용한 정보/데이터로 바꾸는 역할
- 전달받은 패킷을 재조립하고, 패킷에 손상이 있거나 손실된 패킷이 있다면 재전송을 요청하는 패킷을 전송하여 재전송 받음
- IP : Internet Protocol
- 인터넷에서 컴퓨터의 위치를 찾아서 데이터를 전송하기 위해 지켜야 할 규약
- 데이터를 전송하기 위한 올바른 목적지를 찾는 패킷 GPS 역할
- TCP/IP의 4계층
- 네트워크 액세스 계층
- OSI 7계층의 물리계층과 데이터 링크 계층에 해당
- TCP/IP 패킷을 네트워크 매체로 전달하는 것과 네트워크 매체에서 TCP/IP 패킷을 받아들이는 과정을 담당
- 에러 검출 기능, 패킷의 프레임화
- 네트워크 접근 방법, 프레임 포맷, 매체에 대해 독립적으로 동작하도록 설계
- 물리적인 주소로 MAC을 사용
- LAN, 패킷망 등에 사용
- 인터넷 계층
- 네트워크 계층에 해당
- 어드레싱(addressing), 패키징(packaging), 라우팅(routing) 기능을 제공
- 네트워크상 최종 목적지까지 정확하게 연결되도록 연결성을 제공하게 됨
- 프로토콜 종류 : IP, ARP, RARP
- 전송 계층
- 전송 계층에 해당
- 애플리케이션 계층의 세션과 데이터그램 통신 서비스 제공
- 통신 노드 간의 연결을 제어하고, 신뢰성 있는 데이터 전송을 담당
- 프로토콜 종류 - TCP, UDP
- 응용 계층
- 세션계층, 표현 계층, 응용 계층에 해당
- 프로그램(브라우저)가 직접 인터랙트하는 레이어, 데이터를 처음으로 받는 곳
- 다른 계층의 서비스에 접근할 수 있게 하는 애플리케이션을 제공
- 애플리케이션들이 데이터를 교환하기 위해 사용하는 프로토콜을 정의
- HTTP, SMTP 등의 프로토콜을 가짐
- TCP/ UDP 기반의 응용 프로그램을 구현할 때 사용
- 프로토콜의 종류 : FTP, HTTP, SSH
- 네트워크 액세스 계층
- TCP : Transmission Control Protocol
2. 흐름제어 (flowcontrol, endsystem - endsystem)
💡 송신측과 수신측 사이의 데이터 처리 속도 차이(흐름)을 해결하기 위한 기법
→ 만약, 송신측의 전송 속도가 수신측의 처리 속도보다 빨라서 송신측의 전송량 > 수신측의 수신량일 경우 전송된 패킷은 수식측의 큐를 넘어서 손실될 수 있음 ⇒ 송신측의 패킷 전송량을 수신측에 따라 제어해야 함
패킷이란, 인터넷 내에서 데이터를 보내기 위한 경로 배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각으로 나누어 전송을 하는데, 이 때 조각을 패킷이라고 함
- Flow Control은 receiver가 packet을 지나치게 많이 받지 않도록 조절하는 것
- 기본 개념은 receiver가 sender에게 현재 자신의 상태를 feedback 한다는 점
[전송의 전체 과정]
- Application Layer : 송신측 Application Layer가 소켓에 데이터를 입력
- Transport Layer : 데이터를 세그먼트로 감싸고 Network Layer에 전달
- 수신측 노드로 세그먼트가 전송됨과 동시에 송신측의 Send Buffer와 수신측의 Receive Buffer 각각에 데이터가 저장
- 수신측 Application Layer에서 준비가 되면, Receive Buffer에 있는 데이터를 읽기 시작함
- 따라서, Receive Buffer가 넘쳐나지 않도록 하는 것이 흐름 제어의 핵심
- 이를 위해 RWND(Receive Window, Receive Buffer의 남은 공간)을 송신측에 계속하여 피드백함
✅ 흐름제어 방식
- Stop and Wait (정지 대기) : 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
- 단점 : 패킷을 하나씩 보내기 때문에 비효율적
- 단점 : 패킷을 하나씩 보내기 때문에 비효율적
- Sliding Window (Go Back N ARG) : 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
- 동작 방식 : 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
- 수신측에서 설정한 윈도우 크기만큼은 송신측에서 확인 응답 ACK를 받기 전에 전송 가능
- 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜
- 목적 : 전송은 되었지만, acked를 받지 못한 byte의 숫자를 파악하기 위해 사용하는 protocol
• Window : TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 Window를 가지고 있음. 호스트들은 실제 데이터를 보내기 전에 '3 way handshaking'을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 된다.
☑️ 세부구조
- 송신 버퍼
- 200 이전의 바이트는 이미 전송되었고, 확인응답을 받은 상태
- 200~202 바이트는 전송되었으나 확인 응답을 받지 못한 상태
- 203~211 바이트는 아직 전송이 되지 않은 상태
2. 수신 윈도우
3. 송신 윈도우
- 수신 윈도우보다 작거나 같은 크기로 송신 윈도우를 지정하게되면 흐름제어가 가능
4. 송신 윈도우 이동
- Before : 203~204를 전송하면 수신측에서는 확인 응답 203을 보내고, 송신측은 이를 받아 after 상태와 같이 수신 윈도우를 203~209 범위로 이동
- After : 205~209가 전송 가능한 상태
5. Selected Repeat
3. 혼잡제어(Congestion Control)
💡 송신측의 데이터 전달과 네트워크 상의 데이터 처리 속도 차이를 해결하기 위한 기법
: 송신측에서 보내는 데이터의 전송 속도를 제어
- 송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달됨.
- 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 됨. 이런 경우 호스트들은 또 다시 재전송을 하게 되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시키게 됨.
- 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이게 되는데, 이러한 작업을 혼잡제어라고 함
- 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라 하며, 혼잡 현상을 방지하거나 제거하는 기능을 혼잡제어라고 함
- 흐름제어가 송신측과 수신측 사이의 전송 속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송 문제를 다루게 됨
✅ 해결 방법
- AIMD(Additive Increase/ Multiplicative Decrease) : 합 증가/ 곱 감소 알고리즘
- 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가 시켜가며 전송하는 방법
- 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄임
- 공평한 방식으로, 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에 불리하지만, 시간이 흐르면 평형상태로 수렵하게 되는 특징이 있음
- 문제점
- 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리게 됨
- 네트워크가 혼잡해지는 상황을 미리 감지하지 못함. 즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식
- 느린 시작(Slow Start)
- AIMD 방식이 네트워크의 수용량 주변에서는 효율적으로 작동하지만, 처음에 전송 속도를 올리는데 시간이 오래걸리는 단점이 존재
- 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려줌. → 한 주기가 지나고 나면 window size가 2배로 됨
- 윈도우의 크기를 1, 2, 4, 8, … 과 같이 지수적으로 증가시키다가 혼잡이 감지되면 윈도우 크기를 1로 줄이는 방식
- 전송속도는 AIMD에 반해 지수 함수 꼴로 증가. 대신에 혼잡 현상이 발생하면 window size를 1로 떨어뜨리게 됨
- 처음에는 네트워크의 수용량을 예상할 수 있는 정보가 없지만, 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 어느 정도 예상할 수 있음
- 혼잡현상이 발생하였던 window size의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가시키고, 그 이후부터는 완만하게 1씩 증가시킴
- 빠른 재전송(Fast Retransmit)
- TCP는 지금까지 받은 데이터 중 연속되는 패킷의 마지막 순번 이후를 ACK 패킷에 실어서 보냄
- 송신 측이 아래 처럼 3, 4번을 보내더라도 ACK2를 중복해서 받음
- 그러면 timeout이 발생하기 전이라도 송신측은 문제가 되는 2번 패킷을 재전송함
- 그리고 혼잡한 상황이라고 판단해서 윈도우 크기를 줄임
- 3 ACK Duplicated : 송신 측이 3번 이상 중복된 ACK 번호를 받은 상황
- 빠른 회복(Fast Recovery)
- 혼잡한 상태가 되면 window size를 1 줄이지 않고 반으로 줄이고 선형증가시키는 방법. 이 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작하게 됨
☑️ 혼잡 제어 정책
- Tahoe, Reno, New Reno, Cubic, Elastic-TCP 까지 다양한 혼잡 제어 정책이 존재
- 공통적으로 혼잡이 발생하면 윈도우 크기를 줄이거나, 혹은 증가시키지 않으며 혼잡을 회피한다라는 전제를 깔고 있음
1. TCP Tahoe
- 처음에는 Slow Start 방식을 사용하다가 임계점에 도달하면 AIMD 방식 사용
- 그러다 3 ACK 순번 중복이나 타임아웃이 발생하면 혼잡이라고 판단하여 임계점은 혼잡이 발생한 윈도우 크기의 절반으로, 윈도우 크기는 1로 줄임
2. TCP Reno
- TCP Reno는 TCP Tahoe 이후에 나온 정책으로, Tahoe와 마찬가지로 Slow Start로 시작하여 임계점을 넘어서면 AIMD을 사용한다. 다만, Tahoe와는 다르게 3 ACK Duplicated와 Timeout 혼잡 상황을 구분한다.
'CS > Network' 카테고리의 다른 글
[CS] HTTP & HTTPS (0) | 2024.01.26 |
---|---|
[CS] 대칭키 & 공개키 (1) | 2023.11.29 |
[CS] UDP (0) | 2023.11.29 |
[CS] TCP 3 &4 way handshake (1) | 2023.10.25 |
[CS] OSI 7계층 (0) | 2023.10.24 |