socket buffer 와 sk_buff 의 관계

jaeswith의 이미지

커널 프로그래밍인지, 아니면, 일반 프로그래밍 질문인지 좀 모호하네요.

제가 젤 궁금한 것은 socket이 하나 생성될때, recv와 send를 위해서 하나씩의 sk_buff 구조체가 생기는 것인가? 하는 것입니다.

이렇게 된다면, socket option에서 SO_RCVBUF나 SO_SNDBUF로 recv나 send 버퍼의 크기를 바꾸게 되면, socket buffer의 크기가 변하게 되죠?

그에 따라서, TCP의 window size도 변하게 되는거가 맞습니까?

쿨링팬의 이미지

다른 질문들에 대해서는 확실하게 대답을 못 하겠지만,

Quote:
그에 따라서, TCP의 window size도 변하게 되는거가 맞습니까?

TCP의 윈도우 크기는 네트웍 혼잡도에 따라 가변적으로 바뀐다고 알고 있습니다. 소켓 버퍼의 크기와는 별개입니다.

kim1158의 이미지

전송하는 매패킷 하나당 sk_buff가 하나 생성됩니다.
어플리케이션에서 전송하는 패킷이 커널의 전송계층(tcp/udp)에 이르러서
sk_buff로 변환됩니다.

전송계층의 세션을 관리하는 구조체는 struct sock. 인데요
하나의 통신세션당하나의 sock구조체를 가지게됩니다.
sock 구조체의 필드로 send,recv 패킷 큐를 가지고요.
송수신 되는 패킷들은 그 send,recv큐의 tail에 붙게 됩니다.

socket구조체는 세션을 관리하는 기능이 아니라 각 전송계층의
동작(connect, accept, send,recv ...)에 사용될 핸들러 구조체(proto_ops)를 가지고 있는 구조체입니다.
sock구조체에서는 socket구조체를 socket구조체가 가지고있는 핸들러를 참조할때 쓰지요

socket <-> sock 구조체는 자신과 연결된 상대를 구조체의 필드로 가지며 상호참조하게 구현되어있고요.

모든 디지털의 목표는 아날로그.

kim1158의 이미지

그리고 tcp window사이즈는 최소 tcp session이
생성될때 정해지게 됩니다.
아시다시피 tcp는 3-handshaking 으로 접속이 이루어지죠. 접속시도쪽에서 syn를 보내면 그에대해서
상대가 ack+syn 를 보내죠. 이 syn정보안에 현재 자신이 수신할수있는 최대 대역을 정해서 보내게 됩니다.
그게 tcp window 사이즈가 되는것이죠..

결국 tcp 통신의 대역은 maximum 가용대역이 아니라 호스트의 상태에 의해서 정해지게 되는것이죠.
이것이 tcp의 비효율성으로 지적되는 일반적인 문제점중 하나입니다.

모든 디지털의 목표는 아날로그.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.