Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

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

Hỗ trợ cho Windows XP đã kết thúc

Microsoft đã kết thúc hỗ trợ dành cho Windows XP vào ngày 8 tháng 4 năm 2014. Thay đổi này đã ảnh hưởng đến các bản cập nhật phần mềm và tùy chọn bảo mật của bạn. Tìm hiểu ý nghĩa của điều này với bạn và cách thực hiện để luôn được bảo vệ.

Hỗ trợ cho Windows Server 2003 đã kết thúc vào ngày 14 tháng 7 năm 2015

Microsoft đã kết thúc hỗ trợ cho Windows Server 2003 vào ngày 14 tháng 7 năm 2015. Thay đổi này đã ảnh hưởng đến các bản cập nhật phần mềm và tùy chọn bảo mật của bạn. Tìm hiểu ý nghĩa của điều này với bạn và cách thực hiện để luôn được bảo vệ.

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
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 bytesClient->Server 1460 bytesServer->Client ACKClient->Server 1460 bytesClient->Server 1460 bytesServer->Client ACK....Client->Server 1460 bytesClient->Server 1460 bytesServer->Client ACK-PUSHClient->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

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 823764 - Xem lại Lần cuối: 03/05/2013 19:06:00 - Bản sửa đổi: 3.0

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

  • kbprb kbmt KB823764 KbMtvi
Phản hồi
mp;t=">