लिनक्स में टीसीपी एमएसएस कम से कम 88 (शामिल / नेट / tcp.h होना चाहिए):
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
मेरा सवाल है: वे "60 + 60 + 8" के साथ कहां आए और क्यों? मुझे लगता है कि 20 + 20 आईपी हेडर + टीसीपी हेडर से आता है।
संपादित करें: हेडर पर करीब से देखने के बाद, सूत्र मेरे लिए इस तरह दिखता है:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
सवाल अभी भी खड़ा है: क्यों ? लिनक्स कर्नेल इस सूत्र का उपयोग क्यों करता है, जिससे टीसीपी सेगमेंट के एक मजबूर प्रवाह को रोकना पड़ता है, कहते हैं, 20 बाइट्स? यहाँ iperf सोचो।
EDIT2: यहां मेरा उपयोग मामला है। सॉकेट / कनेक्शन पर कम एमएसएस मजबूर करके, स्टैक द्वारा भेजे गए सभी पैकेटों का आकार छोटा होगा। मैं पैकेट / सेकंड टेस्टिंग के लिए iperf के साथ काम करते समय कम MSS सेट करना चाहता हूं। मैं MSS के लिए इस निचली सीमा की वजह से वायर पर 128 बाइट्स (142 बाइट्स के ईथरनेट फ्रेम) से छोटे पैकेट नहीं पा सकता हूँ! मैं RFC 2544 के अनुसार 64 बाइट्स के एक ईथरनेट फ्रेम आकार के करीब जाना चाहता हूं। सैद्धांतिक रूप से यह संभव होना चाहिए: 18 + 20 + 20 <64।
TCP_MIN_MSS
।
TCP_MIN_MSS
। यह 1 क्यों नहीं हो सकता है? क्या RFC टूट जाएगा? क्या सिद्धांत / व्यावहारिक समस्या का कारण होगा? क्या आप सुनिश्चित हैं कि यह "युक्ति के बाहर" है? "अलग मिनिमा"? यहां केवल एक न्यूनतम ब्याज है: कर्नेल द्वारा अनुमत सबसे छोटा एमएसएस।