Nh?ng v?n đ? thi?t k? - g?i d? li?u nh? các phân đo?n qua TCP v?i Winsock

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 214397
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Khi b?n c?n ph?i g?i các gói d? li?u nh? qua TCP, thi?t k? ?ng d?ng c?a b?n Winsock là đ?c bi?t quan tr?ng. M?t thi?t k? mà không đưa vào tài kho?n tương tác c?a s? th?a nh?n b? tr? ho?n, các thu?t toán Nagle, và Winsock đ?m m?nh có th? có hi?u l?c hi?u su?t. Bài vi?t này th?o lu?n v? nh?ng v?n đ? này, b?ng cách s? d?ng m?t vài trư?ng h?p nghiên c?u, và m?t lo?t các khuy?n ngh? cho vi?c g?i các gói d? li?u nh? m?t cách hi?u qu? t? m?t ?ng d?ng Winsock này có ngu?n g?c.

THÔNG TIN THÊM

N?n

Khi m?t ch?ng Microsoft TCP nh?n đư?c m?t gói d? li?u, m?t b? đ?m th?i gian ch?m tr? 200-ms t?t đi. Khi m?t ACK cu?i cùng g?i, b? đ?m th?i gian ch?m tr? đ?t l?i và s? b?t đ?u m?t 200-ms s? ch?m tr? khi gói d? li?u ti?p theo nh?n đư?c. Đ? tăng hi?u qu? trong Internet và các ?ng d?ng m?ng n?i b?, ch?ng Microsoft TCP s? d?ng các tiêu chí sau đây đ? quy?t đ?nh khi nào đ? g?i m?t ACK trên các gói d? li?u nh?n đư?c:
  • N?u gói d? li?u th? hai nh?n đư?c trư?c khi b? đ?m th?i gian ch?m tr? h?t h?n, ACK đư?c g?i.
  • N?u không có d? li?u đư?c g?i đi trong cùng m?t hư?ng như ACK trư?c khi gói d? li?u th? hai nh?n đư?c và b? đ?m th?i gian ch?m tr? h?t h?n, ACK piggybacked v?i các phân đo?n d? li?u và g?i ngay l?p t?c.
  • Khi b? đ?m th?i gian ch?m tr? h?t h?n, ACK đư?c g?i.
Đ? tránh vi?c các gói d? li?u nh? congest m?ng, Microsoft TCP ngăn x?p cho phép thu?t toán Nagle theo m?c đ?nh, coalesces m?t b? đ?m nh? d? li?u t? nhi?u g?i các cu?c g?i và s? ch?m tr? g?i nó cho đ?n khi m?t ACK cho gói d? li?u trư?c đó g?i nh?n t? máy ch? t? xa. Sau đây là hai trư?ng h?p ngo?i l? cho các thu?t toán Nagle:
  • N?u ngăn x?p đ? coalesced m?t b? đ?m d? li?u l?n hơn so v?i đơn v? truy?n t?i t?i đa (MTU), m?t gói tin có kích thư?c đ?y đ? đư?c g?i ngay l?p t?c mà không c?n ch? ACK t? máy ch? t? xa. Trên m?t m?ng Ethernet, MTU cho TCP/IP là 1460 byte.
  • Tùy ch?n ? c?m TCP_NODELAY đư?c áp d?ng đ? vô hi?u hóa các thu?t toán Nagle v? v?y mà các gói nh? d? li?u đư?c g?i đ?n máy ch? t? xa mà không có s? ch?m tr?.
Đ? t?i ưu hóa hi?u su?t t?i l?p ?ng d?ng, Winsock b?n b? đ?m d? li?u t? ?ng d?ng g?i cho các cu?c g?i đ?n m?t Winsock h?t nhân đ?m. Sau đó, ngăn x?p s? d?ng ch?n đoán riêng c?a m?nh (ví d? như thu?t toán Nagle) đ? xác đ?nh khi nào th?c s? đ?t gói trên dây. B?n có th? thay đ?i s? lư?ng Winsock h?t nhân đ?m đư?c giao cho các ? c?m b?ng cách s? d?ng tùy ch?n SO_SNDBUF (nó là 8 K theo m?c đ?nh). N?u c?n thi?t, Winsock có th? đ?m đáng k? hơn SO_SNDBUF đ?m kích thư?c. Trong h?u h?t trư?ng h?p, hoàn thành g?i trong ?ng d?ng ch? cho th?y b? đ?m d? li?u trong m?t ?ng d?ng g?i g?i sao chép vào b? đ?m Winsock h?t nhân và không ch? ra r?ng các d? li?u đ? trúng phương ti?n truy?n thông m?ng. Ngo?i l? duy nh?t là khi b?n vô hi?u hóa Winsock đ?m b?ng cách thi?t l?p SO_SNDBUF 0.

Winsock s? d?ng các quy t?c sau đ? ch? ra m?t hoàn thành g?i đ?n các ?ng d?ng (tùy thu?c vào cách g?i kích ho?t, thông báo hoàn thành có th? là ch?c năng tr? v? t? m?t cu?c g?i ch?n, báo hi?u m?t s? ki?n ho?c g?i đi?n tho?i m?t ch?c năng thông báo, và vv):
  • N?u các ? c?m là v?n c?n trong SO_SNDBUF h?n ng?ch, Winsock sao chép d? li?u t? ?ng d?ng g?i và cho bi?t vi?c hoàn thành g?i t?i ?ng d?ng.
  • N?u các ? c?m vư?t quá h?n ng?ch SO_SNDBUF và không ch? có m?t g?i trư?c đó buffered v?n c?n trong b? đ?m h?t nhân stack, Winsock sao chép d? li?u t? ?ng d?ng g?i và cho bi?t vi?c hoàn thành g?i t?i ?ng d?ng.
  • N?u các ? c?m vư?t quá h?n ng?ch SO_SNDBUF và có nhi?u hơn m?t trong nh?ng trư?c đây buffered g?i trong vùng đ?m h?t nhân stack, Winsock sao chép d? li?u t? ?ng d?ng g?i. Winsock không ch? ra hoàn thành g?i đ?n các ?ng d?ng cho đ?n khi ngăn x?p hoàn thành đ? g?i đ? đ?t các ? c?m tr? l?i trong SO_SNDBUF h?n ng?ch ho?c ch? có m?t đi?u ki?n xu?t s?c g?i.

Trư?ng h?p nghiên c?u 1

T?ng quan:

M?t khách hàng Winsock TCP c?n ph?i g?i h? sơ 10000 Winsock TCP trên máy ch? đ? lưu tr? trong cơ s? d? li?u. Kích thư?c c?a các h? sơ khác nhau t? 20 byte 100 byte dài. Đ? đơn gi?n hóa logic ?ng d?ng, thi?t k? là như sau:
  • Khách hàng hi?n ch?n g?i ch?. H? ph?c v? hi?n ch?n recv ch?.
  • ? c?m khách hàng đ?t SO_SNDBUF 0 đ? cho m?i h? sơ đi ra ngoài trong m?t phân đo?n d? li?u duy nh?t.
  • Nh?n các cu?c g?i h? ph?c v? trong m?t v?ng l?p. B? đ?m đăng trong recv là 200 byte do đó m?i b?n ghi có th? nh?n đư?c trong m?t nh?n cu?c g?i.

Hi?u su?t:

Trong th?i gian th? nghi?m, các nhà phát tri?n th?y khách hàng ch? có th? g?i h? sơ năm / giây đ?n máy ch?. Các h? sơ 10000 t?ng, t?i đa lúc 976 K byte d? li?u (10000 * 100 / 1024), ph?i m?t hơn m?t n?a gi? đ? g?i t?i h? ph?c v?.

Phân tích:

B?i v? khách hàng không đ?t tùy ch?n TCP_NODELAY, thu?t toán Nagle l?c lư?ng ch?ng TCP ch? đ?i cho m?t ACK trư?c khi nó có th? g?i m?t gói vào dây. Tuy nhiên, các khách hàng đ? vô hi?u hoá Winsock đ?m b?ng cách thi?t l?p các tùy ch?n SO_SNDBUF-0. V? v?y, các 10000 g?i các cu?c g?i có th? đư?c g?i và ACK'ed riêng r?. M?i ACK là b? tr? ho?n 200-ms v? sau đây x?y ra trên ch?ng TCP c?a máy ch?:
  • Khi máy ch? đư?c m?t gói d? li?u, b? đ?m th?i gian ch?m tr? 200-ms t?t đi.
  • Các máy ch? không c?n ph?i g?i b?t c? đi?u g? tr? l?i, do đó, ACK không th? đư?c piggybacked.
  • Khách hàng s? không g?i m?t gói tr? khi gói d? li?u trư?c đó đư?c th?a nh?n.
  • B? đ?m th?i gian ch?m tr? trên máy ch? h?t h?n và ACK đư?c g?i tr? l?i.

Làm th? nào đ? c?i thi?n:

Có hai v?n đ? v?i thi?t k? này. Đ?u tiên, không có v?n đ? b? đ?m th?i gian ch?m tr?. Khách hàng c?n đ? có th? g?i các gói d? li?u hai đ?n máy ch? trong 200-ms. v? khách hàng s? d?ng các thu?t toán Nagle theo m?c đ?nh, nó nên ch? c?n s? d?ng m?c đ?nh Winsock đ?m và không thi?t l?p SO_SNDBUF 0. Sau khi ch?ng TCP có coalesced m?t b? đ?m l?n hơn so v?i đơn v? truy?n t?i t?i đa (MTU), m?t gói tin có kích thư?c đ?y đ? g?i ngay l?p t?c mà không c?n ch? ACK t? máy ch? t? xa.

Th? hai, thi?t k? này kêu m?t g?i m?i h? sơ như v?y kích thư?c nh?. G?i đi?u này nh? kích thư?c không ph?i là r?t hi?u qu?. Trong trư?ng h?p này, các nhà phát tri?n có th? mu?n pad m?i h? sơ đ?n 100 byte và g?i h? sơ 80 t?i m?t th?i gian t? m?t khách hàng g?i g?i. Đ? cho máy ch? bi?t làm th? nào nhi?u h? sơ s? đư?c g?i trong t?ng s?, khách hàng có th? mu?n b?t đ?u giao ti?p v?i m?t tiêu đ? có kích thư?c s?a ch?a có ch?a s? lư?ng h? sơ đ? làm theo.

Nghiên c?u trư?ng h?p 2

T?ng quan:

M?t ?ng d?ng khách Winsock TCP m? hai k?t n?i v?i m?t ?ng d?ng máy ch? Winsock TCP cung c?p d?ch v? báo giá c? phi?u. K?t n?i đ?u tiên đư?c s? d?ng như m?t kênh l?nh g?i bi?u tư?ng c? cho h? ph?c v?. K?t n?i th? hai đư?c s? d?ng như m?t kênh d? li?u nh?n đư?c báo giá c? phi?u. Sau khi hai k?t n?i đ? đư?c thi?t l?p, khách hàng s? g?i m?t bi?u tư?ng c? cho h? ph?c v? thông qua các kênh l?nh và ch? đ?i cho báo giá c? phi?u đ? tr? l?i thông qua các kênh d? li?u. Nó s? g?i yêu c?u bi?u tư?ng c? ph?n ti?p theo t?i h? ph?c v? ch? sau khi các c? phi?u báo đ?u tiên đ? đư?c nh?n. Máy khách và máy ch? không đ?t tùy ch?n SO_SNDBUF và TCP_NODELAY.

Hi?u su?t:

Trong th?i gian th? nghi?m, các nhà phát tri?n th?y khách hàng ch? có th? nh?n đư?c báo giá năm / giây.

Phân tích:

Thi?t k? này ch? cho phép m?t trong nh?ng xu?t s?c c? phi?u báo yêu c?u m?t lúc. K? hi?u ch?ng khoán đ?u tiên đư?c g?i đ?n máy ch? thông qua các l?nh kênh (k?t n?i) và m?t ph?n ?ng ngay l?p t?c đư?c g?i v? t? h? ph?c v? cho khách hàng trên kênh d? li?u (k?t n?i). Sau đó, khách hàng ngay l?p t?c s? g?i yêu c?u bi?u tư?ng c? phi?u th? hai và g?i tr? l?i ngay l?p t?c như đ?m yêu c?u g?i g?i sao chép vào b? đ?m Winsock h?t nhân. Tuy nhiên, ch?ng TCP khách hàng không th? g?i yêu c?u t? b? đ?m h?t nhân c?a nó ngay l?p t?c v? là ngư?i đ?u tiên g?i qua kênh l?nh không đư?c th?a nh?n đư?c nêu ra. Sau khi 200-ms tr? ho?n h?n gi? t?i máy ch? l?nh kênh h?t h?n, ACK cho yêu c?u k? hi?u đ?u tiên tr? l?i cho khách hàng. Sau đó, theo yêu c?u báo giá th? hai thành công đư?c g?i đ?n máy ch? sau khi b? tr? ho?n cho 200-bà trích d?n cho bi?u tư?ng c? phi?u th? hai tr? l?i ngay l?p t?c thông qua các kênh d? li?u v?, vào th?i gian này, b? đ?m th?i gian ch?m tr? lúc kênh d? li?u khách hàng đ? h?t h?n. M?t ACK cho ph?n ?ng báo trư?c đó đư?c nh?n b?i các máy ch?. (H?y nh? r?ng khách hàng có th? không g?i m?t yêu c?u báo giá c? phi?u th? hai cho 200-ms, do đó đưa ra th?i gian cho h?n gi? ch?m tr? trên máy khách đ? h?t h?n và g?i m?t ACK đ?n máy ch?.) Do đó, khách hàng đư?c ph?n ?ng báo th? hai và có th? v?n đ? m?t yêu c?u báo giá, đó là tùy thu?c vào cùng m?t chu k?.

Làm th? nào đ? c?i thi?n:

Thi?t k? hai k?t n?i (kênh) là không c?n thi?t ? đây. N?u b?n s? d?ng ch? có m?t k?t n?i cho các yêu c?u báo giá c? phi?u và ph?n ?ng, ACK báo yêu c?u có th? đư?c piggybacked trên báo ph?n ?ng và tr? l?i ngay l?p t?c. Đ? ti?p t?c c?i thi?n hi?u su?t, khách hàng có th? "kích" yêu c?u báo giá c? phi?u nhi?u vào m?t trong nh?ng cu?c g?i g?i đ?n máy ch? và máy ch? có th? c?ng "kích" nhi?u báo ph?n ?ng vào m?t cu?c g?i g?i cho khách hàng. N?u thi?t k? hai unidirectional kênh là th?c s? c?n thi?t cho m?t s? l? do, c? hai bên nên đ?t tùy ch?n TCP_NODELAY đ? các gói d? li?u nh? có th? đư?c g?i ngay l?p t?c mà không c?n ph?i ch? đ?i cho m?t ACK cho gói d? li?u trư?c đó.

Khuy?n ngh?:

Trong khi các nghiên c?u trư?ng h?p hai đư?c ch? t?o, h? giúp đ? minh h?a m?t s? k?ch b?n trư?ng h?p x?u nh?t. Khi b?n thi?t k? ?ng d?ng có liên quan đ?n r?ng r?i cho d? li?u nh? phân khúc s? g?i và recvs, b?n nên xem xét các nguyên t?c sau đây:
  • N?u d? li?u phân đo?n là không th?i gian quan tr?ng, các ?ng d?ng nên Liên Hi?p chúng thành m?t kh?i d? li?u l?n hơn đ? vư?t qua m?t cu?c g?i g?i. B?i v? các b? đ?m g?i có kh? năng đư?c sao chép vào Winsock h?t nhân đ?m, b? đ?m không nên quá l?n. M?t chút ít hơn 8 K là thư?ng có hi?u qu?. Mi?n là h?t nhân Winsock đư?c m?t kh?i l?n hơn MTU, nó s? g?i ra nhi?u các gói tin có kích thư?c đ?y đ? và m?t gói cu?i cùng v?i b?t c? đi?u g? c?n l?i. ? phía bên g?i, ngo?i tr? gói d? li?u qua, s? không đư?c trúng b? đ?m th?i gian ch?m tr? 200-ms. Gói cu?i, n?u nó x?y ra cho là m?t gói d? li?u đánh s? l?, là v?n c?n tùy thu?c vào thu?t toán th?a nh?n b? tr? ho?n. N?u ngăn x?p cu?i g?i đư?c m?t kh?i l?n hơn MTU, nó v?n c?n có th? b? qua các thu?t toán Nagle.
  • N?u có th?, tránh các k?t n?i ? c?m v?i d? li?u unidirectional ch?y. Liên l?c trên ? c?m unidirectional là nhi?u hơn n?a d? dàng b? ?nh hư?ng b?i Nagle và b? tr? ho?n s? th?a nh?n các thu?t toán. N?u các giao ti?p sau m?t yêu c?u và m?t d?ng ch?y ph?n ?ng, b?n nên s? d?ng m?t ? c?m duy nh?t đ? làm c? g?i và recvs, do đó ACK piggybacked vào các ph?n ?ng.
  • N?u t?t c? các phân đo?n d? li?u nh? đ? đư?c g?i đi ngay l?p t?c, đ?t tùy ch?n TCP_NODELAY vào cu?i g?i.
  • Tr? khi b?n mu?n đ?m b?o m?t gói d? li?u đư?c g?i trên dây khi g?i m?t hoàn thành đư?c ch? đ?nh b?i Winsock, b?n không nên đ?t SO_SNDBUF b?ng không. Trong th?c t?, các b? đ?m 8 K m?c đ?nh đ? đư?c xác đ?nh nh? làm vi?c t?t cho h?u h?t các t?nh hu?ng và b?n nên không thay đ?i nó tr? khi b?n đ? th? nghi?m c?a b?n thi?t l?p b? đ?m Winsock m?i mang đ?n cho b?n hi?u su?t t?t hơn so v?i m?c đ?nh. Ngoài ra, thi?t l?p SO_SNDBUF 0 là ch? y?u mang l?i l?i ích cho các ?ng d?ng mà s? lư?ng l?n d? li?u chuy?n giao. Th?m chí sau đó, cho hi?u qu? t?i đa b?n nên s? d?ng nó k?t h?p v?i đôi đ?m (nhi?u hơn m?t xu?t s?c g?i t?i b?t k? th?i gian nh?t đ?nh) và ch?ng chéo I/O.
  • N?u vi?c cung c?p d? li?u không ph?i đư?c đ?m b?o, s? d?ng UDP.

THAM KH?O

Đ? bi?t thêm chi ti?t v? s? th?a nh?n tr? ho?n và thu?t toán Nagle, xin vui l?ng xem dư?i đây:

Braden, R. [1989], RFC 1122, yêu c?u cho Internet Hosts--giao ti?p l?p, Internet Engineering Task Force.

Thu?c tính

ID c?a bài: 214397 - L?n xem xét sau cùng: 21 Tháng Tám 2011 - Xem xét l?i: 2.0
T? khóa: 
kbdswnet2003swept kbapi kbinfo kbip kbnetwork kbwinsock kbmt KB214397 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:214397

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