2009-02-26 31 views
18

Tôi chỉ xem xét wikipedia's entry on out-of-band data và theo tôi hiểu, dữ liệu OOB được gắn cờ quan trọng hơn và được coi là dữ liệu thông thường, nhưng được truyền theo luồng riêng biệt. .lập trình socket: Làm cách nào để xử lý dữ liệu băng tần

Câu hỏi thực tế sẽ là (ngoài "Có thể ai đó giải thích những gì dữ liệu OOB là?"):

Tôi đang viết một ứng dụng unix có sử dụng ổ cắm và cần phải tận dụng select() và đã tự hỏi phải làm gì với tham số exceptfds? Tôi có cần phải đặt tất cả các ổ cắm của tôi vào tham số này và phản ứng với các sự kiện như vậy không? Hay tôi chỉ bỏ qua chúng?

Trả lời

19

Tôi biết bạn đã quyết định bạn không cần phải xử lý dữ liệu OOB, nhưng đây là một số điều cần lưu ý nếu bạn đã bao giờ làm chăm sóc về OOB ...

  • IPv4 doesn' t thực sự gửi dữ liệu OOB trên một kênh riêng biệt hoặc ưu tiên khác. Nó chỉ là một lá cờ trên gói.
  • Dữ liệu OOB cực kỳ hạn chế - 1 byte!
  • Dữ liệu OOB có thể được nhận trực tiếp hoặc riêng biệt tùy thuộc vào tùy chọn ổ cắm
  • Dữ liệu OOB "ngoại lệ" báo hiệu có thể xảy ra ngay cả khi lần đọc tiếp theo không chứa dữ liệu OOB (ngăn xếp mạng trên người gửi có thể gắn cờ bất kỳ đã được xếp hàng đợi dữ liệu, vì vậy phía bên kia sẽ biết có OOB CÀNG SỚM CÀNG TỐT). Điều này thường được xử lý bằng cách nhập vòng lặp "thoát" nơi bạn hủy bỏ dữ liệu cho đến khi dữ liệu OOB thực sự có sẵn.

Nếu điều này có vẻ hơi khó hiểu và vô giá trị, đó là bởi vì phần lớn là. Có lý do chính đáng để sử dụng OOB, nhưng rất hiếm. Một ví dụ là FTP, nơi người dùng có thể đang ở giữa quá trình chuyển giao lớn nhưng quyết định hủy bỏ. Việc hủy bỏ được gửi dưới dạng dữ liệu OOB. Vào thời điểm đó, máy chủ và máy khách chỉ cần ăn thêm bất kỳ dữ liệu "bình thường" nào để thoát bất kỳ thứ gì vẫn đang được chuyển tiếp. Nếu hủy bỏ được xử lý nội tuyến với dữ liệu thì tất cả lưu lượng truy cập nổi bật sẽ phải được xử lý, chỉ để được bán phá giá.

Bạn nên biết rằng OOB tồn tại và những điều cơ bản về cách hoạt động, chỉ trong trường hợp bạn cần đến nó. Nhưng đừng bận tâm khi học từ trong ra ngoài trừ khi bạn tò mò. Rất có thể bạn không bao giờ sử dụng nó.

+0

Vì vậy, nếu tôi nhận được quyền này, việc sử dụng hoàn hảo cho dữ liệu OOB nằm trong bất kỳ luồng nhị phân nào - chẳng hạn như ví dụ truyền tệp được cung cấp hoặc luồng âm thanh/video, v.v. – soulmerge

+0

Nhị phân hoặc văn bản, không quan trọng. Nhưng các tệp nhị phân có xu hướng lớn hơn, dẫn đến hàng đợi và gói đầy đủ hơn khi chuyển tiếp. Sử dụng OOB khi bạn muốn báo hiệu một số sự kiện đặc biệt và bạn không muốn xử lý bất kỳ dữ liệu nào đã được xếp hàng đợi hoặc đang bay. – dwc

+0

Tôi thấy bài viết này khá thú vị: http://www.serverframework.com/asynchronousevents/2011/10/out-of-band-data-and-overlapped-io.html – jwp

2

Tôi nghĩ rằng tôi đã tìm thấy câu trả lời trên this page. Tóm lại:

Tôi không cần xử lý dữ liệu OOB ở phía bên nhận nếu tôi không gửi bất kỳ dữ liệu OOB nào. Tôi đã nghĩ rằng dữ liệu OOB có thể được tạo ra bởi hệ điều hành của người gửi.

+0

Có, nếu nó không được gửi, bạn không cần phải xử lý nó. – dwc

0

Bạn không cần xử lý nó ở đầu nhận ngay cả khi bạn đang gửi gửi - Dữ liệu OOB bị bỏ qua một cách minh bạch trong mọi trường hợp trừ khi bạn chủ động tiếp nhận nó.

1

"Ai đó có thể giải thích dữ liệu OOB là gì?"

Trong thuật ngữ giao tiếp (ngoài băng) OOB đơn giản có nghĩa là gói độc hại có chứa một con trỏ khẩn cấp (URG flage trong gói TCP).

Dấu khẩn cấp là trường hiếm khi được sử dụng trong tiêu đề TCP, được sử dụng để chỉ ra rằng một số dữ liệu trong luồng TCP sẽ được xử lý nhanh chóng bởi người nhận.

Từ WIKI 1 Bằng dữ liệu OOB, Người dùng có thể làm gián đoạn hoặc hủy bỏ luồng đã xếp hàng thay vì đợi luồng kết thúc. Điều này được thực hiện bằng cách chỉ định dữ liệu khẩn cấp. Điều này cho phép chương trình tiếp nhận xử lý nó ngay lập tức, cùng với phần còn lại của dữ liệu khẩn cấp. Khi hoàn tất, TCP sẽ thông báo cho ứng dụng và tiếp tục trở lại hàng đợi luồng. Ví dụ là khi TCP được sử dụng cho phiên đăng nhập từ xa, người dùng có thể gửi một chuỗi bàn phím ngắt hoặc hủy chương trình ở đầu bên kia. Các tín hiệu này thường cần nhất khi chương trình trên máy từ xa không hoạt động chính xác. Các tín hiệu phải được gửi mà không cần chờ chương trình kết thúc quá trình truyền hiện tại. Dữ liệu OOB TCP không được thiết kế cho Internet hiện đại. Con trỏ khẩn cấp chỉ làm thay đổi quá trình xử lý trên máy chủ từ xa và không đẩy nhanh quá trình xử lý trên chính mạng đó. Khi nó đến máy chủ từ xa, có hai cách diễn giải hơi khác nhau của giao thức, có nghĩa là chỉ một byte dữ liệu OOB là đáng tin cậy. Đây là giả định nó là đáng tin cậy ở tất cả vì nó là một trong những yếu tố giao thức thường được sử dụng ít nhất và có xu hướng được thực hiện kém.

+2

Nó không cần phải độc hại; đó là [loại ngớ ngẩn để chỉ định một tính năng chỉ để sử dụng độc hại] (https://tools.ietf.org/html/rfc3514), hoặc ít nhất [nó hoạt động tốt hơn nếu bạn không nói cho ai biết] (http: // projectbullrun.org/dual-ec/index.html). – SamB

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