나는이 문제에 관해 다른 질문을했지만 올바르게 질문하지 않았으므로 여기서 다시 간다!이상한 send() 문제 (Wireshark 로그 사용)
파일을 청크로 보내 보내드립니다. 현재, 나는 그 크기의 다른 숫자를 가지고 놀고 있는데, 어떤 크기가 가장 효율적인 지 알기 위해서입니다.
로컬 호스트에서 테스트 할 때 모든 청크 크기가 정상적으로 작동하는 것 같습니다. 하지만 네트워크를 통해 테스트했을 때 최대 청크 크기는 8191 바이트 인 것 같습니다. 내가 더 높은 것을 시도하면, 전송은 매우 고통스럽고 느려집니다.
청크 크기를 8191 바이트로 사용할 때 Wireshark 로그의 처음 100 줄을 표시하고, 청크 크기를 8192 바이트로 사용할 때 다음과 같습니다 (발신자는 192.168.0.102이고 수신자는 192.168.0.102입니다. 인 192.168.0.100)
8191
:8192 http://pastebin.com/E7jFFY4p 다음 8192 로그, 라인 (33)에, 수신기는 데이터를 ACK로 오랜 시간이 걸리는 http://pastebin.com/9P2rYa1p
통지. 이것은 103 행과 132 행에서 다시 발생합니다.이 지연이 문제의 근원이라고 생각합니다.
SO_SNDBUF 옵션이나 TCP_NODELAY 옵션을 수정하지 않았습니다.
그럼 내 질문은 왜 8191 바이트의 청크를 사용할 때 모든 것이 잘 작동 할 때 8192 바이트의 청크로 파일을 전송할 때 지연 ACK가 발생합니까?
일부 코드를 표시 할 수 있습니까? 그것은 우리에게 무슨 일이 벌어지고 있는지에 대한 더 나은 단서를 줄 수 있습니다. 또한 코드가 양쪽에서 실행되고 있습니까? 또는 연결의 단지 1면? – Pretzel
관련 섹션의 의사 코드를 추가했습니다. – Meta