>> Edit article
이름
제목
패스워드
: TCP/IP한번의 send로 보낼 수 있는 데이타의 크기가 한정 되어 있는지요? : : 제경우 와우 파란 R2(2.4.18-4smp)를 쓰는데.. : : 556032 bytes이상 send한번의 호출로 보내지지 않는군요.. : : 이 경우 유저 레벨에서 나눠서 보내줘야 하는 건가요? : : 보통은 어떻게 처리하는 지 궁금하네요.. TCP/IP에서 패킷 하나의 크기는 1500bytes가 기본입니다. (ether header 14bytes를 제외한 크기 ^^ ) 그리고 tcp header 20bytes, ip header 20bytes이므로 한 패킷으로 보낼 수 있는 데이터의 크기는 1500 - 40 = 1460 bytes가 되겠습니다. 물론 OS의 MTU (Maximun Trans??? Unit (??))의 크기를 1500 이상으로 설정하여 사용할 수 있습니다만.. 1500이상의 패킷이 각 노드를 거치다가 MTU가 1500인곳을 지날때는 재전송을 요청하게 되므로 그냥 1500에 맞추어 전송하는것이 좋습니다. 위에서 5Kbytes가 넘는 데이터를 한번에 보냈다고 는 하지만 정작 OS는 그것을 1500bytes씩(MTU크기만큼) 잘라서 여러번 send(write)를 호출한 것입니다. 보통 큰 용량의 데이터(파일전송같은거)를 전송할때는 1500을 넘지않고 계산하기도 편리하도록 1024bytes의 데이터를 여러번 전송합니다. 이렇게 하는 가장 큰 이유는... 리눅스에서 2048bytes와 같이 MTU를 넘는 데이터를 send하고, 윈도에서 recv를 할 경우, 리눅스에서 send는 표면적으로 한번 호출되지만 데이터는 1460, 588bytes의 두개로 전송됩니다. 이때 윈도에서 recv를 2048bytes를 하게되면, 1460bytes의 데이터와 뒤에 2048bytes까지 NULL로 패딩된 데이터와 588bytes의 나머지 데이터를 받는 두번의 recv가 일어나게됩니다. 주의하시길... ^^;
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved