서버에 ssh하면 ls 명령을 실행하고 결과를 얻는 사이의 시간은 거의 아무것도 아닙니다.
그러나 브라우저의 동일한 서버에서 간단한 html 페이지 (단어 'hello'만 포함)에 대한 http 요청을 발행하면 적어도 1 초가 걸립니다.
왜 이런거야?
서버에 ssh하면 ls 명령을 실행하고 결과를 얻는 사이의 시간은 거의 아무것도 아닙니다.
그러나 브라우저의 동일한 서버에서 간단한 html 페이지 (단어 'hello'만 포함)에 대한 http 요청을 발행하면 적어도 1 초가 걸립니다.
왜 이런거야?
답변:
SSH의 작동 방식에 대해서는 많이 모르지만 기본적으로 키보드 입력을 가져 와서 원격 콘솔의 쉘로 파이프합니다. 연결이 설정되고 키가 교환되면 매우 가벼워집니다.
HTTP는 완전히 다른 프로토콜입니다. 정적 HTML 페이지라고 가정하면 다음과 같이 약간 작동합니다.
그것은 정말 기본적인 개요이지만 HTTP에는 더 많은 것들이 있습니다. SSH와 달리 "경량"프로토콜이 아닙니다.
또한 SSH와 달리 대부분의 HTTP 요청은 자체 포함되며 TCP 연결이 다시 설정됩니다. SSH는 TCP 세션을 열린 상태로 유지하므로 키를 누를 때마다 연결을 다시 설정할 필요가 없습니다. 그렇기 때문에 몇 분 동안 웹 브라우저의 플러그를 뽑아도 살아남을 수 있지만 연결이 끊어진 순간 SSH 세션이 끊어집니다.
사과와 오렌지를 비교하고 있습니다.
한 단어로 된 웹 페이지를 다운로드하는 시간은 대부분 실제로 연결을 설정하는 데 필요한 시간, 즉 호스트의 DNS 레코드를 찾은 다음 TCP 연결을 만든 다음 문서를 요청하는 시간으로 구성됩니다.
이것은 ssh 연결을 설정하는 데 걸리는 시간과 더 비슷합니다. 호스트에 대한 DNS 레코드를 찾은 다음 TCP 연결을 한 다음 인증합니다. ssh가 훨씬 더 복잡한 프로토콜이기 때문에 실제로는 훨씬 더 깁니다. (암호화를 설정해야합니다).
ssh 세션에서 대화식 응답 시간은 대부분 실제로 연결이 설정된 후 사용자와 원격 서버 간의 대기 시간으로 인한 것입니다. HTTP에는 일대일 아날로그가 없지만 HTTP에는 기본적으로 켜져있는 연결 유지 옵션이 있으며 서버에 대한 연결을 열어서 여러 리소스를 다운로드하지 않고도 여러 리소스를 다운로드 할 수 있습니다 다시 연결하십시오.
ls
over SSH 보다 HTTP 요청에 사용 됩니다.
방금 SSH 연결과 wget 시간을 정했습니다.
$ time ssh (host) echo "" > /dev/null
real 0m0.461s
user 0m0.004s
sys 0m0.012s
$ time wget (host)
(deletia)
real 0m0.013s
user 0m0.008s
sys 0m0.000s
"빠른"은 상대적입니다.
대화식 SSH는 소켓 TCP NODELAY 옵션을 설정하여 사용한 대역폭을 사용하여 대기 시간을 줄이므로 모든 키 입력이 즉시 서버로 전송됩니다.