Windows에서 TCP 송신 및 수신 큐 크기를 보려면 어떻게합니까?


10

Linux netstat는 보내기 및 받기 큐 크기를 보여줍니다.

Windows, 특히 Server 2003에서이 정보를 얻으려면 어떻게해야합니까?


보고 싶은 출력의 예를 붙여 넣을 수 있습니까?
Izzy

이 링크를 확인하십시오. netstat의 Recv-Q 및 Send-Q 열이 필요합니다. linux-ip.net/html/tools-netstat.html

답변:


3

(이것은 약간의 뇌 덤프입니다)

netstat 소스의 두 가지 버전을 살펴보면 찾고있는 정보가 Windows와 동등한 소켓 관련 호출이 아닌 커널 (/ proc / net / ...)에서 직접 쿼리되는 것처럼 보입니다. 이것이 실제로 있다고 결정되면 netstat에서 어떻게 검색되는지 살펴보고 동등한 것을 제공하는 것을 볼 수 있습니다.

드라이버 수준 정보 는 ndis.com (Network Driver Interface Specification) 및 PCAUSA.com 을 참조하십시오. Windows에서이 정보를 검색하기에 가장 좋은 장소 일 수 있습니다.

getsockopt () 또는 대부분의 Winsock 아레나가 유용하다고 생각하지는 않지만 그 방향으로 가고 싶다면 MSDN Winsock 정보를보고 Winsock Programmer 's FAQ를 확인하십시오 .

인바운드의 경우 소켓에 대해 읽을 수있는 데이터의 양을 얻기 위해 FIONREAD를 사용하여 ioctlsocket () 함수에서 유용한 정보를 얻을 수 있습니다. 여러 프로세스에서이를 얻지 못할 수 있으며 데이터 유형에 따라 큐에 대기중인 항목이 두 개 이상인 경우 전체 큐가 아닌 첫 번째 데이터 블록에 대한 정보 만 반환 할 수 있습니다.

이 맥락에서 "백 로그"를 파헤칠 수도 있지만 실제로 본 SYN 플러드를 처리하기 위해 최대 크기를 설정하는 것과 실제로 실제 백 로그의 크기가 얼마나 큰지 알지 못하는 것으로 보였습니다.

당신이 정말로 결정된다면, 당신은 당신의 자신의 Layered Service Provider로 무언가를 할 수있을 것입니다.

업데이트 : 조금 더 파고 든 후에 NDIS OID를 쿼리해야한다고 생각합니다. 귀하와 가장 관련이있는 정보를 찾는 것은 귀하와 MSDN 및 TechNet 간의 연습으로 남습니다.


3

이 질문은 오래되었지만 정보를 추가하고 싶었습니다. Google의 검색 결과는 상당히 높습니다.

내가 알 수있는 한,이 작업을 수행 할 수있는 방법은 없지만 누군가가 더 많은 발굴을하고 유효한 대안을 찾아 낼 수 있다면 대단히 감사하겠습니다!

@Fencepost가 그의 답변에서 지적했듯이 NDIS OID를 쿼리 할 수 ​​있습니다. 내가 찾은 가장 관련성이 높은 NDIS OID는 OID_GEN_TRANSMIT_QUEUE_LENGTH입니다.

대부분의 NDIS OID는 WMI 클래스에 매핑됩니다.

Get-WmiObject -Namespace root\wmi -List  | Where-Object {$_.name -Match "MSNdis" } | Sort-Object

그러나 전송 큐 길이에 대한 것으로 보이지 않습니다.

@Chris J는 Network Interface \ Output Queue Length를 언급했습니다. typeperf 명령 행에서이 값을 얻을 수 있습니다 .

typeperf "\Network Interface(*)\Output Queue Length" -sc 1

그러나 값은 항상 0입니다. http://support.microsoft.com/kb/822226

Windows는 NIC 드라이버 소프트웨어에서만이 정보를 추적하며 NIC 당 대기열에있는 패킷 일 뿐이며 소켓 당 대기열에있는 내용을 구분하지 않습니다.

명령 행에서 네트워크 디버깅을 수행하려면 typeperf 또는 logman을 사용하여 perfmon 에서 찾은 모든 카운터를 조회 할 수 있습니다 .


1

원하는 것은 WinSock API 함수 호출의 결과 일 수 있습니다 getsockopt.

  • SO_RCVBUF 수신을 위해 예약 된 총 소켓 별 버퍼 공간. 이것은 SO_MAX_MSG_SIZETCP 수신 창의 크기와 관련 이 없으며 반드시 그런 것은 아닙니다.

  • SO_SNDBUF 송 신용으로 예약 된 총 소켓 당 버퍼 공간. 이것은 SO_MAX_MSG_SIZETCP 전송 창의 크기와 관련 이 없으며 반드시 그런 것은 아닙니다.

문제는 핸들을 알고있는 소켓을 요청할 수 있다는 것입니다. 외부에서 쿼리하는 것은 어려운 것 같습니다 . sysinternals TcpView 도구를 살펴보십시오 . Mark Russinovich는 실제로 균열이며 심지어 도구에 정보를 제공하지 않습니다. 나는 그가 값을 쉽게 얻을 수있는 수단이 있다면 열을 추가했을 것이라고 확신합니다 ...

일부 커널 드라이버가 시스템으로 드릴 다운하는 데 도움이 될 수 있지만 사용 가능한 도구를 찾지 못했습니다. 전역 값이 의미가 없도록 소켓 단위로 크기를 설정할 수 있습니다 ...


1

내가 찾을 수있는 가장 가까운 것은 성능 카운터 Network Interface\Output Queue Length입니다. 이것은 연결 당이 아니며 인터페이스 당이며 아웃 바운드 대기열 (명명히 이름) 만 포함합니다.


1

이제 소켓마다 창 크기가 다릅니다! 인터페이스 당 설정은 기본값 만 나타냅니다.

각 소켓의 창 크기를 볼 수있는 방법이 없습니다. Solaris에서는 "netstat"로 볼 수 있습니다.


0

1
구체적으로, 내가 무엇을보고 있어야합니까?

Windows는 다양한 알고리즘을 사용하여 TCP 수신 창 크기를 설정합니다. 레지스트리 키를 설정하여 기본값을 무시할 수 있습니다. 이 프로그램은 또한 당신을 도울 수 있습니다 : dslreports.com/drtcp .
Massimo

Massimo- 창 크기와 대기중인 데이터를 혼동하고 있습니다. 창 크기에는 관심이 없습니다.

알았어 미안해. 어쨌든 Windows에서는이 정보를 사용할 수 없습니다.
Massimo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.