[ CnUnix ] in KIDS 글 쓴 이(By): terzeron (microkid) 날 짜 (Date): 2004년 10월 21일 목요일 오전 11시 24분 04초 제 목(Title): Re: [질문] socket buffer와 MSS의 관계 > MSS는 하나의 패킷이 NIC를 통해서 나갈 수 있는 크기라고 합니다. > 이더넷은 1.5K, 또는 점보프레임은 9K, 16K 정도 되는것 같은데요. > > 이러한 패킷을 만들어서 보내는 소켓의 read buffer는 > 작게는 4K, 디폴트로 85K, 젤 크게는 170K까지 된다고 합니다. > (/proc/sys/net/ipv4/tcp_rmem) > > 그러면, 소켓에서 어떤 데이터를 받을때, 상대방에서 들어오는 패킷은 > 모두 이 각각 해당되는 소켓 버퍼로 들어와 있는 것인가요? > 즉, 여러개의 패킷이 도착해도 같은 소켓 버퍼에 순차적으로 쌓이는 > 것이겠죠? 소켓 버퍼를 말씀하셨으니 Transport Layer에서 사용하는 네트웍 버퍼를 지칭하는 것일테고 그렇다면 해당 레이어 프로토콜이 버퍼를 사용하는 방식에 따라 차이가 있습니다. 다만, 말씀하신 TCP의 경우 flow control이 포함되어 있으므로 packet sequence number에 따라 정렬해서 메시지(TCP 수준에서의 패킷)를 만들게 됩니다. 여러 개의 패킷이 도착하면 도착 순서가 아니라 sequcen number에 따라 쌓이는 거죠. 중간 패킷이 빠지지 않고 쭉 이어져 있는 부분까지는 애플리케이션이 읽을 수 있게 됩니다. (그렇지 않으면 일반적으로는 IO가 block됩니다. read가 반환되지 않고 대기하는 거죠.) UDP의 경우에는 flow control을 해주지 않으므로 애플리케이션에서 순서대로 오지 않은 데이터그램(UDP수준에서의 패킷)을 직접 flow control을 해줘야 합니다. 여러 개의 패킷이 도착하면 도착 순서대로 Application Layer로 넘겨집니다. --- 어떤 성취가, 어떤 조롱이, 또는 어떤 고뇌가 나를 기다리고 있을지 나는 모른다. 나는 아무 것도 모른다. 그러나 나는 아직 과거의 경이로운 기적의 시대가 영원히 과거의 것이 되어 버리지는 않았다는 사실을 굳게 믿고 있다. - Stanislaw Lem - |