socket buffer 와 sk_buff 의 관계
글쓴이: jaeswith / 작성시간: 화, 2004/10/12 - 10:09오전
커널 프로그래밍인지, 아니면, 일반 프로그래밍 질문인지 좀 모호하네요.
제가 젤 궁금한 것은 socket이 하나 생성될때, recv와 send를 위해서 하나씩의 sk_buff 구조체가 생기는 것인가? 하는 것입니다.
이렇게 된다면, socket option에서 SO_RCVBUF나 SO_SNDBUF로 recv나 send 버퍼의 크기를 바꾸게 되면, socket buffer의 크기가 변하게 되죠?
그에 따라서, TCP의 window size도 변하게 되는거가 맞습니까?
Forums:
다른 질문들에 대해서는 확실하게 대답을 못 하겠지만,[quote]
다른 질문들에 대해서는 확실하게 대답을 못 하겠지만,
TCP의 윈도우 크기는 네트웍 혼잡도에 따라 가변적으로 바뀐다고 알고 있습니다. 소켓 버퍼의 크기와는 별개입니다.
전송하는 매패킷 하나당 sk_buff가 하나 생성됩니다. 어플리케이션
전송하는 매패킷 하나당 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 구조체는 자신과 연결된 상대를 구조체의 필드로 가지며 상호참조하게 구현되어있고요.
모든 디지털의 목표는 아날로그.
그리고 tcp window사이즈는 최소 tcp session이 생성될
그리고 tcp window사이즈는 최소 tcp session이
생성될때 정해지게 됩니다.
아시다시피 tcp는 3-handshaking 으로 접속이 이루어지죠. 접속시도쪽에서 syn를 보내면 그에대해서
상대가 ack+syn 를 보내죠. 이 syn정보안에 현재 자신이 수신할수있는 최대 대역을 정해서 보내게 됩니다.
그게 tcp window 사이즈가 되는것이죠..
결국 tcp 통신의 대역은 maximum 가용대역이 아니라 호스트의 상태에 의해서 정해지게 되는것이죠.
이것이 tcp의 비효율성으로 지적되는 일반적인 문제점중 하나입니다.
모든 디지털의 목표는 아날로그.
댓글 달기