2010-05-06 30 views
15

Một trong những khách hàng của chúng tôi đang gặp sự cố khi gửi dữ liệu từ ứng dụng của chúng tôi (trên PC của họ) đến máy chủ (vị trí địa lý khác). Khi gửi các gói dưới 1100 byte mọi thứ hoạt động tốt, nhưng trên đây chúng ta thấy TCP truyền lại gói tin cứ sau vài giây và không nhận được phản hồi. Các gói chúng tôi đang sử dụng để thử nghiệm là khoảng 1400 byte (nhưng ít hơn 1472). Tôi có thể gửi ping ICMP tới www.google.com là 1472 byte và nhận được phản hồi (vì vậy nó không phải là bộ định tuyến của họ/vài bước nhảy đầu tiên).Lợi ích của "Không phân đoạn" trên gói TCP?

Tôi thấy rằng ứng dụng của chúng tôi đặt cờ DF cho các gói này và tôi tin rằng một bộ định tuyến trên đường đến máy chủ có MTU nhỏ hơn/bằng 1100 và thả gói.

Điều này ảnh hưởng đến 1 khách hàng ở mức 5000, nhưng vì các tuyến đường của mọi người sẽ khác nhau, điều này được mong đợi.

Dữ liệu là phong bì SOAP và chúng tôi mong đợi phản hồi SOAP. Tôi không thể biện minh tại sao chúng ta làm điều đó, mã để làm điều này được viết bởi một nhà phát triển trước đó.

Vì vậy, ... Có bất kỳ lợi ích HOẶC biện minh nào để thiết lập cờ DF trên gói TCP cho dữ liệu ứng dụng không?

Tôi có thể nghĩ ra lý do cần thiết cho các ứng dụng chẩn đoán mạng nhưng không phải trong tình huống của chúng tôi (chúng tôi muốn dữ liệu đến điểm cuối, bị phân mảnh hay không). Một trong những quản trị hệ thống của chúng tôi nói rằng nó có thể liên quan đến chúng tôi bằng SSL, nhưng theo như tôi biết SSL giống như một luồng và bất kể phân mảnh, miễn là luồng được xây dựng lại ở cuối, thì không có vấn đề gì.

Nếu không có lý do chính đáng nào, tôi sẽ thay đổi hành vi của đơn đăng ký của chúng tôi.

Xin cảm ơn trước.

+0

Cuộc gọi API socket thực tế mà bạn đang thực hiện khiến cho DF bit được đặt là gì? –

+1

Có một số cuộc thảo luận thú vị về nơi DF có thể hữu ích ở đây: http://stackoverflow.com/questions/351806/where-is-the-dont-fragment-bit-of-the-ip-flags-used - in ngắn nó có vẻ giống như một tình huống mà nếu bạn không biết rằng bạn cần nó, sau đó bạn không. –

Trả lời

35

Cờ DF thường được đặt trên các gói IP mang các phân đoạn TCP. Điều này là do kết nối TCP có thể tự động thay đổi kích thước phân đoạn của nó để phù hợp với đường dẫn MTU và hiệu suất tổng thể tốt hơn đạt được khi các phân đoạn TCP được thực hiện trong một gói IP.

Vì vậy, các gói TCP có bộ cờ DF, nên gây ra gói ICMP phân mảnh cần thiết để trả về nếu một bộ định tuyến trung gian phải loại bỏ gói vì nó quá lớn. TCP gửi sau đó sẽ giảm ước tính của đường dẫn MTU của kết nối (Maximum Transmission Unit) và gửi lại trong các phân đoạn nhỏ hơn. Nếu DF không được thiết lập, TCP gửi sẽ không bao giờ biết rằng nó đang gửi phân đoạn quá lớn. Quá trình này được gọi là PMTU-D ("Path MTU Discovery").

Nếu gói ICMP cần thiết không được thông qua, thì bạn đang xử lý một mạng bị hỏng. Lý tưởng nhất là bước đầu tiên là xác định thiết bị được định cấu hình sai và sửa nó; tuy nhiên, nếu điều đó không hoạt động thì bạn sẽ thêm núm cấu hình vào ứng dụng của mình để cho phép thiết lập tùy chọn ổ cắm TCP_MAXSEG với setsockopt(). (Ví dụ điển hình của thiết bị được định cấu hình sai là bộ định tuyến hoặc tường lửa được quản trị viên mạng thiếu kinh nghiệm định cấu hình để thả tất cả ICMP, không nhận ra rằng các gói Phân đoạn cần thiết được yêu cầu bởi TCP PMTU-D).

+0

Bạn đóng đinh cái này! – jathanism

-2

Rõ ràng, một số giao thức như lợi ích của NFS tránh phân mảnh (link text). Tuy nhiên, bạn đang ở ngay trong đó bạn thường không nên yêu cầu DF trừ khi bạn thực sự yêu cầu nó.

2

Hoạt động khám phá Path-MTU được mô tả trong RFC 1191, https://tools.ietf.org/html/rfc1191. Tốt hơn cho TCP để khám phá Path-MTU hơn là có mọi gói trên một kích thước nhất định phân mảnh thành hai phần (thường là một phần lớn và một phần nhỏ).

Các vấn đề liên quan