소켓에서 파일 전송할때, 왜 4096 단위로 보내나요?

jagalchee의 이미지

소켓을 이용해서, 파일을 전송할 때(바이너리든지 텍스트 든지 상관없이) 일반적으로 4096 바이트 단위로 보낸다고들 합니다. 혹은 4096*2 의 바이트 단위로 보낸다고 들 하는데...

왜 이렇게 보내는 것이 일반적인것인지가 매우 매우 궁금합니다. 자세한 설명 부탁드립니다.

mach의 이미지

꼭 그러할 필요는 없습니다.

두가지 경우를 생각해 볼 수 있습니다.
파일 서버( 파일을 읽어서, 소켓을 사용하여 전송한 후, 파일을 저장한다.)의 사례가 좋은 예로 보입니다.

파일 시스템의 블럭사이즈에 대한 연구가 있었는데(1980년대초),
이때, 4KB가 성능 및 효율에서 우수하다는 것을
입증한 이후 많은 운영체제(특히, BSD)가 이를
채택하였습니다.
즉, 한번의 시스템 호출로 디스크상에서 입력을 받을때,
어느정도를 읽거나 쓰는게 좋을까? 라는 연구였지요.

디스크 상에서 IO를 수행할 때는 4KB가 가장 이상적이
었음을 알 수 있었습니다.

통신의 관점으로 볼때는 layering와 fragmentation을 고려하게 됩니다.
즉, send()와 recv()시의 적절한 사이즈는 얼마인가?
어느정도 크기가 가장 이상적일까? 인데, 이 또한 운영체제의
구현에 상당부분 의존적입니다. TCP를 사용하는 경우
TCP프로토콜 스택구현에서의 버퍼크기를 고려할 수
있습니다. 이 경우 4KB가 이상적이랄 수 있습니다.(layer 4 TCP에서)
그러나, Layer3는 하드웨어에 비의존적인 라우팅을 수행하기 위해 레이어4의
데이터를 잘게 잘게 자르게 됩니다. 즉 링크레이어의 MTU에 맞게 자르게 됩니다.
예를들어, Ethernet(가장 많이 쓰지요?)의 경우 1500Bytes가 그 최대
사이즈이니, 결국 잘게 조각내서 보내고 다시 붙여서 받는 작업을 수행해야
겠지요.
4K가 유리한 면도 다소 있을 수 있겠습니다만, "일반적"이랄 수는 없는
것입니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.