2010-02-15 18 views
5

tôi hỏi câu hỏi trước này đây:khi được cờ đẩy thiết lập trong phân khúc tcp

tcp two sides trying to connect simultaneously

tôi đã cố gắng phương pháp được đưa ra trong dung dịch và trong lúc gửi trong khi sử dụng netcat và sniffing gói với tao i quan sát thấy rằng khi tôi gửi một chuỗi "hello" từ phía này sang bên kia, nó được gửi trong một phân đoạn với bộ cờ đẩy.

ai quyết định đặt cờ đẩy? các quy tắc để đặt cờ đẩy hoặc cờ khẩn cấp trong phân khúc tcp là gì? là nó có thể làm điều đó bằng cách sử dụng các ổ cắm api?

Trả lời

6

Cờ PUSH được sử dụng bởi ngăn xếp tcp về cơ bản có nghĩa là "Tôi đã hoàn tất ngay bây giờ". Nó chỉ cho thấy phân đoạn dữ liệu được truyền hoàn toàn bởi nguồn.

Không có cách nào để chỉ định hoặc kiểm soát nó trong vùng người dùng (api socket của bạn), vì đây chỉ là tcp stack/implementation để thực hiện điều đó. Là cờ URGENT.

(Nguồn: Richard Stevens - Tcp/ip illustrated vol 1, chương 20)

+7

Nhận xét ở trên không đúng về việc không có cách kiểm soát cờ đẩy được gửi từ không gian người dùng. Xem các tùy chọn socket TCP_NODELAY và TCP_CORK (man 7 tcp) và cờ MSG_MORE (man 2 send). – MaZe

5

Bạn có thể thiết lập các cờ URGENT sử dụng send() với bộ MSG_OOB cờ. Như điều này ngụ ý, dữ liệu được gửi sẽ là Out-Of-Band, có nghĩa là nó sẽ không bình thường được nhận bởi phía gọi chỉ đơn giản là gọi read(). Phía nhận sẽ nhận được một số dấu hiệu của dữ liệu OOB như tín hiệu SIGURG, hoặc ổ cắm sẽ trở thành ngoại lệ và có thể được kiểm tra như vậy bằng cách sử dụng select().

Hầu hết thời gian bạn không muốn đặt cờ URGENT.

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