2014-10-22 1 views
-1

크기가 1500 바이트를 초과 인 TCP 패킷을 수신 할 수없는 하나 개의 서버가 있습니다
하지만,이 서버는 TCP 패킷보다 큰 1500서버는 크기가 TCP 패킷을 수신 할 수없는 더 큰 1500 바이트

을 보낼 수 있습니다

또한 WireShark 분석을 위해이 서버에서 패킷을 캡처하려고합니다.
그러나 WireShark는이 서버에서 정상적으로 패킷을 캡처 할 수 없습니다.
(예 : 일부 수신 된 패킷을 WireShark에서 캡처하지 않음)

누구나 알고 있습니까? 고마워.

서버 정보
OS : Windows 2008;
MTU : 1500

======================================== ===========
이 질문에 대해 더 자세히 설명해 드리겠습니다. ---
나는 서버
2 사이에 TCP 연결을 만들 클라이언트/서버 프로그램을 가지고 < 1500 바이트가
를받을 수 없습니다
SERVER_A ---- SERVER_B
---> PKT 아래와 같은 상황은 > PKT> 1500 바이트는
< --- PKT < 1500 바이트 <
는 --- PKT> 1500 바이트이 프로그램은 SERVER_B 만 이상, 다른 서버에서 잘 작동

받을 수 있습니다받을 수 있습니다받을 수 있습니다.
누구나이 경험이 있습니까?

+2

mtu가 1500 인 경우 서버는 1500 바이트보다 큰 TCP 패킷을 보낼 수 있지만 결과 IP 데이터 그램이 mtu –

+0

보다 크지 않도록 IP 계층이 패킷을 조각냅니다. 1500보다 큰 패킷을 보낼 수 있습니다. 그러나이 경우 특정 서버에서 server_A와 server_B 사이에 TCP 연결을 만듭니다. 그리고 server_B에 패킷을 보냅니다. 패킷 크기가 1500보다 작 으면 server_B의 프로그램에서 패킷을 수신 할 수 있습니다. 그러나 1500보다 큰 경우에는 그렇지 않습니다. – liononline

+0

이 시점에서 코드 스 니펫을 게시하면 도움이 될 것입니다. Linux/Unix에서 TCP 소켓에 쓰는 코드를 만들 때 write() 시스템 호출을 수행하여 버퍼와 길이에 대한 포인터를 제공합니다. 그런 다음 OS는 얼마나 많은 양이 쓰여 졌는지 알려줍니다. OS가 전체 버퍼를 작성하지 않으면 보내지 않은 바이트에 대한 포인터로 write()를 다시 호출합니다. –

답변

1

패킷 크기가 1500보다 작 으면 server_B의 프로그램에서 패킷을 수신 할 수 있습니다. 그러나 1500보다 큰 경우에는 그렇지 않습니다.

TCP는 메시징 프로토콜이 아닙니다. 이것은 바이트 스트림 프로토콜입니다. 계속 읽으세요.

관련 문제