2012-01-05 25 views
7

Tôi có một kịch bản trong đó máy khách mở kết nối TCP tới máy chủ sau khi thiết lập một số giá trị TOS IP (setsockopt(.., IP_TOS, ..). Trên máy chủ tôi muốn lấy giá trị TOS đã nhận và đặt trên ổ cắm để TOS đã nhận được phản ánh lại trên các gói máy chủ-khách hàngtruy xuất giá trị TOS trên ổ cắm TCP

Vấn đề ở phía máy chủ, làm cách nào để lấy giá trị TOS nhận được từ máy khách? Tôi có thể giả định rằng máy khách sẽ không thay đổi TOS giá trị trong toàn bộ phiên, do đó, nó là đủ để có được và thiết lập giá trị TOS một lần đầu tiên.

Thiết lập IP_RECVTOS và sử dụng dữ liệu phụ trợ hoạt động cho UDP nhưng không cho cổng TCP. một cái gì đó tương tự được đạt được trên các ổ cắm TCP? getsockopt(2) với SO_PRIORITY hoặc IP_TOS trả về giá trị được định cấu hình trên ổ cắm cục bộ. Vì vậy, nếu tôi đã thực hiện một địa chỉ setsockopt() thì getsockopt() phản ánh giá trị đó. Nó không phản ánh những gì được nhận trên mạng.

+0

chỉ tự hỏi, nhưng tại sao bạn lại cho phép tùy chọn cấu hình ở xa thay đổi _your_ ưu tiên lưu lượng truy cập đi? – Alnitak

+0

ToS đã bị thay thế bởi DSCP trong một thời gian rất dài. –

Trả lời

2

Giá trị TOS có thể thay đổi đối với mọi gói dữ liệu TCP nhận được.

Vì vậy, nó không phải là một tùy chọn liên tục để nhận được ổ cắm TCP.

Từ sau có thể kết luận rằng người nhận không thể kéo giá trị cho TOS từ cổng TCP nhận về tùy chọn giá trị có thể được đọc bằng cách sử dụng getsockopt().

Vì không có tính năng như "tin nhắn phụ trợ" cho TCP theo cách duy nhất tôi thấy để tìm ra người gửi được đặt làm TOS là trực tiếp kiểm tra các tiêu đề TCP datagram đã nhận.

+0

Có đồng ý về mâu thuẫn của TCP và gói tin theo số lượng gói như TOS. Đó là lý do tại sao tôi đã đề cập rằng chúng tôi có thể giả định rằng khách hàng sẽ không thay đổi các con số trong suốt cuộc đời của phiên cho những gì nó có thể có giá trị. Đối với bình luận của bạn trực tiếp kiểm tra các tiêu đề nhận được, bạn có nghĩa là sử dụng một cái gì đó như iptables để đọc và thiết lập các giá trị DSCP hoặc bạn đã có cái gì khác trong tâm trí? – SanjayT

+1

Tôi đã không có bất cứ điều gì đặc biệt trong tâm trí. Tôi chỉ muốn chỉ ra rằng các giá trị TOS không nhất thiết phải là một thuộc tính của một socket nhận. Hơn nữa tôi muốn nói điều này thậm chí có thể không phải là trường hợp nếu bạn không thay đổi giá trị TOS của socket gửi, như trong quá trình truyền TCP datagram, các header của chúng có thể được sửa đổi trong vấn đề này bởi các bước nhảy trung gian. – alk

+1

@ SanjayT: Bạn có thể xem libpcap để cho phép ứng dụng giám sát các kết nối TCP đến của chính nó ở mức thấp hơn. – alk

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