Ch?m hi?u su?t x?y ra khi b?n sao chép d? li?u đ?n m?t máy ch? Giao th?c Ki?m soát Truy?n b?ng cách s? d?ng m?t chương tr?nh Windows ? c?m API

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 823764 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

Tri?u ch?ng

Khi b?n ch?y m?t chương tr?nh mà s? d?ng socket Windows API, b?n có th? tr?i nghi?m hi?u su?t ch?m khi b?n sao chép d? li?u đ?n m?t máy ch? Giao th?c Ki?m soát Truy?n.

N?u b?n th?c hi?n m?t d?u ki?m v?t m?ng v?i m?t sniffer m?ng ch?ng h?n như Microsoft m?ng lư?i giám sát, máy ch? Giao th?c Ki?m soát Truy?n g?i m?t Giao th?c Ki?m soát Truy?n ACK phân đo?n cu?i Giao th?c Ki?m soát Truy?n phân đo?n trong m?t d?ng d? li?u Giao th?c Ki?m soát Truy?n trong b? đ?m th?i gian tr? ho?n xác nh?n (c?n đư?c g?i là b? tr? ho?n ACK gi?). theo m?c đ?nh, cho hệ điều hành Windows, giá tr? cho b? đ?m th?i gian này là 200 mili giây (ms). M?t lu?ng d? li?u đi?n h?nh cho vi?c g?i 64 kilobyte (KB) d? li?u trông tương t? như theo tr?nh t? sau:
Client->Server 1460 bytes
Client->Server 1460 bytes
Server->Client ACK
Client->Server 1460 bytes
Client->Server 1460 bytes
Server->Client ACK
....
Client->Server 1460 bytes
Client->Server 1460 bytes
Server->Client ACK-PUSH
Client->Server 1296 bytes
-> delayed ACK 200 ms


Nguyên nhân

V?n đ? này x?y ra b?i v? hành vi ki?n trúc c?a Windows ? c?m API và Afd.sys. V?n đ? này x?y ra n?u t?t c? các đi?u ki?n sau là đúng:
  • Chương tr?nh Windows ? c?m s? d?ng ph?ng không ch?n ? c?m.
  • Đ?a đơn g?i g?i ho?c WSASend g?i đi?n vào b? đ?m hoàn toàn cơ b?n g?i ? c?m.

    Ví d?, chương tr?nh s? d?ng các ? c?m Windows setsockopt ch?c năng đ? thay đ?i c?ng m?c đ?nh g?i b? đ?m t?i 32 KB trong ? c?m c?a nó kh?i t?o thói quen:
    setsockopt( sock, SOL_SOCKET, 32768, (char *) &val, sizeof( int ) );
    V?n đ? sau đó, khi chương tr?nh s? g?i d? li?u, nó v? m?t g?i g?i ho?c m?t WSASend cu?c g?i và g?i 64 KB d? li?u trong m?i g?i:
    send(socket, pWrBuffer, 65536, 0);
    Trong trư?ng h?p này, m?i th?i gian chương tr?nh các v?n đ? m?t g?i cu?c g?i c?a 64 KB d? li?u, tr? l?i chương tr?nh m?t SOCKET_ERROR m? l?i n?u các b? đ?m ? c?m 32-KB cơ b?n là hoàn toàn đ?y. Sau đó g?i các WSAGetLastError ch?c năng, các chương tr?nh nh?n đư?c các WSAEWOULDBLOCK m? l?i. H?u h?t các chương tr?nh s? d?ng các ? c?m Windows ch?n ch?c năng đ? ki?m tra trạm đậu c?a các ? c?m. Trong trư?ng h?p này, các ch?n ch?c năng không báo cáo các ? c?m như có th? ghi đư?c cho đ?n khi khách hàng nh?n đư?c đo?n Giao th?c Ki?m soát Truy?n ACK xu?t s?c. theo m?c đ?nh trong m?t môi trư?ng Windows, đi?u này có th? m?t mi?n là 200 ms v? thu?t toán xác nh?n b? tr? ho?n.
  • máy ch? t? xa Giao th?c Ki?m soát Truy?n th?a nh?n t?t c? các phân đo?n Giao th?c Ki?m soát Truy?n trư?c khi khách hàng g?i đo?n Giao th?c Ki?m soát Truy?n cu?i cùng v?i đ?y bit.

Cách gi?i quy?t khác

Đ? làm vi?c xung quanh v?n đ? này, s? d?ng b?t k? phương pháp sau đây.

Phương pháp 1: S? d?ng ngăn ch?n ? c?m

V?n đ? này ch? x?y ra v?i ph?ng không ch?n ? c?m. Khi b?n s? d?ng m?t ? c?m ch?n, v?n đ? này không x?y ra b?i v? Afd.sys x? l? các b? đ?m ? c?m khác nhau. Đ? bi?t thêm chi ti?t v? ch?n và không ngăn ch?n ? c?m l?p tr?nh, xem tài li?u Microsoft n?n t?ng SDK.

Phương pháp 2: Làm cho kích thư?c b? đ?m g?i ? c?m l?n hơn kích thư?c b? đ?m g?i chương tr?nh

Đ? ch?nh s?a b? đ?m g?i ? c?m, s? d?ng các ch?c năng getsockopt Windows ? c?m đ? xác đ?nh ? c?m g?i b? đ?m thư?c hi?n th?i (SO_SNDBUF), và sau đó s? d?ng setsockopt ch?c năng đ? thi?t l?p các ? c?m g?i kích c? b? đ?m. Khi b?n hoàn t?t, giá tr? SO_SNDBUF ph?i là t?i thi?u 1 byte l?n hơn kích thư?c b? đ?m g?i c?a chương tr?nh.

S?a đ?i cu?c g?i g?i ho?c g?i WSASend đ? xác đ?nh m?t b? đ?m kích c? t?i thi?u 1 byte nh? hơn so v?i giá tr? SO_SNDBUF. Trong ví d? trư?c đó trong ph?n "Nguyên nhân" c?a bài vi?t này, b?n có th? s?a đ?i các cu?c g?i setsockopt cho các giá tr? sau đây,
setsockopt( sock, SOL_SOCKET, 65537, (char *) &val, sizeof( int ) );
ho?c b?n có th? s?a đ?i các cu?c g?i g?i đ?n giá tr? sau đây:
send(socket, pWrBuffer, 32767, 0);
B?n c?ng có th? s? d?ng b?t k? k?t h?p nào c?a các giá tr?.

Phương pháp 3: Thay đ?i các thi?t l?p TCP/IP trên các máy ch? Giao th?c Ki?m soát Truy?n

Quan tr?ng Ph?n, phương pháp ho?c tác v? này ch?a các bư?c cho b?n bi?t làm th? nào đ? s?a đ?i s? ki?m nh?p. Tuy nhiên, v?n đ? nghiêm tr?ng có th? x?y ra n?u b?n s?a đ?i registry không chính xác. V? v?y, h?y ch?c ch?n r?ng b?n làm theo các bư?c sau m?t cách c?n th?n. Đ? b?o v? b? sung, sao lưu s? ki?m nh?p trư?c khi b?n s?a đ?i nó. Sau đó, b?n có th? khôi ph?c s? ki?m nh?p n?u m?t v?n đ? x?y ra. Đ? bi?t thêm chi ti?t v? làm th? nào đ? sao lưu và khôi phục s? ki?m nh?p, nh?p vào s? bài vi?t sau đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
322756 Làm th? nào đ? sao lưu và khôi phục s? ki?m nh?p trong Windows


Thay đ?i các thi?t đ?t TCP/IP trên máy ch? Giao th?c Ki?m soát Truy?n ngay l?p t?c th?a nh?n đ?n Giao th?c Ki?m soát Truy?n phân đo?n. S?a l?i t?m này ho?t đ?ng t?t nh?t trong m?t môi trư?ng có m?t cài đ?t chuyên bi?t l?n khách hàng cơ s? và nơi b?n không th? thay đ?i hành vi c?a chương tr?nh. Cho các k?ch b?n nơi máy ch? Giao th?c Ki?m soát Truy?n t? xa ch?y trên m?t máy ch? D?a-trên-Windows, b?n ph?i s?a đ?i s? ki?m nh?p c?a máy ch? t? xa. hệ điều hành khác, xem tài li?u hư?ng d?n c?a hệ điều hành cho các thông tin v? làm th? nào đ? thay đ?i b? đ?m th?i gian tr? ho?n xác nh?n.

Trên m?t máy ch? ch?y Windows 2000, h?y làm theo các bư?c sau:
  1. B?t đ?u Registry Editor (Regedit.exe).
  2. Xác đ?nh v? trí và sau đó nh?p vào registry subkey sau đây:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<Interface GUID>
  3. Trên các Ch?nh s?a tr?nh đơn, nh?p vào Thêm giá tr?, và sau đó t?o ra giá tr? ki?m nh?p sau:

    Giá tr? tên: TcpDelAckTicks
    ki?u d? li?u: REG_DWORD
    D? li?u giá tr?: 0
  4. Thoát kh?i Registry Editor.
  5. Kh?i đ?ng l?i Windows đ? thay đ?i này có hi?u l?c.
Trên m?t máy ch? ch?y Windows XP ho?c Windows Server 2003, h?y làm theo các bư?c sau:
  1. B?t đ?u Registry Editor.
  2. Xác đ?nh v? trí và sau đó nh?p vào registry subkey sau đây:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<Interface GUID>
  3. Trên các Ch?nh s?a tr?nh đơn, đi?m đ?n M?i, và sau đó nh?p vào Giá tr? DWORD.
  4. Tên giá tr? m?i TcpAckFrequency, và gán cho nó m?t giá tr? là 1.
  5. Thoát kh?i Registry Editor.
  6. Kh?i đ?ng l?i Windows đ? thay đ?i này có hi?u l?c.

Phương pháp 4: Thay đ?i hành vi đ?m trong Afd.sys cho ph?ng không ch?n ? c?m

Quan tr?ng Ph?n, phương pháp ho?c tác v? này ch?a các bư?c cho b?n bi?t làm th? nào đ? s?a đ?i s? ki?m nh?p. Tuy nhiên, v?n đ? nghiêm tr?ng có th? x?y ra n?u b?n s?a đ?i registry không chính xác. V? v?y, h?y ch?c ch?n r?ng b?n làm theo các bư?c sau m?t cách c?n th?n. Đ? b?o v? b? sung, sao lưu s? ki?m nh?p trư?c khi b?n s?a đ?i nó. Sau đó, b?n có th? khôi ph?c s? ki?m nh?p n?u m?t v?n đ? x?y ra. Đ? bi?t thêm chi ti?t v? làm th? nào đ? sao lưu và khôi phục s? ki?m nh?p, nh?p vào s? bài vi?t sau đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
322756 Làm th? nào đ? sao lưu và khôi phục s? ki?m nh?p trong Windows


Lưu ? Khóa ki?m nh?p này ch? có s?n cho Windows Server 2003 v?i Service Pack 1 và gói b?n ghi d?ch v? ti?p theo.
  1. B?m chu?t B?t đ?u, lo?i regedit.exe, và sau đó nh?p vào Ok.
  2. Xác đ?nh v? trí và sau đó nh?p vào registry subkey sau đây:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters
  3. Trên các Ch?nh s?a tr?nh đơn, đi?m đ?n M?i, và sau đó nh?p vào Giá tr? DWORD.
  4. Tên giá tr? m?i NonBlockingSendSpecialBuffering, và gán cho nó m?t giá tr? là 1.
  5. Thoát kh?i Registry Editor.
  6. Kh?i đ?ng l?i Windows đ? thay đ?i này có hi?u l?c.

T?nh tr?ng

Microsoft đ? xác nh?n r?ng đây là m?t v?n đ? trong s?n ph?m c?a Microsoft đư?c li?t kê trong ph?n "Áp d?ng cho".

Tham kh?o

328890 M?c nh?p registry m?i cho vi?c ki?m soát hành vi Giao th?c Ki?m soát Truy?n th?a nh?n (ACK) trong Windows XP và Windows Server 2003

Thu?c tính

ID c?a bài: 823764 - L?n xem xét sau cùng: 05 Tháng Ba 2013 - Xem xét l?i: 3.0
Áp d?ng
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
  • Windows Server 2008 Datacenter without Hyper-V
  • Windows Server 2008 Enterprise without Hyper-V
  • Windows Server 2008 for Itanium-Based Systems
  • Windows Server 2008 Standard without Hyper-V
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
  • Windows Web Server 2008
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2012 Datacenter
  • Windows Server 2012 Standard
  • Windows 8 Enterprise
  • Windows 8 Pro
  • Windows 7 Professional
  • Windows 7 Enterprise
  • Windows 7 Home Basic
  • Windows 7 Home Premium
T? khóa: 
kbprb kbmt KB823764 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này: 823764

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com