인터넷 연결이 스토리지 쓰기 속도보다 빠를 경우 어떻게됩니까?


28

쓰기 속도가 500Mb / s (62.5MB / s) 인 하드 드라이브에 800Mb / s (100MB / s)의 속도로 파일을 다운로드하려고하면 어떻게됩니까? 시스템이 다운로드 속도를 제한합니까?


5
이것은 네트워크가 시작된 이래로 바쁜 시간 이외의 대학과 같이 빠른 네트워크에있을 때 일반적으로 발생하는 상황입니다.
피터-복원 모니카

4
프로그래밍 할 수 있으므로이를 쉽게 관찰 할 수 있습니다. 간단한 TCP 서버와 클라이언트를 작성하십시오 (선택한 언어의 소켓 라이브러리에 대한 예제를 찾을 수 있어야 함). 서브가 가능한 한 빨리 데이터를 전달하도록하고 지정된 속도에서만 해당 데이터를 읽도록 클라이언트를 수정하십시오. (읽기 사이에 수면). 데이터가 그대로 수신되었는지 확인하십시오. wireshark 또는 이와 유사한 형식으로 전송 된 패킷을 관찰 할 수도 있습니다.
Carsten S

3
@ PeterA.Schneider의 게시물에 설명 된 경험이 있으면 운영 체제의 RAM 버퍼를 고려해야한다고 말할 수 있습니다. 그것들이 채워질 때까지, 당신은 RAM의 속도로 다운로드 된 데이터를 효과적으로 저장할 수 있습니다. (보통 초당 수천 메가 바이트)
아무도

@ 아무도 물론 인터넷 백본을 구성하는 터무니없는 파이프가 항상있어 컴퓨터의 RAM을 유지할 수 없을 정도로 빠르게 데이터를 전송합니다!
Cort Ammon-복원 모니카

컴퓨터가 ICMP 요청을 생성하여 속도를 줄 이도록합니다. 그러나 이러한 빈약 한 속도에서는 SSD 또는 M.2 ssd를 얻을 수 있으며 이제 쓰기 속도가 너무 높아 100mb / s가 쉽습니다. 일부 M.2는 1500MB / s 쓰기입니다. RAID에 2 이상을 넣으면 여러 번 속도를 높일 수 있습니다. 일반 SSD는 용량 및 브랜드에 따라 300-450MB / s가 될 수 있습니다. storagereview.com/samsung_960_pro_m2_nvme_ssd_review
cybernard

답변:


41

인터넷에서 가장 널리 사용되는 TCP를 포함한 많은 프로토콜은 흐름 제어라는 것을 사용합니다. 흐름 제어는 TCP가 송신자가 버퍼를 비울 수있는 것보다 빠르게 패킷을 전송하여 수신자가 압도하지 않도록 보장한다는 것을 의미합니다. 아이디어는 데이터를 수신하는 노드가 현재 상태에 대해 알리기 위해 데이터를 보내는 노드에 일종의 피드백을 전송한다는 것입니다. 따라서 양방향 피드백을 통해 두 시스템 모두 최적의 리소스를 사용하고 하드웨어 불일치로 인한 문제를 예방할 수 있습니다.

https://ko.wikipedia.org/wiki/Flow_control_ (데이터)


2
... 이상적으로. Bufferbloat 는 여러 스위치가 지속적으로 증가하는 패킷 더미를 저장하고 전달하기를 기다리고 있음을 의미합니다 (이는 때때로 ACK가 계속 필요한 전송 프로토콜에 의해 다소 완화 될 수 있음).
Eric Towers

3
이것은 소비자 용량에 관계없이 TCP를 계속 사용하는 UDP와 구별됩니다.
피터-복원 모니카

5
@Fabian 이것은 어쨌든 항상 일어나는 일입니다. OS의 하드 드라이브 캐시를 사용하면 데이터를 기록 할 수있는 것보다 훨씬 빠르게 HDD로 '전송'할 수있어 RAM 내 캐시를 채우고 가능한 빨리 디스크에 쓸 수 있습니다. 따라서 시스템에서 (사용하지 않은) RAM의 양에 따라 OS는 디스크에 도달하기 전에 RAM에 수십에서 수백 MB의 파일을 버퍼링 할 수 있습니다. 그러나 응용 프로그램이 디스크에서 이미 영구적 인 것으로 간주 할 수있는 데이터가 특정 시간 동안 지속되지 않아 (전원) 오류 또는 이와 유사한 경우 예기치 않은 데이터 손실이 발생할 수 있기 때문에 캐시 크기는 타협입니다.
JimmyB

2
@Fabian : 8.1부터 Windows의 파일 복사 대화 상자에서 볼 수 있습니다. 확장 모드에서는 전송 속도가 표시되며 초반 정도가 매우 빠르다는 것을 알 수 있습니다. 파일이 그 동안 전송 될 수있는 것보다 큰 경우 속도가 크게 떨어집니다. 일정한 비율. 처음에 빠른 속도는 캐시 때문이었습니다. 채워지면 속도가 줄어 듭니다.
vsz

1
@EricTowers 아니요, 네트워크 연결이 병목 현상 일 때만 버퍼 블롯이 발생합니다. (하드 드라이브에 다른 유형의 버퍼 드라이브가있어 다른 하드 드라이브 작동이 느려지지만 다른 네트워크 연결에는 영향을 미치지 않습니다)
user253751

12

무슨 일이 일어날 지?

  • 적시에 HDD에 쓸 수없는 바이트는 일시적으로 어딘가에 버퍼링됩니다. 네트워크 트래픽을 HDD 트래픽 (예 : 브라우저)으로 "변환"하고 더 긴 정체의 경우 스택의 하위 레벨 부분 (예 : PC)는 낮은 수준의 버퍼도 가지고 있으며 가득 찰 때까지 채워집니다.
  • 데이터가 너무 빨리 온다는 정보는 어떤 방식으로 발신자에게 다시 전파됩니다. TCP / IP의 경우 이는 송신자에게 송신 중지를 지시하는 TCP 프로토콜의 일부가 있음을 의미합니다. TCP / IP의 Wikipedia 페이지는 다음과 같이 말할 때 가장 좋습니다.

    그것의 [TCP] 책임은 오류 제어, 세분화, 흐름 제어, 혼잡 제어 및 기본 네트워크와 독립적 인 엔드 투 엔드 메시지 전송을 포함합니다.

  • 하루가 끝나면 "시스템"(수신자의 컴퓨터 일 필요는 없지만 발신자, 네트워크 및 수신자로 구성된 전체 시스템)은 다운로드 속도를 간접적으로 "캡"합니다. 그러나 "속도"변수는 존재하지 않습니다. 네트워크 트래픽과 HDD 트래픽은 모두 블록 기반입니다. 즉, 순 "속도"(스루풋)가 평균 HDD.

시스템이 다운로드 속도를 제한합니까?

말 그대로는 아닙니다. 수십 년 전에 컴퓨터는 실제로 동기 속도 (예 : 고정 속도 설정의 모뎀)와 통신했습니다. 이것은 상대적으로 낮은 수준에서 오늘날에도 일어나고 있습니다. 즉, DSL 또는 케이블 모뎀은 직접 물리적 업 링크 구성 요소와 통신하는 속도를 설정합니다. 그러나 2017 년에는이 모든 것이 충분히 복잡하여 거의 모든 구성 요소가 매우 역동적입니다. 예전에는 모뎀이 물리적으로 특정 속도 만 말할 수 있었으며 전화를 걸기 전에 설정해야했습니다. ATM과 같은 일부 네트워크 프로토콜은 동기식 광역 네트워크를 얻으려고했습니다. 그러나 TCP / IP와 비교할 때 그렇게 나쁘지 않았습니다.

오늘날 효과적인 속도는 일반적으로 버퍼링, 흐름 제어 등을 통해 항상 암시 적으로 도달합니다.

또한 귀하의 예에는 더 많은 참가자가있을 수도 있습니다. 네트워크 인터페이스가 더 많은 작업을 수행 할 수 있습니다 (PC에 대한 다른 연결). 도중에 네트워크의 일부가 바쁠 수 있습니다 (가족이 서핑을하거나 비디오를 시청). HDD가 동시에 3 개의 큰 파일 쓰기를 수행하고있을 수 있습니다. 따라서 제한 될 수있는 "속도"를 구체적으로 설정하는 것은 의미가 없습니다.


2

파일 다운로드 (일반적으로)는 TCP라는 프로토콜을 통해 발생합니다. TCP에서 보낸 사람은받는 사람이 데이터를받을 준비가 될 때까지 데이터를 보내지 않습니다.

컴퓨터가 수신 된 데이터를 하드 드라이브에 쓰기 전에 버퍼에 저장하기 위해 약간의 RAM을 예약합니다. 그런 다음 보낸 사람에게 버퍼를 채우기에 충분한 데이터를 요청합니다. 데이터를 수신하면 버퍼에서 하드 드라이브로 데이터 쓰기가 시작되지만 버퍼가 거의 가득 찼을 때 더 많은 데이터를 요구하지 않습니다.

전체적인 효과는 발신자가 수신자가 전송을 계속하기 전에 따라 잡기를 기다릴뿐입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.