TCP ทำงานอย่างไร? สร้างการเชื่อมต่อ rozriv TCP นั้น อุซากัลเลนเนีย

โกลอฟน่า / 2 นักอ่านสุดเจ๋ง

รู้จักตัวย่อ TCP ดีกว่า คนน้อยกว่ารู้ว่าโปรโตคอลการส่งข้อมูลคืออะไร อันที่จริงไม่มีใครรู้วิธีชนะการตั้งถิ่นฐาน

เคารพ! นี่คือเนื้อหาความคุ้มครองสำหรับผู้ที่ทะเลาะวิวาทกันด้วยเรื่องอาหาร: "ตาข่ายมีความปลอดภัยอย่างไร และฉันสามารถปล้นได้นั้น ฉันรู้" หากคุณยังต้องใช้คำสำหรับ DNS, Telnet, Socket - คุณสามารถให้คะแนนเนื้อหานี้ได้ - คำที่ "แย่มาก" เช่นที่นี่จะไม่โหยหวน แต่คุณจะไม่สามารถนึกถึงมันได้

สำหรับผู้ที่เงียบและเมา:

ไม่ต้องสงสัยเลยว่า หลายๆ คนคงรู้สึกเหมือนกันกับคำว่า SYN-blooding หรือ IP-spoofing การโจมตีทุกรูปแบบ - persha D.O.S. เพื่อน
polagaєในการแทนที่ที่อยู่ IP เมื่อมองแวบแรก ไม่มีอะไรผิดปกติระหว่างบั้นท้ายเหล่านี้ แต่ในขณะเดียวกันก็ไม่เป็นเช่นนั้น การโจมตีเชิงรุกไม่สามารถทำได้หากปราศจากความรู้อย่างลึกซึ้งเกี่ยวกับโปรโตคอล TCP ซึ่งเป็นโปรโตคอลที่ใช้
ไอเน็ต.

ข้อกำหนดสำหรับโปรโตคอล TCP ได้อธิบายไว้ใน RFC793 ฉันขอแนะนำให้คุณทำความคุ้นเคยกับเอกสารนี้ เพื่อที่ว่าหากฉันต้องการ ฉันจะพยายามบอกคุณถึงสิ่งที่สำคัญที่สุดโดยให้ความคิดเห็นที่สำคัญและเกี่ยวข้องแก่คุณ ซึ่งคุณไม่ทราบในคู่มือนี้ แต่ถึงกระนั้น ด้วยปริมาณเล็กน้อยและ การตัดรุ่งอรุณในทางปฏิบัติฉันสามารถพลาดรายละเอียดปลีกย่อยได้

ข้อมูลถูกถ่ายโอนในรูปแบบของแพ็กเก็ต องค์กรของการถ่ายโอนหมายความว่าข้อมูลไม่ว่าจะเหม็นแค่ไหนจะถูกแบ่งออกเป็นส่วนเล็ก ๆ ซึ่งประกอบกันเป็นแพ็กเก็ต (การก่อตัวของแพ็กเก็ตในการถ่ายโอนซึ่งส่วนหัวของบริการถูกเพิ่มลงในข้อมูล) หลังจากนั้นข้อมูล แพ็กเก็ตจะถูกส่งผ่านหน่วยวัด (นอกจากนี้ คุณสามารถแบ่งลำดับของการถ่ายโอนแพ็กเก็ตได้) ระบบที่รับ "เลือก" แพ็กเก็ตจากอาร์เรย์ข้อมูลที่กำหนดบนชุดย่อยของส่วนหัวของแพ็กเก็ต Tse ไม่เข้าใจมากนัก แต่โง่เขลา ท่าเทียบเรือไม่ดูโครงสร้างของบรรจุภัณฑ์

โครงสร้างแพ็กเก็ต TCP:

ฉันจะอธิบายเฉพาะสถานที่สำคัญที่สุด:

ที่อยู่ของคอนโทรลเลอร์, พอร์ตของคอนโทรลเลอร์และที่อยู่ของคอนโทรลเลอร์, พอร์ตของคอนโทรลเลอร์ - ฉันคิดว่ามันสมเหตุสมผล

Sequence Number (SYN) - หมายเลขของการ์ดหรือหมายเลขสุดท้าย แสดงหมายเลขลำดับของแพ็กเก็ตสำหรับชั่วโมงของการส่งข้อมูล ในขณะที่ยอมรับระบบจะรับแพ็กเก็ตเองตามที่ต้องการ ไม่ใช่ตามลำดับ เช่น กลิ่นเหม็นมา

Acknowledge Number (ACK) - จำนวนการยืนยัน แสดงว่าระบบได้ปฏิเสธแพ็กเก็ตข้อมูลของเรา
ซิน

บิตควบคุม - 6 บิต (ในรูปแบบระหว่างการย้อนกลับและหน้าต่าง) ความหมายของการต่อสู้:

URG: ฟิลด์ตัวบ่งชี้คำ
ACK: ฟิลด์รับทราบ
PSH: ฟังก์ชั่นการจัดเก็บ
RST: การปรับปรุงการเรียกเก็บเงินนี้อีกครั้ง
SYN: การซิงโครไนซ์ตัวเลขในการ์ด
FIN: ไม่มีข้อมูลที่จะส่งอีกต่อไป

ข้อมูล - tse tі data, yakі mi ต้องการถ่ายโอน

ฉันคิดว่าทั้งหมดที่จำเป็นในการเข้าใจหลักการทำงานและโปรโตคอล คุณสามารถอ่านรายงานเกี่ยวกับความหมายของฟิลด์อื่นๆ ได้ใน RFC793 เราจะเรียงลำดับให้สั้นลงตามที่ปฏิบัติกันในทางปฏิบัติ

หากเราต้องการติดตั้งระบบ เราสามารถแก้ไขแพ็คเกจระบบของโครงสร้างที่ไม่เหมาะสมได้:

ลูกค้า --- SYN (856779) --- โฮสต์

De Client-tse mi, a Host - ทั้งระบบ คุณจะทำอย่างไร เราบังคับให้แพ็กเก็ตไม่มีการกำหนด SYN อีกต่อไป - หมายความว่าแพ็กเก็ตนี้เป็นแพ็กเก็ตแรก แต่ไม่สามารถทำได้ (ACK ทุกวัน) แพ็คเกจ Tseyมีลักษณะดังนี้:

20 53 52 43 00 00 44 45 53 54 00 00 08 00 45 00 00 2C C3 00 40 00 20 06 10 0C CB 5E FD BA CB 5E F3 4 0 0 0 0 D9 70 00 00 02 04 05 B4 2D

Tsіkavyในขณะนั้นzvіdkiถูกจับ SYN SYN ได้รับการตรวจสอบเป็น cob number ของ cherga
(ISN) - หมายเลข 32 บิตเดียวกันตั้งแต่ 1 ถึง 4294967295 (2 ในขั้นตอนที่ 32) ISN ในกรณีของการปรับระบบใหม่จะเพิ่มขึ้น 1 จากนั้นผิวหนังที่สองของหลอดเลือดดำจะเพิ่มขึ้น 128,000 (เห็นได้ชัดเจนอย่างเคร่งครัดการเปลี่ยนแปลงคือ 4 ไมโครวินาที) nіyaki z 'วันไม่ได้รับการฟื้นฟู อายุประมาณ 4.55 ปี เนื่องจากราคาของแพ็คเกจจะไม่เพิ่มขึ้นเป็นเวลานาน เราจึงมั่นใจได้ว่า SYN จะไม่เหมือนใครอย่างแน่นอน

หลังจาก otrimavshi แพ็คเกจของเรา ระบบvіddalenavіdpovidaє, scho otrimala ก็พร้อมที่จะติดตั้งคำสั่งซื้อ แพ็คเกจนี้มีลักษณะดังนี้:

โฮสต์ --- SYN (758684758) และ ACK (856780) --- ไคลเอนต์

แยก bachish ในระยะทางที่ระบบเข้าใจว่าได้รับแพ็คเกจของเราแล้ว สำหรับสิ่งที่เอาชนะเรา ACK ด้วยหมายเลข "ของเรา SYN + 1" ระบบส่ง SYN มาให้เราสำหรับภาคผนวกของระยะนี้ และคำแนะนำของเราจะเป็นดังนี้:

ลูกค้า --- SYN (856780) และ ACK (758684759) --- โฮสต์

ฉันคิดว่าคุณสามารถเข้าใจทุกอย่างได้แล้ว หากคุณไม่เข้าใจ แสดงว่าแพ็คเกจกำลังมา: แพ็คเกจของคุณที่มี SYN (758684758) ถูกลบออก วันที่ได้รับการติดตั้ง SYN ของเราได้รับการกู้คืน 856780

ขั้นตอน Qiu เรียกว่า "การยืนยันสามครั้ง" หรือ "การจับมือสามครั้ง" สองขั้นตอนแรกจำเป็นสำหรับการซิงโครไนซ์ SYN ของระบบของเรา และขั้นตอนที่สามคือการยืนยันว่าการซิงโครไนซ์สำเร็จแล้ว

ขอแลกเงินแค่นั้นแหละ ที่กำลังตั้งค่าและกู้คืนอยู่ นอกจากนี้ ควรสังเกตว่าในทุกขั้นตอนของการรักษาความปลอดภัยข้อมูลที่ถ่ายโอนด้วยความช่วยเหลือของโปรโตคอล TCP มีดังนี้: แพ็กเก็ตข้อความถูกวางไว้ในบัฟเฟอร์และ ชั่วโมงนัดหมายหากระบบไม่ได้รับแพ็กเก็ตจากการตอบรับ (ACK) แพ็กเก็ตจะถูกส่งอีกครั้ง หากการยืนยันมาถึง แสดงว่าแพ็คเก็ตสำเร็จและถูกลบออกจากบัฟเฟอร์

เราไม่ต้องการมากกว่านี้ เราสามารถปิดมันได้ เวที Tsey จะเป็นอีกครั้ง
พับหลายขั้นตอน - ฉันสามารถอ่านแพ็คเกจเหล่านี้ได้ด้วยตัวเอง

ลูกค้า --- FIN (4894376) และ ACK (1896955378) --- โฮสต์

โฮสต์ --- ACK (4894377) --- ลูกค้า

โฮสต์ --- FIN (1896955378) และ ACK (4894377) --- ไคลเอนต์

ลูกค้า --- ACK (1896955378) --- โฮสต์

ฉันคิดว่าไม่มีอะไรซับซ้อนที่นี่ สิ่งเดียวที่ varto หมายถึงคือธง FIN ซึ่งหมายถึงภารกิจที่ต้องทำงานให้สำเร็จ

สำหรับสินค้ายัดไส้ในกระเป๋าใบเล็ก หมายเลขคำสั่งซื้อจะเปลี่ยนแปลง/ไม่เปลี่ยนแปลงอย่างมีนัยสำคัญในบางกรณี:

การส่ง FIN หนึ่งรายการไปยังแพ็กเก็ต = +1
ส่ง SYN Packet หนึ่งชุด = +1
ส่ง ACK Packet หนึ่งชุด = 0
ส่งแพ็กเก็ต SYN/ACK หนึ่งชุด = +1
ส่งหนึ่งแพ็คเก็ต FIN/ACK = +1
เปลี่ยนใน 1 วินาที = +128,000
ติดตั้งครึ่งหนึ่ง = +64,000

เป็นไปได้ถ้าคุณถามว่า: "แล้วจะเกิดอะไรขึ้นถ้าเครื่องรับแพ็กเก็ตจาก ACK ดังกล่าว ซึ่งไม่ใช่" (SYN=ACK-1 และเราไม่ได้ส่งแพ็คเก็ตจาก SYN ดังกล่าว) Otrimavshi vіdpovіdnezazumіlіบน scho เราจะคุยกับคุณเกี่ยวกับเวลาที่จะมาถึง

รายการ

TCP เป็นโปรโตคอลเดียวกัน กำหนดเป้าหมายปลายทาง ก่อนหน้านั้น ราวกับว่าอีกฝ่ายสามารถส่งส่วยให้ผู้อื่นได้ ระหว่างนั้นสามารถจัดตั้งได้หนึ่งวัน ที่เราแบ่งออก มีรายงานว่ามีการติดตั้ง TCP อย่างไร และเปิดอย่างไร

ชิ้นส่วนสำหรับงาน TCP จำเป็นต้องติดตั้งระหว่างสองจุด และสามารถใช้สำหรับโปรโตคอลโดยไม่ต้องเชื่อมต่อ เช่น UDP เราทดลองว่าเมื่อใช้ UDP ด้านสกินจะเพิ่มดาตาแกรมอื่นๆ โดยไม่ต้องยืนอยู่หน้า z'ednannya

ติดตั้งและเปิดประตู

เพื่อดูว่าจะเกิดอะไรขึ้นเมื่อติดตั้ง TCP เราจะเรียกใช้คำสั่งบนระบบ svr4:

svr4% telnet bsdi ยกเลิก
ลอง 192.82.148.3 ...
เชื่อมต่อกับ bsdi
อักขระ Escape คือ "^]"
^] เข้าสู่การควบคุม, โค้งสี่เหลี่ยมด้านขวา,
เทลเน็ต> ล้มเลิกไคลเอนต์ schob Telnet
ปิดการเชื่อมต่อ

คำสั่ง telnet ตั้งค่าการเชื่อมต่อ TCP บนพอร์ต bsdi ของโฮสต์ ซึ่งเหมาะสมสำหรับการยกเลิกบริการ (บทที่ 1 ส่วนที่ 1) นี่คือประเภทของบริการที่เราต้องการ เพื่อประหลาดใจกับสิ่งที่เกิดขึ้นเมื่อติดตั้งบริการนั้นแต่ไม่ต้องแลกเงิน

Visnovok tcpdump

ในการอ่าน 18.1 tcpdump visnovok เล็กน้อยสำหรับเซ็กเมนต์ที่สร้างโดยคำสั่งนี้

1 0.0 svr4.1037 > bsdi.discard: S 1415531521:1415531521 (0)
ชนะ 4096
2 0.002402 (0.0024) bsdi.discard > svr4.1037: S 1823083521:1823083521 (0)
ack 1415531522 ชนะ 4096

3 0.007224 (0.0048) svr4.1037 > bsdi.discard: . ack 1823083522 ชนะ 4096
4 4.155441 (4.1482) svr4.1037 > bsdi.discard: F 1415531522:1415531522 (0)
ack 1823083522 ชนะ 4096
5 4.156747 (0.0013) bsdi.discard > svr4.1037: . ack 1415531523 ชนะ 4096
6 4.158144 (0.0014) bsdi.discard > svr4.1037: F 1823083522:1823083522 (0)
ack 1415531523 ชนะ 4096
7 4.180662 (0.0225) svr4.1037 > bsdi.discard: . ack 1823083523 ชนะ 4096

รูปที่ 18.1 การดู tcpdump เพื่อติดตั้งและเปิดการเชื่อมต่อ TCP

Tsі s_m TCP เซ็กเมนต์ m_stat เฉพาะส่วนหัว TCP การแลกเปลี่ยนดานิมไม่ได้ผล

สำหรับเซกเมนต์สกิน TCP แถวเอาต์พุตจะเริ่มต้นจาก

ต้นทาง> ปลายทาง: ธง (dzherelo> การจดจำ: prapori)

de flag (flags) เป็นแฟล็กบางส่วนจากหกแฟล็กของส่วนหัว TCP () มีการแสดงสัญลักษณ์ที่แตกต่างกันห้าสัญลักษณ์บน 18.2 ขนาดเล็ก ซึ่งสามารถทำหน้าที่เป็นธงสัญญาณและอาจปรากฏอยู่ในสายตา

ชวเลข 3 ตัว

คำอธิบาย

การซิงโครไนซ์หมายเลขลำดับ
ผู้ดูแลระบบได้ทำการถ่ายโอนข้อมูลเรียบร้อยแล้ว
การลดราคา
การแก้ไขข้อมูลของกระบวนการที่ยอมรับ
โจเดน

รูปที่ 18.2 อักขระธงที่บันทึกโดยคำสั่ง tcpdump สำหรับการรบธงในส่วนหัวของ TCP

ใน ก้นนี้ mi bachimo prapori S, F จุดนั้น ธงอีกสองธง (R และ P) จะประกาศในภายหลัง อีกสองบิตในส่วนหัว TCP - ACK และ URG - ถูกแทนที่ด้วยคำสั่ง tcpdump

ในส่วนหนึ่ง อาจมีการต่อสู้ธงมากกว่าหนึ่งรายการ โดยระบุว่าธงเล็ก 18.2 จะส่งเสียงเพียงธงเดียว

RFC 1025 [Postel 1987] ตั้งชื่อเซ็กเมนต์ที่มีการรวมสูงสุดของการสู้รบตามหมายจับที่มีอยู่ทั้งหมดที่ยิงในหนึ่งชั่วโมง (SYN, URG, PSH, FIN และ 1 ไบต์ของข้อมูล) โดยแพ็กเก็ต Kamikaze (ใน ภาษาอังกฤษіsnuє sche k_lka vyznachen ของแพ็คเกจที่คล้ายกันและตัวมันเอง - "แพ็คเกจ Brudny", "แพ็คเกจของ New yalinka" แล้ว)

ในแถวที่ 1 ฟิลด์ 1415531521:1415531521 (0) หมายความว่าหมายเลขลำดับของแพ็คเก็ตคือ 1415531521 และจำนวนไบต์ของข้อมูลในกลุ่มคือ 0 เมื่อใดก็ตามที่เป็นไปได้ ให้ตรวจสอบหมายเลขลำดับที่เหลือ หากจำนวนไบต์มากกว่า 0 ฟิลด์มี (1) เพื่อให้สามารถแทนที่เซ็กเมนต์ด้วยข้อมูลหนึ่งหรือสองสามไบต์ หรือ (2) หรือโดย ธง SYN, FIN หรือ RST ในแถวที่ 1, 2, 4 และ 6 มีการประกาศฟิลด์ 18.1 ce เล็กน้อยเศษของการต่อสู้ธง - การแลกเปลี่ยนไม่ว่าจะเป็นเครื่องบรรณาการบางอย่างไม่ได้ดำเนินการที่ก้นนี้

แถวที่ 2 ช่อง ack 1415531522 Vono เป็นมิตรกับ vipadku น้อยกว่าในฐานะธงของการศึกษา ACK ฟิลด์ win 4096 ที่แถวสกินแสดงการขยายหน้าต่าง เนื่องจากผู้ดูแลระบบตะลึง สำหรับก้นนี้ซึ่งไม่สามารถแลกเปลี่ยน danim ได้ rozmіrvіknaไม่เปลี่ยนแปลงและได้รับมูลค่า - 4096 สำหรับการล็อค

І ทุ่งที่เหลือเมื่อเห็นเจ้าตัวน้อย 18.1 แสดงขนาดเซ็กเมนต์สูงสุด (MSS - ขนาดเซ็กเมนต์สูงสุด) ตัวเลือกสำหรับตั้งค่าไดเร็กทอรีที่ถูกต้อง ผู้ดูแลระบบไม่ต้องการยอมรับ TCP เซ็กเมนต์ที่ใหญ่กว่าและมีค่าต่ำกว่า Tse zazvychay อายที่จะต่อสู้เพื่อหลีกเลี่ยงการแตกแยก (บทที่ 11 แบ่งออก) เราสามารถดูขนาดสูงสุดของเซ็กเมนต์สำหรับการกระจายของการกระจาย และรูปแบบของตัวเลือก TCP ต่างๆ จะแสดงสำหรับการกระจายของการกระจาย

แผนภาพTimchasovі

บนขนาดเล็ก 18.3 จะแสดงแผนภาพ timchas ซึ่งยืนยันการแลกเปลี่ยนแพ็กเก็ต (เราได้อธิบายลักษณะสำคัญบางประการของไดอะแกรมของนาฬิกาแล้ว หากเปลี่ยนเป็น .) ในตัวเล็กนี้ จะแสดงให้เห็นว่าด้านข้างรัดบรรจุภัณฑ์อย่างไร มีการแสดงคำสั่ง tcpdump ด้วย (มิฉะนั้นจะแสดง SYN แทน S) ที่แผนภาพนาฬิกานี้ ความหมายของrozmіru vekna ถูกมองเห็น ดังนั้นจึงไม่ใช่ประเด็นสำหรับการสนทนาของเรา

โปรโตคอลสำหรับการตั้งค่าการประชุม

และตอนนี้เรามาดูรายละเอียดของโปรโตคอล TCP ดังที่แสดงใน 18.3 เล็กน้อย ในการติดตั้งการเชื่อมต่อ TCP คุณต้อง:

  1. ฝ่ายที่ร้องขอ (ซึ่งโดยปกติจะเรียกว่าไคลเอนต์) แก้ไขส่วน SYN โดยระบุหมายเลขพอร์ตเซิร์ฟเวอร์ที่ไคลเอ็นต์ต้องการเข้าถึง และหมายเลขลำดับเริ่มต้นของไคลเอ็นต์ (ในแอปพลิเคชันนี้ ISN, 1415531521) Tse ส่วนที่ 1
  2. เซิร์ฟเวอร์ตอบสนองด้วยส่วน SYN เพื่อดึงหมายเลขลำดับสุดท้ายของลำดับ (ส่วนที่ 2) เซิร์ฟเวอร์ยังรับทราบ SYN ของลูกค้าด้วย ACK อื่น (ISN ของลูกค้าบวกหนึ่ง) มีหมายเลขลำดับเดียวใน SYN
  3. ลูกค้ามีหน้าที่ตรวจสอบว่า SYN ID ของเซิร์ฟเวอร์ถูกต้องด้วยการเลือก ACK (เซิร์ฟเวอร์ ISN บวกหนึ่ง ส่วนที่ 3)

Tsikh สามส่วนของการติดตั้งที่เพียงพอของโรงงาน มักเรียกว่าการจับมือแบบสามทาง

รูปที่ 18.3 แผนภาพรายชั่วโมงของการติดตั้งและการเปิดทำการของวัน

เป็นสิ่งสำคัญที่ปาร์ตี้จะต้องเอาชนะ SYN แรก เปิดใช้งานวัน (เปล่งเสียงอย่างแข็งขัน) อีกด้านหนึ่งซึ่งนำ SYN แรกออกไปและจัดการ SYN ที่รุก มีส่วนที่ไม่โต้ตอบหลังจากการโจมตี (การโจมตีแบบพาสซีฟ) (ในส่วนของแผนก เราจะรายงานขั้นตอนในการจัดเตรียมการปิดบัญชี โดยฝ่ายที่ละเมิดจะได้รับความเคารพจากฝ่ายที่ดำเนินการในชั่วโมงของการจัดตั้งการปิดบัญชี)

หากฝั่งสกินได้ตั้งกฎ SYN ของตนเองสำหรับการตั้งค่าเซสชัน ก็จะเลือกหมายเลขลำดับขาออก (ISN) สำหรับเซสชันนั้น ISN มีความผิดในการเปลี่ยนเวลาของผิวหนัง ซึ่งผิวหนังอาจได้รับผลกระทบจาก ISN อื่น RFC 793 [Postel 1981c] ระบุว่า ISN เป็นตัวเลข 32 บิต ซึ่งมากกว่า 4 ไมโครวินาทีต่อสกิน Zavdyaki ถึงหมายเลขลำดับ พัสดุที่ล่าช้าตามลำดับการจัดส่งในภายหลัง จะไม่ได้รับการยอมรับเป็นส่วนหนึ่งของคำสั่งซื้อจริง

หมายเลขลำดับถูกเลือกอย่างไร ใน 4.4BSD (และในการใช้งาน Berkeley ส่วนใหญ่) เมื่อเริ่มต้นระบบ หมายเลขลำดับเริ่มต้นจะถูกตั้งค่าเป็น 1 แนวทางปฏิบัติที่คล้ายกันนี้ถูกตัดสินว่าโฮสต์โดยข้อกำหนดของโฮสต์ RFC เพิ่มค่า 64,000 skin pvsec แล้วหมุนค่า 0 ผ่าน skin 9.5 ปี (นี่เป็นเรื่องจริงสำหรับลิชนิกซึ่งเพิ่มขึ้น 1 สกิน 8 ไมโครวินาที และไม่ใช่สกิน 4 ไมโครวินาที) นอกจากนี้ หากวันคืนค่า วันจะถูกเปลี่ยนเป็น 64000

ช่วงเวลา 4.1 วินาทีระหว่างเซ็กเมนต์ 3 และ 4 ถูกกำหนดโดยหนึ่งชั่วโมงระหว่างบันทึกที่สร้างขึ้นและคำสั่ง exit สำหรับ telnet เพื่อเปิดบันทึก

โปรโตคอลสำหรับการเปิดคำสั่งซื้อ

ในการติดตั้งการเชื่อมต่อ คุณต้องมี 3 ส่วน และในการเปิด คุณต้องมี 4 ส่วน Oskіlki TCP s'dnannya ฟูลดูเพล็กซ์ (ข้อมูลสามารถถ่ายโอนไปยังผิวหนังได้โดยตรงจากทิศทางอื่น) สามารถปิดได้โดยตรงจากผิวหนังโดยอิสระจากที่อื่น กฎทั่วไปคือด้านผิวหนังมีหน้าที่ส่ง FIN หากการส่งข้อมูลเสร็จสมบูรณ์ หาก TCP ยอมรับ FIN เป็นความผิดของคุณที่จะบอกคุณว่าฝ่ายระยะไกลเปิดข้อมูลและยอมรับการถ่ายโอนข้อมูลจากบุคคลอื่นโดยตรง FIN ส่งเสียงเตือนเนื่องจากโปรแกรมถูกปิด

อาจกล่าวได้ว่าด้านอื่น ๆ เมื่อปิดก่อน (เสริมความแข็งแกร่งให้กับ FIN แรก) ปิดอย่างแข็งขันและอีกด้านหนึ่ง (เมื่อได้รับ FIN) ปิดอย่างอดทน เสียงด้านหนึ่งปิดอย่างแข็งขันมากกว่า และอีกด้านเป็นแบบเฉยเมย อย่างไรก็ตาม ที่การแบ่งส่วนที่สอง เรามีแนวโน้มว่าฝ่ายที่ละเมิดจะถูกปิดอย่างแข็งขันมากกว่า

ส่วนหมายเลข 4 ขนาดเล็ก 18.3 เพื่อเรียกก่อนปิดและถูกบังคับหากไคลเอนต์ Telnet ยอมรับหุ่นยนต์ Tse vіdbuvaєtsyaถ้าเราเลิก ด้วย TCP นี้ ไคลเอนต์จะส่งเสียงรบกวน FIN บล็อกการไหลของข้อมูลจากไคลเอ็นต์ไปยังเซิร์ฟเวอร์

หากเซิร์ฟเวอร์ยอมรับ FIN เซิร์ฟเวอร์จะส่ง ACK กลับมาจากหมายเลขลำดับที่ได้รับบวกหนึ่ง (ส่วนที่ 5) หมายเลขลำดับหนึ่งจะแสดงบน FIN เช่นเดียวกับบน SYN ในเวลาเดียวกัน เซิร์ฟเวอร์ TCP ยังส่งนามสกุลท้ายไฟล์ (เพื่อปิดใช้งานเซิร์ฟเวอร์) จากนั้นเซิร์ฟเวอร์จะปิดคำขอของตนเองโดยการปิดเสียง TCP เพื่อส่ง FIN (ส่วนที่ 6) ซึ่งไคลเอนต์มีหน้าที่ในการตอบรับ (ACK) โดยเพิ่มจำนวนลำดับที่ได้รับทีละหนึ่ง (ส่วนที่ 7)

ในการอ่านค่า 18.4 เล็กน้อย การแลกเปลี่ยนเซกเมนต์โดยทั่วไปจะดำเนินการในชั่วโมงปิดทำการของวัน หมายเลขลำดับการละเว้น FIN เพียงเล็กน้อยจะถูกส่งผ่านโปรแกรมที่ปิดคำขอของตัวเอง ดังนั้น ACK สำหรับ FIN เหล่านี้จึงถูกสร้างขึ้นโดยอัตโนมัติ ความปลอดภัยของซอฟต์แวร์ทีซีพี.

ไคลเอนต์ติดตั้งการโทร เพื่อให้ SYN แรกหยุดทำงานจากไคลเอ็นต์ไปยังเซิร์ฟเวอร์ เอาใจช่วย ปาร์ตี้ปิดบิล (ส่ง FIN แรก) อย่างไรก็ตาม บ่อยครั้ง ขึ้นอยู่กับตัวลูกค้าเองว่าสามารถปิดคำสั่งซื้อขายได้หรือไม่ แต่กระบวนการของลูกค้าส่วนใหญ่ควบคุมโดยชวเลข ซึ่งสามารถป้อนเช่น "ออก" เพื่อปิดประตู บนตัวเล็ก 18.4 เราจำเครื่องหมายของเด็กน้อยได้ ชี้ทารกไปที่สัตว์ร้าย เรียกด้านซ้ายว่าเซิร์ฟเวอร์ และด้านขวาคือไคลเอนต์ อย่างไรก็ตามจงดลบันดาลทุกสิ่งในความคิดของตนเองดังที่แสดงออกมาในเจ้าตัวน้อย (ก้นแรกถูกแบ่งออกเป็น 14 เช่น แสดงให้เห็นว่าเซิร์ฟเวอร์ปิดนาฬิกาอย่างไร)

รูปที่ 18.4 การแลกเปลี่ยนสูงสุดตามกลุ่มสำหรับชั่วโมงปิดวัน

ผู้ชนะ tcpdump

เป็นการง่ายที่จะเรียงลำดับหมายเลขลำดับในโปรแกรม tcpdump เพื่อเรียงลำดับหมายเลขลำดับสำหรับเซ็กเมนต์ SYN แต่หมายเลขลำดับถัดไปจะแสดงเป็นการเปลี่ยนแปลงของหมายเลขลำดับในลำดับ (เพื่อลบ visnovy โดยชี้ไปที่ทารก 18.1 เรามีความผิดในการระบุตัวเลือก -S) visnovy เริ่มต้นของ tcpdump ซึ่งแสดงทารก 18.1 ซึ่งบ่งชี้ถึงทารก 18.5

1 0.0 svr4.1037 > bsdi.discard: S 1415531521:1415531521(0)
ชนะ 4096
2 0.002402 (0.0024) bsdi.discard > svr4.1037: S 1823083521:1823083521(0)
ack1415531522
ชนะ 4096
3 0.007224 (0.0048) svr4.1037 > bsdi.discard: . แอค 1 ชนะ 4096
4 4.155441 (4.1482) svr4.1037 > bsdi.discard: F 1:1 (0) ack 1 ชนะ 4096
5 4.156747 (0.0013) bsdi.discard > svr4.1037: . แอค 2 ชนะ 4096
6 4.158144 (0.0014) bsdi.discard > svr4.1037: F 1:1 (0) ack 2 ชนะ 4096
7 4.180662 (0.0225) svr4.1037 > bsdi.discard: . แอค 2 ชนะ 4096

รูปที่ 18.5 บรรทัดคำสั่ง tcpdump ทั่วไปที่บอกให้คุณติดตั้งดัมพ์นั้น

แม้ว่าเราจะไม่ต้องแสดงจำนวนและลำดับที่แน่นอน แต่เราจะชนะแบบมองเห็นได้ในบั้นท้ายฝ่ายรุกทั้งหมด

หมดเวลา

เหตุผลsnuєkіlkaผ่านyakіไม่ใช่ mozhe buti ติดตั้ง zadnannya ตัวอย่างเช่น โฮสต์ (เซิร์ฟเวอร์) ถูกปิดใช้งาน เพื่อตอบโต้สถานการณ์นี้ เราได้เรียกใช้คำสั่ง telnet หลังจากที่เราเห็นสายเคเบิลอีเทอร์เน็ตจากเซิร์ฟเวอร์ Tiny 18.6 แสดงเอาต์พุตของคำสั่ง tcpdump

1 0.0 bsdi.1024 >
ชนะ 4096
2 5.814797 (5.8148) bsdi.1024 > svr4.discard: S 291008001:291008001(0)
ชนะ 4096
3 29.815436 (24.0006) bsdi.1024 > svr4.discard: S 291008001:291008001(0)
ชนะ 4096

รูปที่ 18.6 ดูคำสั่ง tcpdump เพื่อดึงการเชื่อมต่อที่เกิดจากการหมดเวลา

จำเป็นต้องเคารพไคลเอ็นต์นี้ เนื่องจากไคลเอ็นต์ TCP มักแก้ไข SYN โดยพยายามกู้คืนการเชื่อมต่อ ส่วนอื่นถูกบังคับ 5.8 วินาทีหลังจากส่วนแรก และส่วนที่สามถูกบังคับ 24 วินาทีหลังจากส่วนอื่น

จำเป็นต้องเคารพว่าก้นนี้เปิดตัวหลังจาก 38 สัปดาห์หลังจากที่ลูกค้าได้รับการเลื่อนตำแหน่งอีกครั้ง ดังนั้น หมายเลขทางออกปัจจุบันของคำสั่งซื้อคือ 291008001 (ประมาณ 38x60x6400x2) ในซัง เรากล่าวว่าระบบประเภท Berkeley ตั้งค่าหมายเลขลำดับปัจจุบันเป็น 1 แล้วเพิ่มขึ้น 64,000 สกินต่อวินาที

นอกจากนี้ จำเป็นต้องระบุว่าก่อนที่ TCP จะเริ่มต้นจากช่วงเวลาที่ระบบถูกกำจัดใหม่ หมายเลขพอร์ตไคลเอนต์คือ 1024

อย่างไรก็ตาม เพียงเล็กน้อย 18.6 ไม่แสดง จำนวนครั้งที่ไคลเอนต์ TCP พยายามส่งสัญญาณซ้ำ ครั้งแรกที่ไคลเอนต์จะพยายามอีกครั้ง เพื่อดูค่าเวลา เรามีหน้าที่พิมพ์คำสั่ง telnet ตามลำดับต่อไปนี้:

bsdi% วันที่; telnet svr4 ละทิ้ง; วันที่
พฤ. 24 ก.ย. 16:24:11 น. MST 2535
ลอง 192.82.148.2...
telnet: การเชื่อมต่อหมดเวลา รีโมตโฮสต์: การเชื่อมต่อหมดเวลา
พฤ. 24 ก.ย. 16:25:27 น. MST 2535

หนึ่งชั่วโมงรวมกันได้ 76 วินาที ระบบ Berkeley ส่วนใหญ่ติดตั้งระหว่าง 75 วินาทีต่อชั่วโมง และสามารถติดตั้งโรงงานใหม่ได้ภายในหนึ่งชั่วโมง ในการเผยแพร่บทที่ 21 เป็นสิ่งสำคัญที่แพคเกจที่สามซึ่งส่งโดยไคลเอ็นต์จะหมดเวลาในเวลาประมาณ 16:25:29 น. หลังจากนั้น 48 วินาทีหลังจากได้รับการแก้ไข หากไคลเอนต์ไม่ได้แนบโพรบของเขา หลังจาก 75 วินาที .

หมดเวลาครั้งแรก

สำหรับ 18.6 เล็กน้อย ให้สังเกตว่าการหมดเวลาครั้งแรก 5.8 วินาที ใกล้เคียงกับ 6 วินาที แต่ไม่เกิน 6 วินาที แต่การหมดเวลาอื่นๆ เกือบ 24 วินาทีพอดีเป๊ะ ทำการทดสอบที่คล้ายกันอีกสิบครั้ง และในผิวหนัง ค่าของการหมดเวลาครั้งแรกอยู่ในช่วง 5.59 วินาทีถึง 5.93 วินาที อย่างไรก็ตาม หมดเวลาอีกครั้งคือ 24.00 วินาที

โปรดทราบว่าการใช้งาน BSD ของ TCP จะเริ่มต้นตัวจับเวลาสกินที่ 500 มิลลิวินาที ตัวจับเวลา 500 มิลลิวินาทีนี้ถูกแทนที่สำหรับการหมดเวลา TCP ต่างๆ ซึ่งทั้งหมดจะอธิบายในส่วนถัดไป เมื่อเราป้อนคำสั่ง telnet ตัวจับเวลา 6 วินาที (12 ขีดต่อปี) จะถูกตั้งค่า แต่อาจสิ้นสุดระหว่าง 5.5 ถึง 6 วินาที ตัวเล็ก 18.7 โชว์ให้ดูหน่อย

Malyunok 18.7 ตัวจับเวลา TCP 500 มิลลิวินาที

ตัวจับเวลาOskіlkiถูกตั้งค่าเป็น 12 ขีด ก่อนที่จะเปลี่ยนตัวจับเวลาสามารถอยู่ระหว่าง 0 ถึง 500 มิลลิวินาทีหลังจากตั้งค่าแล้ว ณ จุดนี้ ตัวจับเวลาเปลี่ยนไปประมาณ 500 มิลลิวินาที อย่างไรก็ตาม ช่วงแรกอาจแตกต่างออกไป (เราชนะคำว่า "โดยประมาณ" นั่นคือชั่วโมง ถ้า TCP ใช้เวลา 500 มิลลิวินาทีในการควบคุมสกิน เป็นที่ชัดเจนว่าสามารถผ่านการเขียนใหม่ได้มากขึ้น เช่น การประมวลผลโดยเคอร์เนล)

หากตัวจับเวลา 6 วินาทีสิ้นสุดที่ขีดที่มีเครื่องหมาย 0 บนตัวเล็ก 18.7 ตัวจับเวลาจะตั้งเป็น 24 วินาที (48 ตัว) ตัวจับเวลาถัดไปนี้สูงสุด 24 วินาที หากเคอร์เนลเรียกตัวจับเวลา TCP 500 มิลลิวินาที ไม่ใช่คอร์

ช่องประเภทบริการ

บนเจ้าตัวเล็ก 18.6 Bachimo Viraz ฟิลด์นี้เป็นประเภทของบริการ (TOS - ประเภทของบริการ) ใน IP datagram () ไคลเอนต์ Telnet ใน BSD/386 ตั้งค่าฟิลด์ในลักษณะที่มีความยุ่งเหยิงน้อยที่สุด

ขนาดเซกเมนต์สูงสุด

ขนาดเซ็กเมนต์สูงสุด (MSS) หากมีการคืนสภาพ ผิวหนังสามารถเปล่งเสียง MSS ได้ ค่าคือ 1024 IP ของดาตาแกรม ดังที่แสดงในผลลัพธ์ มีขนาดใหญ่กว่า 40 ไบต์: 20 ไบต์สำหรับส่วนหัว TCP และ 20 ไบต์สำหรับส่วนหัวของ IP

สิ่งพิมพ์บางฉบับระบุว่าตัวเลือกนี้ได้รับการติดตั้ง "สำหรับการดูแลทำความสะอาด" แท้จริงแล้วความเป็นบ้านเดียวกันไม่ได้ชนะในทางใดทางหนึ่ง หากวันคืนสภาพ ผิวหนังจะนึกถึง MSS ซึ่งถูกนำไปใช้ (ตัวเลือก MSS สามารถใช้ได้เฉพาะในส่วน SYN เท่านั้น) หากด้านใดด้านหนึ่งไม่ยอมรับตัวเลือก MSS จากอีกด้านหนึ่ง ระบบจะแทนที่ 536 ไบต์ (ในอีกกรณีหนึ่ง ด้วยส่วนหัวของ IP ขนาด 20 ไบต์และส่วนหัวของ TCP ขนาด 20 ไบต์ ขนาดของดาตาแกรม IP จะเท่ากับ 576 ไบต์)

โดยทั่วไปแล้ว MSS ยิ่งมากก็ยิ่งสวยจนเกิดการแตกกระจาย (อย่าเข้าใจผิด กลับไปที่ i เพื่อเปลี่ยนเป็น coma) ขนาดเซ็กเมนต์ที่ใหญ่ขึ้นทำให้คุณสามารถส่งข้อมูลไปยังเซกเมนต์สกินได้มากขึ้น ซึ่งจะเปลี่ยนขนาดของส่วนหัว IP และ TCP หาก TCP จัดการส่วน SYN หรือหากโปรแกรมในระบบต้องการตั้งค่าการเชื่อมต่อ หรือหากยอมรับคำขอไปยังโฮสต์ระยะไกล คุณสามารถตั้งค่า MSS ซึ่งจะตั้งค่า MTU ของอินเทอร์เฟซเอาต์พุตและส่วนหัว TCP คงที่ . สำหรับ Ethernet MSS นี่อาจเป็น 1460 ไบต์ ด้วย IEEE 802.3 (บทที่ 2, ส่วนที่ 2) การห่อหุ้มทางเลือก MSS สามารถมีได้สูงสุด 1452 ไบต์

ค่าคือ 1024 ดังนั้นเราสามารถใช้มันในการแจกจ่ายใด ๆ ดังนั้นเราจึงรู้ว่ามันควรจะใช้ชะตากรรมของ BSD / 386 และ SVR4 ดังนั้นจึงมีการใช้งาน BSD มากขึ้น ดังนั้น MSS จึงเป็นผลคูณของ 512 ระบบอื่น ๆ เช่น Solaris 4.2.2, SunOS 4.2.2 และ AIX 3.2.2 ทำให้ MSS สตันเท่ากับ 1460 หากฝ่ายที่ละเมิดอยู่บนอีเทอร์เน็ตเดียวกัน มุมมองที่แสดงใน [Mogul 1993] แสดงว่า MSS ที่เก่ากว่า 1460 ให้ผลผลิตที่ดีกว่าบนอีเธอร์เน็ต MSS ที่ต่ำกว่าที่เก่ากว่า 1024

หากที่อยู่ IP ได้รับการยอมรับว่า "ไม่ใช่ในเครื่อง" MSS จะตั้งค่าเป็นล็อค - 536 ไม่ว่าจะเป็นในเครื่องหรือไม่ใช่ในเครื่อง จุดสิ้นสุดของการรับรู้อาจเป็นอันดับที่ไม่เหมาะสม จุดรับรู้ที่อยู่ IP ซึ่งอาจเป็นตัวระบุเดียวกันของmerezіและหน้ากากเดียวกันของแผนกซึ่งเป็นท้องถิ่น จุดรับรู้ที่อยู่ IP ซึ่งรับรู้ในลักษณะเดียวกับตัวระบุของการวัด เช่น ไม่ใช่ของท้องถิ่น รายการได้รับการยอมรับจากรหัสเดียวกันของ merezhі อย่างไรก็ตามด้วยหน้ากากที่แตกต่างกันของส่วนย่อยก็สามารถเป็นได้ทั้งแบบโลคัลและไม่ใช่โลคัล สำหรับการใช้งานเพิ่มเติม ให้ตั้งค่าตัวเลือกการกำหนดค่า (i) เพื่ออนุญาตให้ผู้ดูแลระบบระบุว่าเป็นโลคัลหรือไม่ใช่โลคัล การตั้งค่าตัวเลือกนี้เป็น MSS ที่โฆษณาสูงสุด (ค่าใดก็ตามที่สามารถเข้าถึง MTU ของอินเทอร์เฟซขาออก) มิฉะนั้น ค่าเริ่มต้นคือ 536

MSS อนุญาตให้โฮสต์ตั้งค่าการขยายดาตาแกรมซึ่งสามารถควบคุมได้จากฝั่งระยะไกล นอกจากนี้ คำนึงถึงข้อเท็จจริงที่ว่าโฮสต์ยังขยายพื้นที่ดาตาแกรม ตลอดจนการเอาชนะพื้นที่ดังกล่าว ทำให้การแตกแฟรกเมนต์สามารถหลบหนีได้หากโฮสต์เชื่อมต่อกับขอบเขตด้วย MTU ที่เล็กกว่า

ค้นหาโฮสต์สลิปของเราซึ่งช่อง SLIP สามารถมี MTU เท่ากับ 296 เชื่อมต่อกับเราเตอร์ bsdi ที่ 18.8 เล็กน้อย ระบบของดวงอาทิตย์เจ้าบ้านจะปรากฏขึ้น

รูปที่ 18.8 TCP ที่ส่งให้ดวงอาทิตย์ก่อนสลิปค่า MSS นั้น

เราตั้งค่าการเชื่อมต่อ TCP เป็นอาทิตย์ก่อนสลิป และดูที่ส่วนของชัยชนะของ tcpdump ภาพเล็ก 18.9 แสดงมากกว่าหน้าต่างคงที่ (ช่องเปิดของหน้าต่างถูกลบออก)

1 0.0 อาทิตย์ 1093 > ใบทิ้ง: S 517312000:517312000(0)

2 0.10 (0.00) ใบทิ้ง > อาทิตย์ 1093: S 509556225:509556225(0)
ack517312001
3 0.10 (0.00) sun.1093 > ใบทิ้ง: . แอค 1

รูปที่ 18.9 ดู tcpdump เพื่อ embed sun ก่อนสลิป

ที่นี่ สิ่งสำคัญคือต้องให้ความสนใจกับผู้ที่ดวงอาทิตย์ไม่สามารถส่งส่วนที่มีส่วนข้อมูลขนาดใหญ่กว่า 256 ไบต์ ไปยังผู้ที่ใช้ MSS เท่ากับ 256 (แถวที่ 2) นอกจากนี้ เนื่องจากสลิปรู้ว่า MTU ของอินเทอร์เฟซเอาต์พุตคือ 296 ให้ส่งดวงอาทิตย์เพื่ออ่าน MSS เท่ากับ 1460 และคุณไม่สามารถส่งข้อมูลมากกว่า 256 ไบต์เพื่อหลีกเลี่ยงการแยกส่วน Prote ระบบสามารถส่งข้อมูลน้อยลง ลดเสียง MSS จากฝั่งไกล

การแยกส่วนสามารถหลีกเลี่ยงได้ด้วยวิธีนี้ก็ต่อเมื่อโฮสต์เชื่อมต่อโดยไม่มีการเชื่อมต่อระหว่างกลางกับลิงก์ที่มี MTU น้อยกว่า 576 หากโฮสต์เชื่อมต่อกับการเชื่อมต่ออีเทอร์เน็ต และลิงก์ประกาศ MSS เท่ากับ 536 ลิงก์ตรงกลาง อาจมี MTU เท่ากับ 296 การแยกส่วนจะถูกล้าง วิธีเดียวที่จะกำจัดสิ่งนี้คือการเร่งกลไกการจัดสรร MTU ของการขนส่ง (บทที่ 24 ส่วน)

TCP ปิดครึ่งหนึ่ง

TCP อนุญาตให้ผู้เข้าร่วมหนึ่งคนในการเชื่อมต่อเริ่มต้นการถ่ายโอนข้อมูล แต่ยังคงรับข้อมูลจากด้านระยะไกล สิ่งนี้เรียกว่า TCP half-close ดังที่เราได้เดาไปแล้วก่อนหน้านี้ มัคนายกของโปรแกรมสามารถภาคภูมิใจในความสามารถของพวกเขา

เพื่อเอาชนะลักษณะเฉพาะของอินเทอร์เฟซซอฟต์แวร์ จำเป็นต้องให้ความสามารถในการเพิ่มภาคผนวกเพื่อพูดว่า: "ฉันได้ถ่ายโอนข้อมูลเสร็จแล้ว ฉันส่งเครื่องหมายสิ้นสุดของไฟล์ (FIN) ไปยังจุดสิ้นสุด- of-file (FIN) สำหรับจุดสิ้นสุดของไฟล์ แต่ฉันยังต้องการนำข้อมูลจากจุดสิ้นสุดไปยังจุดสิ้นสุดจนกว่าจะมีการส่งเครื่องหมายจุดสิ้นสุดของไฟล์ (FIN) มาให้ฉัน"

ซ็อกเก็ต API รองรับโหมดปิด เพื่อให้โปรแกรมเรียกการปิดระบบด้วยอาร์กิวเมนต์ 1 อื่นแทนการปิด อย่างไรก็ตาม โปรแกรมส่วนใหญ่เปิดการโทรทั้งสองทิศทางด้วยการคลิกปิดอย่างรวดเร็ว

ภาพขนาดย่อ 18.10 แสดงสถานการณ์ทั่วไปสำหรับ TCP ที่ปิด เราแสดงให้ลูกค้าเห็นจากทางด้านซ้าย โดยเริ่มต้นโหมดตรงข้าม แต่คุณก็สามารถทำงานทางด้านข้างได้เช่นกัน สองส่วนแรกเหมือนกัน: FIN สำหรับตัวเริ่มต้น ตามด้วย ACK และ FIN สำหรับตัวรับ อย่างไรก็ตาม ให้ทบทวนสถานการณ์ในแง่ของสิ่งที่ชี้ไปที่เด็กน้อย 18.4 เพื่อให้ฝ่ายที่รับคำสั่ง "ร้องเพลง" ยังคงสามารถส่งส่วยได้ เราแสดงข้อมูลเพียงส่วนเดียว ตามด้วย ACK ซึ่งในกรณีนี้คุณสามารถส่งข้อมูลได้หลายส่วน (เราจะแจ้งรายละเอียดเพิ่มเติมเกี่ยวกับการแลกเปลี่ยนกลุ่มข้อมูลและการยืนยันใน .) หากคุณยกเลิกโดยยกเลิกคำสั่งให้ "ส่งข้อมูล" หลังจากยกเลิกการถ่ายโอนข้อมูล คุณจะปิดส่วนของวันเป็น ผลลัพธ์ของการบังคับใช้ FIN ซึ่งมีการลงนามสิ้นสุดไฟล์ถูกส่ง โหมด initsiyuvav "napivzakritiy" บางประเภท หากมีการยืนยัน FIN อีกครั้ง คำสั่งซื้อจะถูกปิดอีกครั้ง

Maliunok 18.10 TCP ในโหมดปิด

Navischo สามารถเป็นโหมดvikoristanynapіvzkritiyได้หรือไม่? ตัวอย่างหนึ่งคือคำสั่ง Unix rsh(1) ซึ่งจะแทนที่คำสั่งบนระบบอื่น ทีม

ดวงอาทิตย์ % rsh bsdi เรียงลำดับ< datafile

รันคำสั่ง sort บนโฮสต์ bsdi โดยที่อินพุตมาตรฐานของคำสั่ง rsh อ่านจากชื่อไฟล์ datafile คำสั่ง rsh สร้าง TCP ระหว่างตัวมันเองและโปรแกรมนั้น ราวกับว่ามันจะถูกล็อกออนไปยังรีโมตโฮสต์ ฟังก์ชั่น rsh ทำได้ง่าย: คำสั่งคือการคัดลอกอินพุตมาตรฐาน (ไฟล์ข้อมูล) จากอินพุตและคัดลอกจากอินพุตไปยังจอแสดงผลมาตรฐาน (เทอร์มินัลของเรา) บนเจ้าตัวน้อย 18.11 มาดูกันว่าหน้าตาเป็นอย่างไร (โปรดทราบว่า TCP Full Duplex ไม่ทำงาน)

รูปที่ 18.11 คำสั่ง: rsh bsdi sort< datafile.

บนรีโมตโฮสต์ เซิร์ฟเวอร์ bsdi เซิร์ฟเวอร์ rshd จี้โปรแกรม sort ในลักษณะที่เป็นอินพุตมาตรฐานและทิศทางเอาต์พุตมาตรฐานในการเชื่อมต่อ TCP ที่สาขา 14 โฮเวอร์ คำอธิบายรายงานโครงสร้างของกระบวนการ Unix ซึ่งมีส่วนร่วมที่นี่ อย่างไรก็ตาม เราจะได้รับแจ้งว่า TCP ถูกแฮ็กและโหมด TCP ถูกปิดอย่างไร

โปรแกรมจัดเรียงไม่สามารถเริ่มสร้างเอาต์พุตได้จนกว่าจะอ่านอินพุตทั้งหมดแล้ว ข้อมูลเอาต์พุตทั้งหมดที่ต้องส่งจากไคลเอนต์ rsh ไปยังเซิร์ฟเวอร์การเรียงลำดับจะถูกแทนที่ด้วยไฟล์ ซึ่งสามารถเรียงลำดับได้ หากมีไอคอนสิ้นสุดไฟล์สำหรับอินพุต (ไฟล์ข้อมูล) ไคลเอนต์ rsh จะเขียนการเชื่อมต่อ TCP จากนั้นเซิร์ฟเวอร์การเรียงลำดับจะยอมรับแท็กสิ้นสุดสำหรับไฟล์จากเอาต์พุตมาตรฐาน (เอาต์พุต TCP) จัดเรียงไฟล์ และเขียนผลลัพธ์ของเอาต์พุตมาตรฐาน (เอาต์พุต TCP) ไคลเอนต์ rsh ยังคงอ่านคำสั่ง TCP ต่อไปโดยคัดลอกไฟล์การเรียงลำดับจากหน้าต่างมาตรฐาน

หากไม่มี vikoristannya half-closed จะต้องใช้เทคนิคเพิ่มเติมบางอย่าง เช่น การอนุญาตให้ลูกค้ากู้คืนเซิร์ฟเวอร์ หลังจากเสร็จสิ้นการร้องขอข้อมูล ลูกค้ายังคงได้รับอนุญาตให้รับข้อมูลจากเซิร์ฟเวอร์ หรืออีกทางหนึ่งจำเป็นต้องเรียนสองภาคเรียนการประท้วงมีความสำคัญมากกว่า vikoristany ในโหมดปิด

ไดอะแกรมสถานีถ่ายโอน TCP

เราได้อธิบายสำเนาของกฎสำหรับการตั้งค่าและการเชื่อมต่อ rozryu TCP กฎของ Qi สำหรับการเลือกไดอะแกรมขั้นตอนการถ่ายโอนดังที่แสดงใน 18.12

ขั้นตอนต่อไปคือการระบุว่าไดอะแกรมเป็นไดอะแกรมของสถานีมาตรฐาน เราทำเครื่องหมายการถ่ายโอนหลักของไคลเอ็นต์ด้วยลูกศรหนาหนา และการถ่ายโอนหลักของเซิร์ฟเวอร์ด้วยลูกศรตัวหนาประ

อุปกรณ์สองตัวที่นำค่ายได้รับการติดตั้งแล้ว ยืนยันการเริ่มต้นของวัน และเกียร์สองตัวที่นำค่ายได้รับการติดตั้งแล้ว (จัดตั้งขึ้น) ยืนยันการเริ่มต้นของวัน ค่าย ESTABLISHED อยู่ในช่วงเวลาที่สามารถถ่ายโอนข้อมูลระหว่างสองฝ่ายในทั้งสองทิศทางได้ ในดิวิชั่นต่อไปจะอธิบายสิ่งที่เกิดขึ้นในแต่ละค่าย

เรารวมสี่เหลี่ยมจัตุรัสสองช่องที่ส่วนล่างซ้ายเข้ากับไดอะแกรมตรงกลางกรอบเส้นประ และทำเครื่องหมายว่า "ปิดใช้งาน" สี่เหลี่ยมอีกสองช่องที่เหลือ (CLOSE_CLOSED - CLOSE_WAIT และ STOP_APPROVED - LAST_ACK) เชื่อมกันด้วยกรอบจุดและทำเครื่องหมายว่า "ปิดแบบไม่โต้ตอบ" (ปิดแบบไม่โต้ตอบ)

ตั้งชื่อ 11 สถานี (ปิด - ปิด, ฟัง - ฟัง, SYN_VIDPRAVLENY - SYN_SENT และอื่น ๆ) สำหรับสถานีเล็ก ๆ น้อย ๆ ที่ได้รับเลือกในอันดับดังกล่าว เพื่อยืนยันสถานี วิธีป้อนคำสั่ง netstat ในทางของตัวเอง ชื่อของ netstat เกือบจะเหมือนกับชื่อที่อธิบายไว้ใน RFC 793 ค่ายปิดไม่ใช่ค่ายจริงๆ แต่เป็นจุดเริ่มต้นและจุดสิ้นสุดของไดอะแกรม

การเปลี่ยนจาก LISTEN เป็น SYN_SENT (SYN_SENT) เป็นไปได้ในทางทฤษฎี ซึ่งไม่รองรับการใช้งานของ Berkeley

และการเปลี่ยนแปลงจะกลายเป็น SYN_SYN ( SYN_RCVD) กลับไปเป็น LISTEN เท่านั้นที่ทำได้ในกรณีนั้น เช่นในค่าย SYN_RCVD (SYN_RCVD) มันจะกลายเป็น SYN (LISTEN) (สถานการณ์หลัก) และไม่ใช่ SY จะกลายเป็น) Tse DECH, SHO Yakshcho Mi Zdiysili Passivna Vidkrittei (เอาไปที่ค่ายข่าวลือ - ฟัง), Syn ประณาม, ส่ง Syn Z Ack (ไปที่เครื่องจักรการเกษตร _syn - syn_rcvd) I POMIM DOSTIMED ACK, Kintsev Popti -otika. pributtya іnshoy zapu บนz'єdnannya

18.12 ไดอะแกรมเปลี่ยนเป็น TCP

ภาพขนาดย่อ 18.13 แสดงการปิด TCP ที่ติดตั้งอย่างสมบูรณ์ มีรายงานว่าอธิบายด้วย กลายเป็นผ่านไคลเอ็นต์และเซิร์ฟเวอร์ yaki pass

รูปที่ 18.13 TCP mill ซึ่งบ่งชี้ถึงการตอบรับที่ดีต่อการเติบโตของวัน

ในวันเล็ก ๆ ของวันที่ 18.13 เราปล่อยให้ลูกค้าซึ่งเป็นที่รู้จักจากด้านซ้ายมีการใช้งานมากกว่าและเซิร์ฟเวอร์ซึ่งอยู่ทางขวามือเป็นแบบพาสซีฟ เรายังแสดงให้เห็นว่าไคลเอนต์กำลังปิดอยู่ (ตามที่เราคาดการณ์ไว้ก่อนหน้านี้ ผิวหนังสามารถปิดได้)

คุณควรทำตามขั้นตอนเพื่อเปลี่ยนสถานีของเจ้าตัวน้อยในวันที่ 18.13 ด้วยดาตาแกรมช่วยเหลือของการเปลี่ยนแปลงสถานีที่มุ่งเป้าไปที่เจ้าตัวเล็กในวันที่ 12.18 เพื่อให้คุณเข้าใจว่าเหตุใดการเปลี่ยนแปลงนั้นจึงเกิดขึ้นอีกครั้ง

น้ำยาทำความสะอาด 2MSL

โรงสี TIME_WAIT บางครั้งเรียกว่าโรงสีฆ่าเชื้อ 2MSL สำหรับการใช้งานสกิน ค่าของชั่วโมงชีวิตเซ็กเมนต์สูงสุด (MSL - อายุการใช้งานเซ็กเมนต์สูงสุด) จะถูกเลือก นี่คือชั่วโมงสูงสุด โดยยืดส่วนที่สามารถใช้ในการวัดออกก่อน เนื่องจากจะถูกล้าง เรารู้ว่านี่คือชั่วโมงของขอบเขต แฟรกเมนต์ของเซกเมนต์ TCP จะถูกส่งไปขอความช่วยเหลือจากดาตาแกรม IP และดาตาแกรม IP ของสกินมีฟิลด์ TTL เนื่องจากเป็นชั่วโมงแห่งชีวิต

RFC 793 [Postel 1981c] แสดงว่า MSL สามารถเท่ากับ 2 สิ่ง ในการใช้งานอื่นๆ ค่าอาจเป็น 30 วินาที 1 ปากกาขนนก หรือ 2 ปากกาขนนก

ว่ากันว่าอายุการใช้งานของดาตาแกรม IP นั้นล้อมรอบด้วยการส่งสัญญาณจำนวนมาก ไม่ใช่ด้วยตัวจับเวลา

เมื่อ MSL พ่ายแพ้ จะใช้กฎต่อไปนี้: หาก TCP กำลังปิดและส่งส่วนที่เหลือเพื่อล้างแค้นการรับทราบ (ACK) วันที่อาจถูกทิ้งไว้ในสถานี TIME_WAIT เป็นเวลาหนึ่งชั่วโมง ซึ่งดีสำหรับ MSL สองรายการ ซึ่งช่วยให้ TCP สามารถส่ง ACK ที่เหลืออีกครั้งในเวลาเดียวกับที่ส่ง ACK แรก (ในขณะที่ฝั่งระยะไกลหมดเวลาและส่ง FIN สุดท้ายอีกครั้ง)

มิฉะนั้น การตรวจสอบ 2MSL หมายความว่าการเชื่อมต่อ TCP อยู่ในการตรวจสอบความถูกต้อง 2MSL คู่ของซ็อกเก็ตที่เห็นสำหรับการเชื่อมต่อนี้ (ที่อยู่ IP ของไคลเอ็นต์ หมายเลขพอร์ตไคลเอ็นต์ ที่อยู่ IP ของเซิร์ฟเวอร์ และหมายเลขพอร์ตของเซิร์ฟเวอร์) ไม่สามารถเปิดใหม่ได้ การโทรนี้สามารถทำซ้ำได้อีกครั้งก็ต่อเมื่อชั่วโมง 2MSL สิ้นสุดลงเท่านั้น

น่าเสียดายที่การใช้งานส่วนใหญ่ (Berkeley เป็นหนึ่งในนั้น) อยู่ภายใต้คำสั่งของความนิยมสูงสุด หลังจากล็อกแล้ว หมายเลขพอร์ตภายในเครื่องจะไม่สามารถรีแบรนด์ได้ หมายเลขพอร์ตด็อคคือหมายเลขพอร์ตในเครื่องของพาริตี้ซ็อกเก็ตที่รีแบรนด์ในสถานี 2MSL ด้านล่างดูที่ vimogs ที่เห็นได้ชัด

การดำเนินการและ API ได้รับการคุ้มครองเนื่องจากอนุญาตให้คุณข้ามการแลกเปลี่ยน ตัวแปรซ็อกเก็ต API สามารถกำหนดตัวเลือกซ็อกเก็ต SO_REUSEADDR อนุญาตให้คุณกำหนดหมายเลขพอร์ตในเครื่องของคุณเองให้กับพอร์ตในเครื่องที่ท่องที่สถานี 2MSL แต่กฎ TCP ไม่อนุญาตให้ย้ายหมายเลขพอร์ตนี้ไปยังโฮสต์ เนื่องจากมันท่องจากสถานี 2MSL

ส่วนการติดขัดของผิวหนังซึ่งมาถึงในวันนี้หากถูกตำหนิที่สถานี 2MSL ก็ปรากฎขึ้น เนื่องจากการเชื่อมต่อถูกกำหนดให้เป็นคู่ของซ็อกเก็ตในสถานี 2MSL จึงไม่สามารถลงนามการเชื่อมต่อใหม่กับจุดได้ เนื่องจากไม่สามารถแทรกการเชื่อมต่อใหม่ได้ การต่อสู้เพื่อความจริงที่ว่าพัสดุที่ล่าช้าไม่ได้รับการยอมรับเป็นส่วนหนึ่งของวันใหม่ (วันที่กำหนดเป็นคู่ของซ็อกเก็ต วันที่ใหม่เรียกว่าการต่ออายุหรือรางวัลของวันที่นี้)

ตามที่เราได้แสดงไปแล้วเล็กน้อย 18.13 ให้โทรหาไคลเอ็นต์เพื่อปิดและเข้าสู่โหมด TIME_WAIT ดูเหมือนว่าเซิร์ฟเวอร์จะปิดอยู่เฉยๆ และไม่ผ่านโหมด TIME_WAIT เป็นไปได้ที่จะสร้าง visnovok ซึ่งสามารถใช้เพื่อเลียนแบบไคลเอนต์และรีสตาร์ทด้วยวิธีอื่น ไคลเอ็นต์ใหม่นี้ไม่สามารถชนะเหนือหมายเลขพอร์ตในเครื่องเดียวกันได้ สำหรับผู้ที่มีปัญหามากมายซึ่งไคลเอนต์เรียกพอร์ต vicorist ซึ่งกำหนดแบบไดนามิกและไม่ได้กำหนดซึ่งกำหนดพอร์ต vikoristovuetsya แบบไดนามิกในเวลาที่กำหนด

อย่างไรก็ตาม จากมุมมองของเซิร์ฟเวอร์ ทุกอย่างแตกต่างกัน เศษของเซิร์ฟเวอร์ vikoristovuyut zazdalegіd vidomі porti หากเรา vimknemo เซิร์ฟเวอร์ ซึ่งสามารถตั้งค่าให้เริ่มต้นได้ และเราจะพยายามรีสตาร์ทเซิร์ฟเวอร์โดยประมาทเลินเล่อ เซิร์ฟเวอร์จะไม่สามารถชนะวันที่ย้อนกลับไปยังหมายเลขพอร์ตซึ่งเป็นจุดสิ้นสุดของรายการได้ เนื่องจากหมายเลขพอร์ตนี้เป็นส่วนหนึ่งของ 2MSL . ทอมอาจต้องการ 1 ถึง 4 เครดิตก่อนเขา เนื่องจากเซิร์ฟเวอร์จะเริ่มต้นใหม่

คุณสามารถดูสถานการณ์ดังกล่าวได้โดยใช้โปรแกรมถุงเท้า เราเริ่มต้นเซิร์ฟเวอร์ เข้าถึงไคลเอนต์ใหม่ จากนั้นเราทิ้งเซิร์ฟเวอร์:

ดวงอาทิตย์ % ถุงเท้า-v-s 6666
(เปิดตัวไคลเอนต์บน bsdi ซึ่งมาถึงพอร์ตนี้)
การเชื่อมต่อบน 140.252.13.33.6666 จาก 140.252.13.35.1081
^? ป้อนสัญลักษณ์รีสตาร์ทเพื่อปิดใช้งานเซิร์ฟเวอร์
ดวงอาทิตย์ % ถุงเท้า-s 6666และเราพยายามรีสตาร์ทเซิร์ฟเวอร์อีกครั้งบนพอร์ตเดียวกัน
ไม่สามารถผูกที่อยู่ในเครื่องได้: มีการใช้งานที่อยู่นี้แล้ว
ดวงอาทิตย์ % เน็ตสแตทลองพิจารณาค่ายใหม่ดูครับ
การเชื่อมต่ออินเทอร์เน็ตที่ใช้งานอยู่
Proto Recv-Q Send-Q ที่อยู่ในท้องถิ่น ที่อยู่ต่างประเทศ (รัฐ)
tcp 0 0 sun.6666 bsdi.1081 TIME_WAIT
เห็นแถวไร้หน้า

หากเราพยายามรีสตาร์ทเซิร์ฟเวอร์ โปรแกรมจะแจ้งให้คุณทราบเกี่ยวกับการให้อภัย ซึ่งจะระบุแก่ผู้ที่ไม่สามารถรับหมายเลขพอร์ตของตนเองได้ ดังนั้นข้อผิดพลาดจึงได้รับชัยชนะ (การรีบูตเครื่องในสถานีหักบัญชี 2MSL)

ให้ฉันเหงื่อออก vikonuemo netstat ปฏิเสธ schob ดูที่ค่าย z'ednannya และยืนยันว่ามันใช้งานได้จริงในค่าย TIME_WAIT

หากเราดำเนินการต่อ ลองรีสตาร์ทเซิร์ฟเวอร์และสงสัยว่าเวลาเหมาะสมหรือไม่ เราสามารถคำนวณค่า 2MSL ได้ สำหรับ SunOS 4.1.3, SVR4, BSD/386 และ AIX 3.2.2 การรีสตาร์ทเซิร์ฟเวอร์จะใช้เวลา 1 นาที ซึ่งหมายความว่า MSL ใช้เวลา 30 วินาทีในการดำเนินการให้เสร็จสิ้น ด้วย Solaris 2.2 การรีสตาร์ทเซิร์ฟเวอร์ใช้เวลา 4 เครดิต ซึ่งหมายความว่า MSL ใช้เวลา 2 เครดิต

เราสามารถใช้การให้อภัยที่สร้างโดยไคลเอนต์ เพื่อให้ไคลเอนต์ได้รับพร้อมท์ให้เข้าสู่พอร์ต ซึ่งเป็นส่วนหนึ่งของการโทร ซึ่งอยู่ในโหมดการล้าง 2MSL (พูดไคลเอ็นต์ไม่ให้ขโมย):

ดวงอาทิตย์ % ถุงเท้า-v bsdi echoไคลเอ็นต์เริ่มทำงานซึ่งมาถึงเซิร์ฟเวอร์ echo
เชื่อมต่อกับ 140.252.13.33.1162 ถึง 140.252.13.35.7
สวัสดีอีกแถวหนึ่ง
สวัสดี
^ป้อนอักขระสิ้นสุดสำหรับไฟล์เพื่อปิดใช้งานไคลเอนต์
ดวงอาทิตย์ % ถุงเท้า -b1162 bsdi echo
ไม่สามารถผูกที่อยู่ในเครื่องได้: มีการใช้งานที่อยู่นี้แล้ว

ในการเรียกใช้ไคลเอ็นต์ครั้งแรก ตัวเลือก -v ได้รับการระบุเพื่อให้คุณดูว่าหมายเลขพอร์ตในเครื่องใด (1162) ถูกเลือก ในการเรียกใช้ไคลเอนต์อื่น ตัวเลือก -b ถูกระบุเพื่อบอกไคลเอ็นต์ให้กำหนดหมายเลขพอร์ตในเครื่องของตัวเอง 1162 ให้กับตัวเอง

ที่นี่จำเป็นต้องเดาเกี่ยวกับคุณสมบัติเฉพาะอย่างหนึ่งของ 2MSL จนกว่าเราจะพูดถึงมัน หากเราพูดถึง File Transfer Protocol (FTP - File Transfer Protocol) ดังที่ได้กล่าวไว้ก่อนหน้านี้ ในหน้าต่าง 2MSL ซ็อกเก็ตสองสามตัวจะถูกละทิ้ง (ซึ่งประกอบด้วยที่อยู่ IP ในเครื่อง พอร์ตในเครื่อง ที่อยู่ IP ระยะไกล และพอร์ตระยะไกล) อย่างไรก็ตาม การใช้งานแบบไม่มีตัวตนทำให้กระบวนการเชื่อมต่อหมายเลขพอร์ตใหม่ซึ่งเป็นส่วนหนึ่งของซ็อกเก็ตที่อยู่ในโหมด 2MSL (ดูตัวเลือก SO_REUSEADDR ทางเลือก) TCP ไม่อนุญาตให้ทำการเชื่อมต่อใหม่ในคู่ซ็อกเก็ตเดียวกัน สามารถนำ Tse มาช่วยในการทดลองที่ไม่เหมาะสมได้:

ดวงอาทิตย์ % ถุงเท้า-v-s 6666เซิร์ฟเวอร์เริ่มฟังที่พอร์ต 6666
(เปิดตัวไคลเอนต์บน bsdi ซึ่งจะมาที่พอร์ตนี้)
การเชื่อมต่อบน 140.252.13.33.6666 จาก 140.252.13.35.1098
^? ป้อนสัญลักษณ์รีสตาร์ทเพื่อปิดใช้งานเซิร์ฟเวอร์
ดวงอาทิตย์ % ถุงเท้า -b6666 bsdi 1098เริ่มต้นไคลเอ็นต์ด้วยพอร์ตภายในเครื่อง 6666
ไม่สามารถผูกที่อยู่ในเครื่องได้: มีการใช้งานที่อยู่นี้แล้ว
ดวงอาทิตย์ % ถุงเท้า -A -b6666 bsdi 1098ร่ายมนตร์อีกครั้งในครั้งแรกด้วยตัวเลือก -A
ข้อผิดพลาดในการเปิดที่ใช้งานอยู่: มีการใช้ที่อยู่นี้แล้ว

อันดับแรก เราเปิดตัวโปรแกรม sock เป็นเซิร์ฟเวอร์บนพอร์ต 6666 และเข้าถึงไคลเอนต์ใหม่จากโฮสต์ bsdi หมายเลขพอร์ตไคลเอนต์คือ 1098 ซึ่งกำหนดแบบไดนามิก เราปิดเซิร์ฟเวอร์ในอันดับนี้ vin zdіysnivปิดอย่างแข็งขัน ด้วย 4 พารามิเตอร์ - 140.252.13.33 (ที่อยู่ IP ภายในเครื่อง), 6666 (หมายเลขพอร์ตภายในเครื่อง), 140.252.13.35 (ที่อยู่ IP ระยะไกล) และ 1098 (หมายเลขพอร์ตระยะไกล) บนเซิร์ฟเวอร์ถูกใช้โดยค่าย 2MSL

ทันใดนั้น เราเรียกใช้โปรแกรมนี้ในฐานะไคลเอนต์ โดยป้อนหมายเลขท้องถิ่นที่พอร์ต 6666 เมื่อเราพยายามเข้าถึงโฮสต์ bsdi ที่พอร์ต 1098 เมื่อพยายามทำเครื่องหมายที่พอร์ต 6666 อีกครั้ง ขออภัยถูกสร้างขึ้น เนื่องจากพอร์ตทั้งหมดเป็น ในค่าย 2MSL

เพื่อกำจัดการให้อภัย เราเริ่มโปรแกรมอีกครั้งโดยระบุตัวเลือก -A เพื่อเปิดใช้งานตัวเลือก SO_REUSEADDR สิ่งนี้ทำให้โปรแกรมสามารถกำหนดหมายเลขพอร์ต 6666 ของตัวเองได้ อย่างไรก็ตาม มันถูกยกโทษให้หากโปรแกรมพยายามรับทราบอย่างจริงจัง ตัวอย่างเช่น โปรแกรมสามารถกำหนดหมายเลขของตัวเองให้กับพอร์ต 6666 สามารถสร้างการเรียกไปยังพอร์ต 1098 บนโฮสต์ bsdi, คู่ของซ็อกเก็ต, การโทรครั้งแรก, ลองอีกครั้งที่สถานี 2MSL

เราควรพยายามติดตั้งข้อมูลสำรองจากโฮสต์อื่นอย่างไร ขั้นแรก เรามีหน้าที่รับผิดชอบในการรีสตาร์ทเซิร์ฟเวอร์บนดวงอาทิตย์ด้วยเครื่องหมาย -A เพื่อให้พอร์ตที่คุณต้องการ (6666) เป็นส่วนหนึ่งของการเริ่มต้น ซึ่งอยู่ในสถานี 2MSL:

ดวงอาทิตย์ % ถุงเท้า-A-s 6666เริ่มเซิร์ฟเวอร์ที่ฟังพอร์ต 6666

เดี๋ยวก่อน เมื่อหน้าต่าง 2MSL สิ้นสุดในวันอาทิตย์ เราเริ่มต้นไคลเอ็นต์ใน bsdi:

bsdi% ถุงเท้า -b1098 อาทิตย์ 6666
เชื่อมต่อกับ 140.252.13.35.1098 ถึง 140.252.13.33.6666

น่าเสียดายที่มันได้ผล! ข้อมูลจำเพาะ TCP แบบสั้นนี้รองรับโดยการใช้งาน Berkeley มากขึ้น การใช้งาน Qi จะรับคำขอในการโทรใหม่ เช่น เปลี่ยนที่สถานี TIME_WAIT เช่น หมายเลขใหม่ลำดับมากกว่า จำนวนลำดับที่เหลือต่ำกว่า คำบรรยายอยู่ด้านหน้าของวัน วิธีใดที่ ISN สำหรับ zadnanny ใหม่จะถูกตั้งค่าให้เท่ากับหมายเลขลำดับที่เหลือของ z'ednanny ก่อนหน้าบวกด้วย 128000 ภาคผนวกของ RFC 1185 แสดงให้เห็นถึงข้อบกพร่องที่เป็นไปได้ของเทคโนโลยีดังกล่าว

ลักษณะการใช้งานนี้ช่วยให้ไคลเอนต์และเซิร์ฟเวอร์สามารถเชื่อมต่อหมายเลขพอร์ตเดียวกันอีกครั้งเพื่อการต่ออายุโรงงานเดียวกันได้สำเร็จ ในกรณีนั้น เซิร์ฟเวอร์ไม่ได้ปิดอยู่ เราต้องการพิจารณาอีก 2MSL บน หากเราหารือกับ FTP เลยกลับไปกองเหมือนเดิม

เข้าใจเวลาที่เงียบสงบ

สถานีหักบัญชี 2MSL ควรจะป้องกันพัสดุค้างส่งซึ่งเกิดจากคำสั่งซื้อก่อนกำหนด ซึ่งในกรณีนี้ กลิ่นเหม็นจะไม่ถูกตีความว่าเป็นส่วนหนึ่งของโรงงานใหม่ เช่นเดียวกับที่อยู่ IP และหมายเลขพอร์ตในพื้นที่และระยะไกล อย่างไรก็ตาม มันใช้งานได้ในกรณีนั้นเท่านั้น เนื่องจากโฮสต์ของการประชุมที่สถานี 2MSL เข้ากันไม่ได้

จะเป็นอย่างไรหากโฮสต์ที่มีพอร์ตในสถานี 2MSL ไม่เป็นไร ปรับใช้ MSL ใหม่ทุก ๆ ชั่วโมง และติดตั้งพอร์ตใหม่ในที่อยู่ IP เดียวกันและที่อยู่ห่างไกล และหมายเลขพอร์ตที่ตรงกับพอร์ตในเครื่อง โฮสต์เหล่านั้นจะอยู่ในสถานี 2MSL มาก่อนหรือไม่ ความผิดพลาด? ด้วยวิธีนี้ ส่วนที่ล่าช้า ถูกปิด ราวกับว่าพวกเขาหลับไปก่อนการพังทลาย สามารถถูกตีความอย่างให้อภัยได้ราวกับว่าเป็นส่วนหนึ่งของคำสั่งซื้อใหม่ ซึ่งสร้างขึ้นหลังจากการปรับปรุงใหม่ อาจเป็นอิสระจากกัน ขึ้นอยู่กับว่าหมายเลขลำดับวันที่ใดถูกเลือกหลังจากการเลื่อนใหม่

เพื่อป้องกันสถานการณ์ที่เลวร้ายดังกล่าว RFC 793 ระบุว่า TCP ไม่ต้องรับผิดในการทำสัญญาใหม่จนกว่า MSL จะเสร็จสิ้นหลังจากช่วงเวลาล่วงหน้า Tse เรียกว่าชั่วโมงเงียบ (เวลาเงียบ)

สำหรับการใช้งานบางอย่าง โฮสต์จะตรวจสอบ MSL ชั่วโมงที่ต่ำกว่าและต่ำกว่าหลังจากการเลื่อนขั้นอีกครั้ง

FIN_FIN_WAIT_2 ล้าน

ที่สถานี FIN_WAIT_2 เราเอาชนะ FIN ของเราได้ และอีกฝั่งยืนยัน หากเราไม่รู้จักกันในค่ายของ zadnannya ที่ปิดก็เป็นที่ชัดเจนว่าโปรแกรมอยู่ในประเทศที่ห่างไกลซึ่งเราสามารถรับรู้ถึงสัญญาณของการสิ้นสุดของไฟล์และปิดด้านข้างของ zadnannya ยิ่งไปกว่านั้น FIN ถูกส่งมาให้เรา เฉพาะเมื่อกระบวนการปิดที่ปลายระยะไกล ฝ่ายของเราจะเปลี่ยนจากโหมด FIN_WAIT_2 เป็นโหมด TIME_WAIT

Tse หมายความว่าสามารถปล่อยให้ด้านข้างของการโจมตีอยู่ในโหมดนี้ตลอดไป ด้านระยะไกลยังคงเป็นไปได้ CLOSE_WAIT และอาจถูกปล่อยให้อยู่ในประเทศเดิมตลอดไป ท่าเรือของโปรแกรมไม่ละเมิดการปิด

การใช้งาน Berkeley มากขึ้นจะทำให้อันดับการรุกของค่าย FIN_WAIT_2 เป็นการตัดสินใจชั่วนิรันดร์ ราวกับว่าโปรแกรมได้ปิดอย่างแข็งขัน มันสร้างขึ้นนอกการปิดและไม่ได้อยู่ในรูปแบบของการปิด ซึ่งบ่งชี้ว่าโปรแกรมเหล่านั้นมีค่าควรแก่การรับข้อมูล ซึ่งในกรณีนี้ตัวจับเวลาจะถูกตั้งค่าไว้ หากการโทรไม่ถูกยกเลิกเป็นเวลา 10 นาที บวก 75 วินาที TCP จะทำการโทรในโหมดปิด มีความคิดเห็นเกี่ยวกับสิ่งที่คล้ายกับลักษณะของโปรโตคอล

Segmenti Skidannya (รีเซ็ต)

เราเดาว่าบิตชื่อ RST ในส่วนหัว TCP หมายถึงอะไร "รีเซ็ต" (รีเซ็ต) ใน zagalny vpadku สัญญาณ "skidannya" (รีเซ็ต) silaetsya TCP ที่ vipadku นั้น, ส่วน yakscho, scho pribuvayut, ไม่ทับซ้อนกับ zadnannyu ที่กำหนด (เราใช้คำว่า "การเชื่อมต่ออ้างอิง") ​​ซึ่งหมายถึงการเชื่อมต่อที่ระบุโดยที่อยู่ IP ที่กำหนดให้กับหมายเลขพอร์ตของการเชื่อมต่อที่อ้างอิง และตามที่อยู่ IP ของ gerel และหมายเลขพอร์ตของ gerel RFC 793 ไม่เรียกว่า "ซ็อกเก็ต" )

ขอการโทรไปยังพอร์ตที่ไม่รู้จัก

ความผันผวนที่เห็นได้ชัดที่สุดเมื่อมีการสร้างการรีเซ็ต ดังนั้นหากคำขอสำหรับคำสั่งซื้อมาถึงและระหว่างไม่มีกระบวนการ พอร์ตการได้ยินใดที่รับรู้ ในกรณีของ UDP ดังที่เราได้ดำเนินการไปแล้วในบทที่ 6 เมื่อดาตาแกรมมาถึงพอร์ตการรับรู้ จะไม่ล้มเหลว - การให้อภัย ICMP ถูกสร้างขึ้นเกี่ยวกับการเข้าไม่ถึงพอร์ต TCP natom_st vikoristovuє skidannya

เราสร้างตัวอย่างง่ายๆ ของตัวแปร Telnet ของลูกค้าโดยป้อนหมายเลขพอร์ตซึ่งไม่แปรผันที่จุดรับรู้:

bsdi% เทลเน็ต svr4 20000พอร์ต 20,000 ไม่ได้รับชัยชนะ
ลอง 140.252.13.34...
telnet: การเรียกโฮสต์ระยะไกล: การเชื่อมต่อถูกปฏิเสธ

ไคลเอนต์ Telnet ไม่เห็นข้อมูลเกี่ยวกับการให้อภัย บนตัวเล็ก 18.14 ข้อบ่งชี้ของการแลกเปลี่ยนแพ็กเก็ตซึ่งยืนยันคำสั่ง

1 0.0 bsdi.1087 > svr4.20000: S297416193:297416193(0)
ชนะ 4096
2 0.003771 (0.0038) svr4.20000 > bsdi.1087: R 0:0 (0) ack 297416194 ชนะ 0

รูปที่ 18.14 สร้างวันที่ปล่อยต่อชั่วโมง

สิ่งสำคัญคือเราต้องตรวจสอบทารกนี้ให้ละเอียดยิ่งขึ้น ฟิลด์ของหมายเลขลำดับ และฟิลด์ของหมายเลขยืนยันส่วนลด เนื่องจากไม่ได้ใส่บิตตอบรับ (ACK) ลงในเซ็กเมนต์ เมื่อมาถึง หมายเลขลำดับการดรอปจะถูกตั้งค่าเป็น 0 และหมายเลขการตอบรับถูกตั้งค่าเป็นหมายเลขลำดับอินพุตเอาต์พุต (ISN) บวกกับจำนวนไบต์ของข้อมูล ในส่วน โดยไม่คำนึงถึงผู้ที่อยู่ในเซกเมนต์ที่มาถึง ซึ่งไม่ได้แสดงข้อมูลจริง บิต SYN ในทางตรรกะจะใช้เวลา 1 ไบต์ในช่องว่างของหมายเลขลำดับ ในลำดับนี้ แอปพลิเคชันจะตั้งค่าหมายเลขยืนยันในข้อมูลส่วนลดเป็น ISN บวกข้อมูลวันที่ (0) บวกหนึ่งบิต SYN

Rozriv z'ednannya

ในการกระจายของการกระจาย เรา bacheled ว่าวิธีการที่สำคัญที่สุด ซึ่งได้รับชัยชนะสำหรับการพัฒนาของวัน อยู่บนพื้นฐานของข้อเท็จจริงที่ว่าฝ่ายใดฝ่ายหนึ่งอนุญาต FIN บางครั้งพวกเขาเรียกว่าหมายเลขที่ถูกต้อง (ปล่อยตามลำดับ) FIN shards จะถูกส่งหลังจากที่ข้อมูลถูกใส่ไว้ในสีดำก่อนหน้านี้ ได้รับการแก้ไขแล้ว และส่งเสียงเมื่อไม่มีข้อมูลเพิ่มเติม อย่างไรก็ตาม คุณสามารถหยุดวันได้โดยส่งการรีเซ็ต (รีเซ็ต) ไปยัง FIN บางครั้งก็เรียกว่าแท้งรีลีส

การเปิดตัวที่คล้ายกันของวันควรจะเพิ่มความเป็นไปได้สองอย่าง: (1) ไม่ว่าจะเป็นสิ่งที่ได้รับ สิ่งที่ต้องยืนอยู่กับปีศาจ - ถูกทำลาย และการโยนทิ้งไม่ได้รับการแก้ไข และ (2) ด้านที่ยอมรับ RST เราสามารถพูดได้ว่าด้านอื่น ๆ ทำลายวันที่ zam_st เพื่อปิดโยคะด้วยอันดับที่ดี ส่วนต่อประสานซอฟต์แวร์ (API) ซึ่งใช้โดยโปรแกรมมีหน้าที่รับผิดชอบในการสร้างสิ่งทดแทนที่คล้ายคลึงกันสำหรับการปิดระบบปกติ

เราประหลาดใจกับสิ่งที่เห็นในการพัฒนาที่คล้ายคลึงกันกับซอฟต์แวร์ถุงเท้าของเรา Sockets API ช่วยให้คุณสามารถใช้ตัวเลือกซ็อกเก็ต linger on close (SO_LINGER) เราได้ระบุตัวเลือก -L สำหรับชั่วโมงปิดเครื่อง ซึ่งหมายถึง 0 Ze หมายความว่าส่วนลดจะถูกส่งไปแทนที่ FIN ที่ยอดเยี่ยมเพื่อปิดวัน เราเชื่อมต่อกับเวอร์ชันของโปรแกรม sock บน svr4 เสมือนทำหน้าที่เป็นเซิร์ฟเวอร์:

bsdi% ถุงเท้า-L0 svr4 8888ลูกค้า ce; เซิร์ฟเวอร์ที่แสดงด้านล่าง
สวัสดีชาวโลกมีการแนะนำหนึ่งแถวซึ่งจะอยู่ในทิศทางของการสิ้นสุดระยะทาง
^ป้อนอักขระสิ้นสุดสำหรับไฟล์เพื่อปิดใช้งานไคลเอนต์

Tiny 18.15 แสดงคำสั่ง tcpdump สำหรับแอปพลิเคชันนี้ (เราได้เห็นเสียงวีคอนในเจ้าตัวเล็กนี้แล้ว ซึ่งไม่มีกลิ่นเหม็นใน mirkuvannya ของเรา)

1 0.0 bsdi.1099 > svr4.8888: S671112193:671112193(0)

2 0.004975 (0.0050) svr4.8888 > bsdi.1099: S 3224959489:3224959489(0)
ack671112194
3 0.006656 (0.0017) bsdi.1099 > svr4.8888: . แอค 1
4 4.833073 (4.8264) bsdi.1099 > svr4.8888: P 1:14 (13) อัค 1
5 5.026224 (0.1932) svr4.8888 > bsdi.1099: . แอค 14
6 9.527634 (4.5014) bsdi.1099 > svr4.8888: R 14:14 (0) แอค 1

รูปที่ 18.15 การกระจายใบแจ้งหนี้จากการส่งเงิน (RST) ของ FIN

แถวที่ 1-3 แสดง z'ednannya ปกติ ที่แถว 4 มีการบังคับใช้แถวของบรรณาการซึ่งเราดุ (อักขระ 12 ตัวบวกอักขระ Unix ของแถวใหม่) แต่แถวที่ 5 จะได้รับการยืนยันการรับส่วย

แถวที่ 6 ยืนยันอักขระที่ป้อนที่ส่วนท้ายของไฟล์ (Control-D) สำหรับความช่วยเหลือที่เราได้นำไคลเอ็นต์ออก ออสซิลเลเตอร์ระบุว่าเราได้แก้ไขการแทนที่ของการปิดเริ่มต้น (ตัวเลือกบรรทัดคำสั่ง -L0), TCP บน bsdi ได้ส่งการแทนที่ RST ของ FIN เริ่มต้น ส่วน RST เพื่อส่งคืนหมายเลขลำดับและหมายเลขยืนยัน นอกจากนี้ให้ความเคารพต่อผู้ที่กลุ่ม RST ไม่รู้จักในส่วนที่ห่างไกล - อย่าล้างแค้นการยืนยันในอนาคต นาฬิกาที่ยกเลิกจะขัดจังหวะวันและเตือนโปรแกรมว่าวันนั้นถูกขัดจังหวะ

เราจะให้อภัยจากเซิร์ฟเวอร์ด้วยการแลกเปลี่ยนดังกล่าว:

svr4% ถุงเท้า-s 8888ทำงานเป็นเซิร์ฟเวอร์ ฟังพอร์ต 8888
สวัสดีชาวโลก
อ่านข้อผิดพลาด: การเชื่อมต่อถูกรีเซ็ตโดยเพียร์

เซิร์ฟเวอร์นี้อ่านจากการวัดและคัดลอกจาก visnovok มาตรฐาน ทุกอย่างถูกถอดออก เรียก VIN เพื่อทำงานของคุณให้เสร็จ โดยลบสัญลักษณ์การสิ้นสุดของไฟล์ออกจาก TCP ของคุณ แต่ที่นี่มีแนวโน้มว่า VIN จะลบคำขอโทษออกเมื่อ RST มาถึง การให้อภัยสำหรับคนกลุ่มเดียวกันที่เข้าใจฉัน: วันนั้นถูกฉีกโดยผู้เข้าร่วมคนหนึ่งในวันนั้น

การกำหนดชื่อบทวิจารณ์ประจำวัน

สิ่งสำคัญคือต้องล้างการเรียก TCP เนื่องจากฝ่ายหนึ่งปิดหรือขัดจังหวะการโทรโดยไม่แจ้งให้อีกฝ่ายทราบ อาจเป็นไปได้หากมีเพียงหนึ่งในสองเจ้าภาพที่จะปรองดองกัน ดังนั้นบางครั้งจะไม่มีความพยายามที่จะถ่ายโอนข้อมูลตามลำดับเดียวกันด้านใดด้านหนึ่งจะทำงานท่าเทียบเรือจะไม่ระบุว่าอีกด้านหนึ่งผิดเพี้ยน

มีเหตุผลอีกประการหนึ่งซึ่งคุณสามารถ vyniknuti zapіvіdkrite zadnannya เนื่องจากความจริงที่ว่าการถ่ายทอดสดถูกปิดใช้งานบนโฮสต์ของลูกค้า แทนที่จะปิดโปรแกรมของลูกค้าแล้วปิดคอมพิวเตอร์ ตัวอย่างเช่น ไคลเอนต์ Telnet เปิดตัวบนพีซี และเลียนแบบคอมพิวเตอร์ เช่น ในระหว่างวันทำงาน แม้ว่าการถ่ายโอนข้อมูลจะไม่ล่าช้าในขณะที่พีซีปิดเครื่อง แต่เซิร์ฟเวอร์ไม่เคยรู้ว่าไคลเอ็นต์เป็นที่รู้จัก เมื่อเกิดการโจมตี ให้เปิดพีซีของคุณและเริ่มไคลเอนต์ Telnet ใหม่ เซิร์ฟเวอร์ใหม่จะเริ่มต้นบนโฮสต์เซิร์ฟเวอร์ ผ่านราคา การเรียก TCP จำนวนมากสามารถปรากฏบนเซิร์ฟเวอร์โฮสต์ (เราต้องการทราบวิธีที่สามารถระบุปลายด้านหนึ่งของ TCP ซึ่งเป็นสัญญาณอื่นได้ พยายามเอาชนะตัวเลือก TCP "keepalive" (keepalive))

เราสามารถสร้างชื่อวันได้ง่ายๆ เริ่มไคลเอนต์ Telnet บน bsdi และเชื่อมต่อกับเซิร์ฟเวอร์ทิ้งบน svr4 เราป้อนหนึ่งแถวและประหลาดใจกับคำตอบของ tcpdump วิธีการผ่าน จากนั้นเราส่งออกสายเคเบิลอีเธอร์เน็ตจากโฮสต์เซิร์ฟเวอร์และรีสตาร์ท เราเองเลียนแบบที่ไม่สอดคล้องกับเซิร์ฟเวอร์โฮสต์ (เราทิ้งสายเคเบิลอีเธอร์เน็ตก่อนที่เซิร์ฟเวอร์จะรีบูต เพื่อไม่ให้เราส่ง FIN ไปยังเซิร์ฟเวอร์ เพื่อให้โมดูล TCP สามารถปิดใช้งานได้เมื่อปิดใช้งานเซิร์ฟเวอร์) เนื่องจากเซิร์ฟเวอร์ถูกรีบูต เราจึงทิ้งสายเคเบิลและ ลองอีกหนึ่งแถวจากไคลเอนต์ไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์Oskіlki buv rezavantazheniya และใส่ข้อมูลทั้งหมดเกี่ยวกับ zadnannya, yak_snuval จนถึง rezavantazhennya พวกเขาไม่รู้อะไรเกี่ยวกับ zadnannya และไม่สงสัยเกี่ยวกับสิ่งเหล่านั้นซึ่ง zadnannyu โกหกส่วนที่มาถึง ในกรณีนี้ ด้าน TCP จะถูกรีเซ็ต

bsdi% telnet svr4 ละทิ้งการเปิดตัวลูกค้า
ลอง 140.252.13.34...
เชื่อมต่อกับ svr4
อักขระ Escape คือ "^]"
สวัสดีแถวนี้โอเค
ที่นี่เราได้กำหนดค่าโฮสต์เซิร์ฟเวอร์ใหม่
อีกบรรทัดหนึ่งสำหรับเมืองที่มีส่วนลด (รีเซ็ต)
การเชื่อมต่อถูกปิดโดยโฮสต์ต่างประเทศ

Tiny 18.16 แสดงมุมมอง tcpdump ของก้นนี้ (เราได้ลบการเปล่งเสียงของ vicons ข้อมูลเกี่ยวกับประเภทของบริการและการเปล่งเสียงของ MSS อย่าเทกลิ่นเหม็นบน mirkuvannya ของเรา)

1 0.0 bsdi.1102 > svr4.discard: S 1591752193:1591752193(0)
2 0.004811 (0.0048) svr4.discard > bsdi.1102: S 26368001:26368001(0)
ack1591752194
3 0.006516 (0.0017) bsdi.1102 > svr4.discard: แอค 1

4 5.167679 (5.1612) bsdi.1102 > svr4.discard: P 1:11 (10) กอง 1
5 5.201662 (0.0340) svr4.discard > bsdi.1102: . แอค 11

6 194.909929 (189.7083) bsdi.1102 > svr4.discard: P 11:25 (14) แอค 1
7 194.914957 (0.0050) arp ใครมี bsdi บอก svr4
8 194.915678 (0.0007) arp ตอบกลับ bsdi อยู่ที่ 0:0:c0:6f:2d:40
9 194.918225 (0.0025) svr4.discard > bsdi.1102: R 26368002:26368002(0)

รูปที่ 18.16 ข้อมูลส่วนลดสำหรับการมาถึงของส่วนข้อมูลในกรณีที่มีการโทรที่สำคัญ

ในแถวที่ 1-3 จะมีการติดตั้ง z'ednannya ตามปกติ ที่แถวที่ 4 แถว "สวัสดี" (สามารถแปลได้คร่าวๆ ว่า "เฮ้ ที่นั่น") จะถูกส่งไปยังเซิร์ฟเวอร์ทิ้ง ที่แถวที่ 5 การยืนยันจะมาถึง

เราได้สายเคเบิลอีเทอร์เน็ตเช่น svr4 ที่ตำแหน่งนี้ ติดตั้งใหม่ และเชื่อมต่อสายเคเบิลอีกครั้ง ขั้นตอน Wuxia ใช้เวลาประมาณ 190 วินาที ("บรรทัดอื่น") และถ้าเรากดปุ่ม Return แถวจะถูกส่งไปยังเซิร์ฟเวอร์ (แถวที่ 6 บน 18.16 เล็กน้อย) เมื่อ bula ถูกยกเลิก ID เซิร์ฟเวอร์ถูกปิดใช้งาน อย่างไรก็ตาม เซิร์ฟเวอร์ถูกรีเซ็ต แคช ARP ว่างเปล่า ดังนั้นในแถวที่ 7 และ 8 ARP จึงถูกโหลดด้วยอินพุตนั้น รอที่แถว 9 เพื่อรีเซ็ต ไคลเอนต์ที่ดรอปเสร็จสิ้นและเห็นว่าการถ่ายโอนถูกขัดจังหวะโดยโฮสต์ที่อยู่ห่างไกล (ข้อมูลที่เหลืออยู่เกี่ยวกับประเภทไคลเอนต์ Telnet นั้นไม่เป็นข้อมูลเท่าที่ควร)

Odnochasne vіdkrittya

สำหรับสองdodatkіvіsnuєmozhlivіstzdіysniti vіdkrittya อย่างแข็งขันมากขึ้นในชั่วโมงนั้น ที่ด้านผิวหนัง สามารถทำการถ่ายโอน SYN และ SYN สามารถผ่านตาข่ายได้ทีละรายการ นอกจากนี้ยังจำเป็นที่ด้านผิวหนังจะมีหมายเลขพอร์ตเล็ก ๆ ซึ่งเป็นอีกด้านหนึ่ง เรียกว่าเปิดหนึ่งชั่วโมง (เปิดพร้อมกัน)

ตัวอย่างเช่น ภาคผนวกบนโฮสต์ A อาจพอร์ต 7777 ในเครื่องกำลังเขียนไปยังพอร์ต 8888 ของโฮสต์ B ภาคผนวกบนโฮสต์อาจพอร์ต 8888 ในโลคัลเขียนไปยังพอร์ต 7777 ของโฮสต์ A

ราคาจะไม่เหมือนกับเมื่อไคลเอนต์ Telnet จากโฮสต์ A มาถึงเซิร์ฟเวอร์ Telnet บนโฮสต์ B หากไคลเอนต์ Telnet จากโฮสต์ B มาถึงเซิร์ฟเวอร์ Telnet บนโฮสต์ A อย่างไรก็ตาม เนื่องจากไคลเอนต์ Telnet กำหนดหมายเลขพอร์ตของตนเอง ซึ่งถูกกำหนดแบบไดนามิก แทนที่จะเป็นพอร์ต เนื่องจากเซิร์ฟเวอร์ Telnet ระยะไกลถูกกำหนด

TCP ถูกทำลายเป็นพิเศษในลักษณะที่สามารถทำได้ในชั่วข้ามคืน โดยผลลัพธ์คือครึ่งหนึ่งไม่ใช่สอง (ในตระกูลโปรโตคอลอื่นๆ เช่น ในเลเยอร์การขนส่ง OSI ครั้งนี้มีการเชื่อมต่อสองสาย ไม่ใช่หนึ่งเดียว)

หากจำเป็นต้องทราบหนึ่งชั่วโมง ระเบียบการจะเปลี่ยนทันทีที่ระบุทารกในวันที่ 18.13 Obid สองวันเพื่อแก้ไข SYN ในเวลาเดียวกันซึ่งหนึ่งเข้ามาที่ค่าย SYN_SENT (SYN_SENT) หากด้านผิวหนังยอมรับ SYN ก็จะเปลี่ยนเป็น SYN_ACCEPT ( SYN_RCVD) (div. baby 18.12) และผิวหนังจะปรับ SYN ใหม่เพื่อยืนยันว่า SYN ได้รับการยอมรับ ถ้าสกินลงท้ายด้วย SYN บวก ACK มันจะเปลี่ยนเป็น ESTABLISHED การเปลี่ยนแปลงของสถานีนำมาซึ่ง 18.17 เล็กน้อย

รูปที่ 18.17 การแลกเปลี่ยนเซกเมนต์ในกระบวนการโทรกลับหนึ่งชั่วโมง

Odnochasne vіdkrittya vimagaє แลกเปลี่ยนเซกเมนต์ chotirma อีกครั้ง ลดลงด้วย "การจับมือสามครั้ง" ดังนั้นให้ความเคารพต่อผู้ที่เราไม่ได้เรียกลูกค้าคนใดคนหนึ่งคนสุดท้าย แต่เรียกเซิร์ฟเวอร์อื่นว่า ประเภทนี้โดยเฉพาะการดูถูกทำตัวเหมือนลูกค้าและเซิร์ฟเวอร์

ทำได้ข้ามคืนผ่านง่าย ฝ่ายที่ขุ่นเคืองมีความผิดในการเริ่มต้นในชั่วโมงเดียวกันในลักษณะที่ SYN หันไปทางหนึ่ง ด้วยวิธีนี้ คุณสามารถช่วยเปลี่ยนชั่วโมงที่ดีระหว่างผู้เข้าร่วมสองคนในการประชุม ซึ่งช่วยให้ SYN สามารถพลิกกลับได้ โปรดทราบว่าเราสามารถชนะได้เมื่อผู้เข้าร่วมคนหนึ่งในโฮสต์การเชื่อมต่อคือ bsdi และอีกโฮสต์หนึ่งคือ vangogh.cs.berkeley.edu เศษระหว่างพวกเขาคือช่อง SLIP พร้อมการเรียกเลขหมาย ชั่วโมงของการเลี้ยวอาจมีขนาดใหญ่ (หลายร้อยมิลลิวินาที) ซึ่งช่วยให้ SYN สามารถพลิกกลับได้

ปลายด้านหนึ่ง (bsdi) กำหนดพอร์ตภายในเครื่อง 8888 (ตัวเลือกบรรทัดคำสั่ง -b) จากนั้นเขียนไปยังพอร์ต 7777 ของโฮสต์อื่นอย่างแข็งขัน:

bsdi% ถุงเท้า-v-b8888 vangogh.cs.berkeley.edu 7777
เชื่อมต่อกับ 140.252.13.35.8888 ถึง 128.32.130.2.7777
TCP_MAXSEG=512
สวัสดีชาวโลกเข้าทั้งแถว
และสวัสดี
การเชื่อมต่อถูกปิดโดยเพียร์

จุดสิ้นสุดสุดท้ายของการเริ่มต้นในชั่วโมงเดียวกัน โดยรับทราบหมายเลขพอร์ตท้องถิ่นของคุณ 7777 และเริ่มติดต่อกับพอร์ต 8888 อย่างแข็งขัน:

แวนโก๊ะ% ถุงเท้า -v -b7777 bsdi.tuc.noao.edu 8888
เชื่อมต่อกับ 128.32.130.2.7777 ถึง 140.252.13.35.8888
TCP_MAXSEG=512
สวัสดี โลกถูกนำเสนอในประเทศอื่น
และที่นั่นเราทำร้ายกันทั้งแถว
^จากนั้นป้อนอักขระสิ้นสุดสำหรับไฟล์ EOF

เราได้ระบุบรรทัดคำสั่ง -v ของโปรแกรม sock เพื่อตรวจสอบที่อยู่ IP และหมายเลขพอร์ตสำหรับผิวสัมผัส ฟันธงนี้ยังเป็นอีกหนึ่ง MSS ซึ่งได้รับชัยชนะในด้านวิทยาศาสตร์ผิวหนัง นอกจากนี้เรายังดุวิธีการแนะนำทีละแถวบนผิวหนังkіntsiวิธีที่พวกเขาbіdpravlenіบนkіnetsที่ไกลที่สุดและnarukovanіที่นั่นร้องไห้เพื่อ perekonatisya ที่ดูถูกเจ้าภาพ "แกว่ง" หนึ่งในหนึ่ง

บนทารก 18.18 ข้อบ่งชี้ของการแลกเปลี่ยนเซ็กเมนต์สำหรับครึ่งหนึ่งของครึ่ง (เราได้เห็นตัวเลือก TCP ใหม่บางอย่างที่ปรากฏในวันหยุดสุดสัปดาห์ของ SYN ซึ่งมีมาใน vangogh ตามกฎสำหรับ 4.4BSD เราจะอธิบายตัวเลือกใหม่ในการกระจายของการกระจาย SYN) 2) สอง SYN ตามด้วย ACKs (แถวที่ 3 และ 4) ที่เห็นครั้งละหนึ่งชั่วโมง

แถวที่ 5 แสดงการแนะนำแถว "สวัสดีชาวโลก" ซึ่งเริ่มจาก bsdi ถึง vangogh ยืนยันแถวที่ 6 แถวที่ 7 และ 8 ตามหลังแถว "และสวัสดี" ซึ่งไปในทิศทางอื่น ในแถวที่ 9-12 แสดงการปิดของวัน

การใช้งาน Berkeley ส่วนใหญ่ไม่ถูกต้องในชั่วข้ามคืน ในระบบเหล่านี้ แม้ว่าคุณจะไปถึงจุดที่เปลี่ยน SYN ได้ ทุกอย่างจะจบลงด้วยการแลกเปลี่ยนเซ็กเมนต์ สกินกับ SYN และ ACK ทั้งสองทิศทาง การใช้งานส่วนใหญ่กำลังวางแผนที่จะเปลี่ยนจาก SYN_SENT เป็น SYN_RCVD คำให้การ 18.12

1 0.0 bsdi.8888 > vangogh.7777: S 91904001:91904001(0)
ชนะ 4096
2 0.213782 (0.2138) vangogh.7777 > bsdi.8888: S 1058199041:1058199041(0)
ชนะ 8192
3 0.215399 (0.0016) bsdi.8888 > vangogh.7777: S 91904001:91904001(0)
ack 1058199042 ชนะ 4096

4 0.340405 (0.1250) vangogh.7777 > bsdi.8888: S 1058199041:1058199041(0)
ack 91904002 ชนะ 8192

5 5.633142 (5.2927) bsdi.8888 > vangogh.7777: P 1:14 (13) ack 1 ชนะ 4096
6 6.100366 (0.4672) vangogh.7777 > bsdi.8888: เพิ่มบันทึก แก้ไขบันทึก | แอค 14 ชนะ 8192

7 9.640214 (3.5398) vangogh.7777 > bsdi.8888: P 1:14 (13) ack 14 ชนะ 8192
8 9.796417 (0.1562) bsdi.8888 > vangogh.7777: เพิ่มบันทึก แก้ไขบันทึก | แอค 14 ชนะ 4096

9 13.060395 (3.2640) vangogh.7777 > bsdi.8888: F 14:14 (0) ack 14 ชนะ 8192
10 13.061828 (0.0014) bsdi.8888 > vangogh.7777: เพิ่มบันทึก แก้ไขบันทึก | แอค 15 ชนะ 4096
11 13.079769 (0.0179) bsdi.8888 > vangogh.7777: F 14:14 (0) ชนะ 15 ชนะ 4096
12 13.299940 (0.2202) vangogh.7777 > bsdi.8888: เพิ่มบันทึก แก้ไขบันทึก | แอค 15 ชนะ 8192

รูปที่ 18.18 การแลกเปลี่ยนเซกเมนต์สำหรับการปลุกหนึ่งชั่วโมง

ปิดค้างคืน

ดังที่เราได้กล่าวไว้ก่อนหน้านี้ จากด้านหนึ่ง (บ่อยครั้ง หากไม่เริ่มจากด้านของลูกค้า) มีการปิดที่ใช้งานอยู่ ซึ่ง FIN แรกถูกบังคับ นอกจากนี้ยังเป็นไปได้ที่ทั้งสองฝ่ายจะปิดอย่างแข็งขัน แต่โปรโตคอล TCP อนุญาตให้ปิดพร้อมกันได้

ในเงื่อนไข ชี้ไปที่ตัวเล็กในวันที่ 18.12 การสิ้นสุดของฝ่ายรุกจะเปลี่ยนจาก ESTABLISHED เป็น FIN_WAIT_1 หากโปรแกรมเห็นสัญญาณก่อนปิด หากคุณรู้สึกถูกดูถูก ส่ง FIN หากคุณโกรธได้ที่ชายแดน หากยอมรับ FIN ACK สุดท้ายจะถูกวางทับบนด้านสกิน FIN_WAIT_1 และเพิ่ม ACK สุดท้ายจากด้านสกิน หากสกินลงท้ายด้วย ACK สุดท้าย มันจะเปลี่ยนเป็น TIME_WAIT บนตัวเล็ก 18.19 แสดงการเปลี่ยนแปลงของstanіv

รูปที่ 18.19 การแลกเปลี่ยนเซกเมนต์ในกระบวนการปิดหนึ่งชั่วโมง

ในกรณีที่ปิดทำการหนึ่งชั่วโมง จะมีการคิดค่าธรรมเนียมการแลกเปลี่ยนจำนวนแพ็คเกจดังกล่าว เช่นในกรณีของการปิดที่มีนัยสำคัญ

ส่วนหัว TCP สามารถแทนที่ได้ด้วยตัวเลือก () ตัวเลือกเดียวที่กำหนดไว้ในข้อมูลจำเพาะ TCP ดั้งเดิมคือ: รายการตัวเลือกสิ้นสุด ไม่มีการดำเนินการ และขนาดเซกเมนต์สูงสุด เราได้รวมตัวเลือก MSS ไว้ในสต็อกของเรา ซึ่งใช้งานได้จริงในกลุ่ม dermal SYN

RFC ใหม่เพิ่มเติม เช่น RFC 1323 ตัวเลือกเพิ่มเติม TCP ซึ่งส่วนใหญ่อาจเห็นได้ในการใช้งานในภายหลัง (เราจะอธิบายตัวเลือกใหม่ใน .) ตามตัวบ่งชี้ 18.20 รูปแบบตัวเลือกการสตรีม TCP เป็นแบบเงียบ ตามที่อธิบายไว้ใน RFC 793 และ RFC 1323

รูปที่ 18.20 ตัวเลือก TCP

ตัวเลือกสกินขึ้นอยู่กับประเภท 1 ไบต์ (ชนิด) ซึ่งระบุประเภทของตัวเลือก ตัวเลือกประเภท 0 และ 1 ใช้ 1 ไบต์ ตัวเลือกอื่นๆ อนุญาตให้สอง (len) ไบต์ตามประเภทไบต์ Dovzhina - tse povna dovzhina ซึ่งรวมถึงไบต์เช่น dovzhina

มีการเพิ่มตัวเลือก "ไม่มีการดำเนินการ" (NOP) เพื่อให้ผู้ปฏิบัติงานสามารถจัดเก็บฟิลด์ได้ทันที ซึ่งอาจเป็นผลคูณของ 4 ไบต์ หากเราติดตั้ง TCP ในระบบ 4.4BSD สามารถใช้ตัวเลือกต่อไปนี้สำหรับเซ็กเมนต์ SYN cob โดยใช้ tcpdump:

ตัวเลือก MSS ถูกตั้งค่าเป็น 512 ตามด้วย NOP ตามด้วยตัวเลือกปรับขนาดหน้าต่าง ตัวเลือก NOP แรกถูกเปลี่ยนเพื่อเพิ่มตัวเลือก 3 ไบต์เพื่อขยายหน้าต่างเป็น 4 ไบต์ ดังนั้น ตัวเลือกการประทับเวลา 10 ไบต์จึงนำหน้าด้วย NOP สองตัว ดังนั้นจึงใช้ 12 ไบต์

ตัวเลือกอื่นๆ เช่น ประเภท 4, 5, 6 และ 7 เรียกว่าตัวเลือก ACK แบบเลือกและตัวเลือกดวงจันทร์ เราไม่ได้แสดงใน 18.20 เล็กน้อย ดังนั้นตัวเลือกในการแทนที่ตัวเลือกการประทับเวลาและ ACK แบบเลือก ณ ตอนนี้ ยังคงมีการพูดคุยและไม่รวมอยู่ใน RFC 1323 คุณต้องระบุว่าข้อเสนอ T/TCP สำหรับธุรกรรม TCP (มาตรา 24) ระบุสามตัวเลือกด้วยประเภทเท่ากับ 11, 12 และ 13

การใช้งานเซิร์ฟเวอร์ TCP

ที่สาขาของบทที่ 1 พวกเขากล่าวว่าเซิร์ฟเวอร์ TCP ส่วนใหญ่สามารถแข่งขันได้ หากเซิร์ฟเวอร์ได้รับคำขอเกี่ยวกับการติดตั้งไคลเอ็นต์ใหม่ เซิร์ฟเวอร์จะยอมรับคำขอและเริ่มกระบวนการใหม่ซึ่งให้บริการไคลเอ็นต์ใหม่ ความผิดพลาดในระบบปฏิบัติการ วิธีทางที่แตกต่างการสร้างเซิร์ฟเวอร์ใหม่ บนระบบ Unix กระบวนการใหม่จะถูกสร้างขึ้นด้วยฟังก์ชัน fork เพิ่มเติม

เราจำเป็นต้องหารือว่า TCP โต้ตอบกับเซิร์ฟเวอร์คู่แข่งอย่างไร ฉันต้องการรับคำขอในคำขอถัดไป: จะรับหมายเลขพอร์ตได้อย่างไร หากเซิร์ฟเวอร์ยกเลิกคำขอในการเชื่อมต่อใหม่จากไคลเอ็นต์ และจะเกิดอะไรขึ้นหากคำขอจำนวนเล็กน้อยมาถึงคำขอพร้อมกัน

หมายเลขพอร์ตเซิร์ฟเวอร์ TCP

เราสามารถบอกได้ว่า TCP จัดการกับหมายเลขพอร์ตอย่างไรโดยดูว่าเซิร์ฟเวอร์ TCP คืออะไร มาดูเซิร์ฟเวอร์ Telnet ด้วยความช่วยเหลือของคำสั่ง netstat การโจมตีถูกตั้งค่าไว้สำหรับระบบ เพื่อให้ไม่มีการโทร Telnet ที่ใช้งานอยู่ (เราได้เห็นแถวทั้งหมดหลังแถวเดียว ซึ่งแสดงเซิร์ฟเวอร์ Telnet)

ดวงอาทิตย์ % netstat -a -n -f inet
การเชื่อมต่ออินเทอร์เน็ตที่ใช้งานอยู่ (รวมถึงเซิร์ฟเวอร์)
Proto Recv-Q Send-Q ที่อยู่ในท้องถิ่น ที่อยู่ต่างประเทศ (รัฐ)
tcp 0 0 *.23 *.* ฟัง

Prapor -a บอกเกี่ยวกับจุดสิ้นสุดของพรมแดนทั้งหมด และไม่ใช่เฉพาะจุดที่พบในค่าย (ESTABLISHED) Ensign -n ที่อยู่ IP อื่นในหลักที่สิบ เปลี่ยนเพื่อเปลี่ยน DNS เพื่อแปลงที่อยู่เป็นชื่อ และหมายเลขพอร์ตที่เป็นตัวเลขอื่นๆ (เช่น 23) เปลี่ยนชื่อบริการอื่นๆ (ในโหมด Telnet นี้) ตัวเลือก -finet จะบอกเพิ่มเติมเกี่ยวกับ TCP และ UDP endpoints

ที่อยู่ในระบบจะแสดงเป็น *.23 ซึ่งเรียกว่าอักขระตัวแทนหรืออักขระเมตา ซึ่งหมายความว่าคำขออินพุต (SYN) จะได้รับการยอมรับจากอินเทอร์เฟซภายในเครื่อง หากโฮสต์มีหลายอินเทอร์เฟซ เราสามารถระบุที่อยู่ IP เฉพาะหนึ่งรายการเป็นที่อยู่ IP ภายใน (หนึ่งรายการสำหรับที่อยู่ IP ของโฮสต์) และคำขอที่ส่งไปยังโฮสต์ที่ได้รับจากอินเทอร์เฟซนั้นเท่านั้นที่จะให้บริการ (เราต้องการทำงานล่าช้าในการจัดจำหน่ายของเรา) พอร์ตท้องถิ่นคือ 23 แต่พอร์ตสำหรับ Telnet ล้าหลังกว่ามาก

ที่อยู่ระยะไกลจะแสดงเป็น *.* ซึ่งหมายความว่าที่อยู่ IP อยู่ห่างออกไป หมายเลขระยะไกลยังไม่สามารถมองเห็นพอร์ตได้ดังนั้นจุดสุดท้ายจึงอยู่ในสถานี LISTEN, ochіkuyuchi pributtya zap บน z'ednannya

ในเวลาเดียวกัน เราเริ่มไคลเอนต์ Telnet บนโฮสต์สลิป (140.252.13.65) ซึ่งจะมาที่เซิร์ฟเวอร์ นี่คือแถวที่มองเห็นได้ของคำสั่ง netstat:


tcp 0 0 140.252.13.33.23 140.252.13.65.1029 ก่อตั้ง
tcp 0 0 *.23 *.* ฟัง

แถวแรกสำหรับพอร์ต 23 ถูกสร้างขึ้นแล้ว สำหรับการเชื่อมต่อนี้ องค์ประกอบทั้งหมดของที่อยู่โลคัลและรีโมตจะถูกเก็บไว้: ที่อยู่ IP ในเครื่องและหมายเลขพอร์ต ที่อยู่ IP ระยะไกลและหมายเลขพอร์ต ที่อยู่ IP ในเครื่องจะถูกส่งไปยังอินเทอร์เฟซซึ่งมีการร้องขอการโทร (อินเทอร์เฟซ Ethernet, 140.252.13.33)

จุดสิ้นสุดหายไปที่สถานี LISTEN นี่คือจุดสิ้นสุด เมื่อเซิร์ฟเวอร์ที่แข่งขันกันชนะเพื่อที่จะยอมรับคำขอสำหรับการประชุม เพื่อให้คุณมาถึงอนาคตได้ ในกรณีนี้ โมดูล TCP ซึ่งอยู่ในแกนกลางได้สร้างจุดสิ้นสุดใหม่ในสถานี ESTABLISHED ในขณะที่มีการร้องขอการมาถึงและการยอมรับ ดังนั้น ให้ความเคารพผู้ที่มีหมายเลขพอร์ตสำหรับการเชื่อมต่อ เนื่องจากพวกเขาอยู่ในสถานี ESTABLISHED โดยไม่มีการเปลี่ยนแปลง: vin dor_vnyu 23 สำหรับจุดสิ้นสุด เนื่องจากพวกเขาอยู่ในสถานี LISTEN

ในเวลาเดียวกัน เราเริ่มไคลเอ็นต์ Telnet อีกหนึ่งตัวจากไคลเอนต์เดียวกัน (สลิป) ไปยังเซิร์ฟเวอร์ทั้งหมด ผลลัพธ์ของคำสั่ง netstat จะมีลักษณะดังนี้:

Proto Recv-Q Send-Q ที่อยู่ในท้องถิ่น ที่อยู่ต่างประเทศ (รัฐ)
tcp 0 0 140.252.13.33.23 140.252.13.65.1030 ก่อตั้ง
tcp 0 0 140.252.13.33.23 140.252.13.65.1029 ก่อตั้ง
tcp 0 0 *.23 *.* ฟัง

ในเวลาเดียวกัน เราสามารถมีการเชื่อมต่อ ESTBLISHED สองครั้งจากโฮสต์เดียวกันไปยังเซิร์ฟเวอร์เดียวกัน ไม่พอใจกับหมายเลขพอร์ตในเครื่องซึ่งเป็น 23 ไม่ใช่ปัญหาสำหรับ TCP เนื่องจากจำนวนพอร์ตระยะไกลแตกต่างกัน ในทางกลับกัน เนื่องจากไคลเอนต์ Telnet ชนะพอร์ตซึ่งถูกกำหนดแบบไดนามิก และการกำหนดนั้นถูกกำหนดแบบไดนามิกให้กับพอร์ต เรารู้ว่าเราสามารถกำหนดแบบไดนามิกเฉพาะพอร์ตที่ไม่ขยิบตาในช่วงเวลาที่กำหนดบนโฮสต์ (ลื่น).

ตัวอย่างนี้แสดงวิธีการที่ TCP demultiplexes ส่วนอินพุตที่มีค่าต่างกัน ซึ่งเท่ากับที่อยู่โลคัลและรีโมต: ที่อยู่ IP ปลายทาง หมายเลขพอร์ตปลายทาง ที่อยู่ IP gerel และหมายเลขพอร์ต gerel TCP ไม่สามารถบอกได้ว่ากระบวนการใดใช้ส่วนอินพุตโดยดูที่หมายเลขพอร์ตที่รู้จัก นอกจากนี้ จุดเชื่อมต่อเพียงหนึ่งในสามจุดบนพอร์ต 23 ซึ่งอยู่ในสถานี LISTEN เท่านั้นที่ยอมรับคำขออินพุตไปยังการโทร จุดสิ้นสุดซึ่งอยู่ที่สถานี ESTABLISHED ไม่สามารถรับเซ็กเมนต์ SYN และจุดสิ้นสุดซึ่งอยู่ที่สถานี LISTEN ไม่สามารถรับเซ็กเมนต์ข้อมูลได้

ในเวลาเดียวกัน เราเริ่มไคลเอนต์ Telnet อีกหนึ่งรายการจากโฮสต์ Solaris ซึ่งผ่านช่อง SLIP จากดวงอาทิตย์ ไม่ใช่ผ่านอีเทอร์เน็ต

Proto Recv-Q Send-Q ที่อยู่ในท้องถิ่น ที่อยู่ต่างประเทศ (รัฐ)
tcp 0 0 140.252.1.29.23 140.252.1.32.34603 ก่อตั้ง
tcp 0 0 140.252.13.33.23 140.252.13.65.1030 ก่อตั้ง
tcp 0 0 140.252.13.33.23 140.252.13.65.1029 ก่อตั้ง
tcp 0 0 *.23 *.* ฟัง

ที่อยู่ IP ในเครื่องสำหรับที่อยู่ที่ติดตั้งครั้งแรก (ESTABLISHED) ถูกกำหนดให้กับที่อยู่อินเทอร์เฟซช่องทาง SLIP บนซันโฮสต์อินเทอร์เฟซแบบสมบูรณ์ (140.252.1.29)

แลกเปลี่ยนที่อยู่ IP ในเครื่อง

เราสงสัยว่าจะเกิดอะไรขึ้นหากเซิร์ฟเวอร์ไม่ใช้ไวด์การ์ดเป็นที่อยู่ IP ในเครื่อง โดยตั้งค่าที่อยู่อินเทอร์เฟซเฉพาะหนึ่งที่อยู่ เราจะระบุที่อยู่ IP (หรือชื่อโฮสต์) ของโปรแกรมถุงเท้าของเราได้อย่างไร หากคุณชนะในฐานะเซิร์ฟเวอร์ ที่อยู่ IP นั้นจะกลายเป็นที่อยู่ IP ในเครื่องของเครื่องปลายทางที่คุณได้ยิน ตัวอย่างเช่น

ดวงอาทิตย์ % ถุงเท้า 140.252.1.29 8888

เซิร์ฟเวอร์ระดับกลางสำหรับการโทรที่มาจากอินเทอร์เฟซ SLIP (140.252.1.29) เท่านั้น winnowok ของคำสั่ง netstat เป็นขั้นสูงกว่า:

Proto Recv-Q Send-Q ที่อยู่ในท้องถิ่น ที่อยู่ต่างประเทศ (รัฐ)

เราจะไปที่เซิร์ฟเวอร์นี้ผ่านช่อง SLIP จากโฮสต์ของ Solaris ได้อย่างไร ไปเลย

Proto Recv-Q Send-Q ที่อยู่ในท้องถิ่น ที่อยู่ต่างประเทศ (รัฐ)
tcp 0 0 140.252.1.29.8888 140.252.1.32.34614 ก่อตั้ง
tcp 0 0 140.252.1.29.8888 *.* ฟัง

อย่างไรก็ตาม หากคุณพยายามเข้าถึงเซิร์ฟเวอร์นั้นจากโฮสต์ผ่านอีเทอร์เน็ต (140.252.13) โมดูล TCP จะไม่รับคำขอไปยังเซิร์ฟเวอร์ หากเราประหลาดใจกับความช่วยเหลือของ tcpdump ดูเหมือนว่าเอาต์พุต RST จะถูกลบออกจาก SYN ดังที่แสดงใน 18.21 เล็กน้อย

1 0.0 bsdi.1026 > sun.8888: S 3657920001:3657920001(0)
ชนะ 4096
2 0.000859 (0.0009) sun.8888 > bsdi.1026: R 0:0 (0) ack 3657920002 ชนะ 0

รูปที่ 18.21 การแบ่งปันพลังงานบนเครือข่ายตามที่อยู่ IP ภายในเครื่องของเซิร์ฟเวอร์

โปรแกรมที่ทำงานบนเซิร์ฟเวอร์จะไม่ขอการเชื่อมต่อ - การแลกเปลี่ยนจะดำเนินการโดยโมดูล TCP ในเคอร์เนลตามที่อยู่ IP ในเครื่องที่กำหนดโดยภาคผนวก

แลกเปลี่ยนที่อยู่ IP ระยะไกล

ในบทที่ 11 เราพบว่าเซิร์ฟเวอร์ UDP สามารถกำหนดที่อยู่ IP ระยะไกลและหมายเลขพอร์ต นอกเหนือจากการระบุที่อยู่ IP ในเครื่องและหมายเลขพอร์ต ฟังก์ชันอินเทอร์เฟซที่แนะนำใน RFC 793 ช่วยให้เซิร์ฟเวอร์ตั้งค่าลายเซ็นแบบพาสซีฟตามซ็อกเก็ตระยะไกลที่อธิบายไว้อย่างครบถ้วน (ซึ่งควรล้างซ็อกเก็ตด้วยวิธีใดบนลายเซ็นที่ใช้งานอยู่ของไคลเอ็นต์เฉพาะ) หรือซ็อกเก็ตระยะไกลที่ไม่ได้กำหนด ( z'ednannya เป็นลูกค้ารายใด)

น่าเสียดายที่ API ส่วนใหญ่ไม่มีความสามารถดังกล่าว เซิร์ฟเวอร์มีความผิดในการปล่อยให้ซ็อกเก็ตไม่ระบุ ตรวจสอบการเชื่อมต่อ แล้วย้อนกลับที่อยู่ IP และหมายเลขพอร์ตของไคลเอ็นต์

รูปที่ 18.22 แสดงที่อยู่สามประเภทและที่อยู่เชื่อมโยงระหว่างกันกับพอร์ตที่คุณสามารถตั้งค่าเซิร์ฟเวอร์ TCP ด้วยตัวคุณเอง สำหรับตัวเลือก lport ทั้งหมด พอร์ตเซิร์ฟเวอร์จะถูกส่งต่อ และ localIP จะรับผิดชอบที่อยู่ IP ของอินเทอร์เฟซภายใน ลำดับที่เรียงแถวสามแถวในตาราง จะแสดงลำดับที่โมดูล TCP ถูกกำหนดให้เป็นตำแหน่งปลายทางแบบโลคัลของการรับคำขออินพุตไปยังอินพุต แถวแรกของตารางจะได้รับการทดสอบก่อน จากนั้นจึงทดสอบคุณสมบัติอื่นๆ (แถวที่เหลือซึ่งมีที่อยู่ IP ที่กำหนดให้กับสัญลักษณ์การแทนที่) ที่เหลือจะลองใช้ข้อมูลจำเพาะอื่นๆ

รูปที่ 18.22 ระบุที่อยู่ IP ภายในและระยะไกลและหมายเลขพอร์ตสำหรับเซิร์ฟเวอร์ TCP

ค่าแรกเข้าบิล

เซิร์ฟเวอร์คู่แข่งกำลังเปิดตัวกระบวนการใหม่ที่ให้บริการสกินไคลเอนต์ ซึ่งเซิร์ฟเวอร์นั้นได้ยินว่ามีความผิด แต่พร้อมเสมอที่จะดำเนินการตามคำขออินพุตสำหรับคำสั่งซื้อ นี่คือเหตุผลหลักที่ทำให้เซิร์ฟเวอร์ที่แข่งขันกันได้รับชัยชนะ อย่างไรก็ตาม เป็นที่ชัดเจนว่าคำขอจะมาถึงเองในขณะนั้น หากเซิร์ฟเวอร์ซึ่งกำลังรับฟัง กำลังสร้างกระบวนการใหม่ หรือหากระบบปฏิบัติการไม่ว่างในการประมวลผลกระบวนการอื่นที่มีลำดับความสำคัญสูงกว่า TCP ประมวลผลอินพุตไปยังการโทรอย่างไรในขณะที่โปรแกรมการฟังไม่ว่าง

การใช้งาน Berkeley เป็นไปตามกฎเหล่านี้

  1. ตามที่ฉันได้ยินจุดสิ้นสุดของสกินสามารถแก้ไขวันที่สุดท้ายของวันเพื่อให้ TCP ยอมรับได้ ("การจับมือสามครั้ง" เสร็จสิ้น) แต่ยังไม่ได้รับการยอมรับจากภาคผนวก ให้ความเคารพเมื่อทำความแตกต่างระหว่างการรับบิล TCP และการเล่นโยคะในเมือง โปรแกรมนั้นจะรับบิลจากบิล
  2. โปรแกรมแสดงเส้นขอบหรือขอบเขตสำหรับราคาของ cherga ตามที่ฟังเรียกว่างานในมือ จำนวนการแทนที่สามารถอยู่ในช่วง 0 ถึง 5 (การเพิ่มเติมเพิ่มเติมจะระบุค่าสูงสุดที่ 5)
  3. หากมีการร้องขอการโทร (ส่วน SYN) TCP จะดูที่อัตราการไหลของการโทรที่ตั้งไว้ ช่วงเวลาปัจจุบันคุณ chergu สำหรับจุดtsієї kontsevoї, scho การได้ยิน, ซึ่ง vin z'yasovuє, ไคสามารถรับ zadnannya ได้ เราทราบว่าค่าของงานในมือที่ระบุโดยโปรแกรมจะเป็นค่าสูงสุด ดังนั้นจึงอนุญาตให้ใส่จำนวนวันสูงสุดสำหรับจุดเป้าหมายในบรรทัดได้ แม้ว่าจะไม่ง่ายนัก รูปที่ 18.23 แสดงค่าร่วมกันของงานในมือและจำนวนวันสูงสุดจริงที่สามารถใส่ไว้ในงานในมือในระบบ Berkeley แบบดั้งเดิมและ Solaris 2.2

    ค่างานในมือ

    จำนวนสูงสุดของ z'ednan ใส่สีดำ

    BSD แบบดั้งเดิม

    รูปที่ 18.23 จำนวนสายที่ได้รับสูงสุดสำหรับจุดสิ้นสุดที่สามารถได้ยิน

    โปรดทราบว่าค่าของงานในมือจะระบุเฉพาะจำนวนวันสูงสุด บรรทัดสำหรับจุดสิ้นสุดหนึ่งจุดที่คุณได้ยิน ซึ่ง TCP ยอมรับทั้งหมดแล้ว และชี้ให้เห็นว่าส่วนเพิ่มเติมได้รับการยอมรับ ค่าของงานในมือไม่คาดว่าจะนำไปสู่จำนวนวันสูงสุดที่ระบบสามารถติดตั้งได้ หรือจำนวนไคลเอนต์ที่สามารถให้บริการเซิร์ฟเวอร์คู่แข่งได้

    ความสำคัญสำหรับ Solaris ในตัวเดียวกันเนื่องจากเรามีochіkuval ค่า BSD แบบดั้งเดิม (ด้วยเหตุผลบางอย่างที่ไม่สมเหตุสมผล) คือการส่งคืนค่างานในมือคูณด้วย 3 หารด้วย 2 บวก 1

  4. ในกรณีที่จุดสิ้นสุดการฟังนี้เป็นเวลาสำหรับการเชื่อมต่อใหม่ (Div. Baby 18.23) โมดูล TCP รับทราบ (ACK) SYN ที่มาถึงแล้ว และติดตั้งเสียง โปรแกรมเซิร์ฟเวอร์ที่มีจุดสิ้นสุดการได้ยินจะไม่ส่งคำสั่งใหม่นี้ไปยัง doty ส่วนที่สามของ "การจับมือสามครั้ง" จะไม่ได้รับการยอมรับจากท่าเทียบเรือ นอกจากนี้ ไคลเอนต์ยังสามารถระบุได้ว่าเซิร์ฟเวอร์พร้อมที่จะรับข้อมูล หากคำขอที่ใช้งานอยู่ของลูกค้าเสร็จสมบูรณ์ โปรแกรมเซิร์ฟเวอร์ถัดไปจะได้รับแจ้งเกี่ยวกับการเชื่อมต่อใหม่ (ตามความเป็นจริง เซิร์ฟเวอร์ TCP สามารถใส่ในกล่องข้อมูลอินพุตได้)
  5. เนื่องจากไม่มีเวลาใส่นาฬิกาใหม่ TCP จึงละเว้นการยอมรับ SYN ไม่มีการพยายามที่อินพุต (ไม่ได้พยายามนำทางเซ็กเมนต์ RST) ตามที่คุณได้ยิน หากเซิร์ฟเวอร์ไม่ตอบสนองต่อการรับคำสั่งที่ยอมรับแล้ว หากเซิร์ฟเวอร์ได้เติมเต็มจนเกินขอบเขต การตอบสนองที่ใช้งานอยู่ของลูกค้าจะถูกขัดจังหวะด้วยการหมดเวลา

เราตรวจสอบสคริปต์นี้เพื่อขอความช่วยเหลือเกี่ยวกับโปรแกรมถุงเท้าได้ เริ่มต้นด้วยตัวเลือกใหม่ (-O) ราวกับว่าจะเตือนคุณเกี่ยวกับความจำเป็นในการหยุดชั่วคราวหลังจากการปิดจุดสิ้นสุดตามที่คุณได้ยิน ก่อนที่จะตอบรับคำขอใดๆ สำหรับการประชุม ทันทีที่เราเริ่มรันไคลเอนต์ด้วยการหยุดชั่วคราว เซิร์ฟเวอร์จะลำบากใจที่จะรับสาย และสิ่งที่เกิดขึ้น เราจะใช้คำสั่ง tcpdump เพื่อเปลี่ยนแปลง

bsdi% ถุงเท้า-s-v-q1-O30 5555

อ็อพชัน -q1 ตั้งค่า backlog ของจุดสิ้นสุดการรับฟังเป็นค่า 1 สำหรับระบบ BSD แบบดั้งเดิม จะใช้ได้สำหรับสองอินพุตต่อหาง (รูปที่ 18.23) ตัวเลือก -O30 ปิดใช้งานโปรแกรม "สลีป" 30 วินาทีก่อนที่จะรับสายไคลเอ็นต์ใดๆ Tse ให้เวลาเรา 30 วินาทีในการเริ่มการหมุนของลูกค้า เพื่อดำเนินการให้เสร็จสิ้น เราเริ่มต้นลูกค้าสี่รายที่ Sun Sun

ในการอ่าน 18.24 เล็กน้อยของโปรแกรม tcpdump ซึ่งเริ่มจาก SYN แรกของไคลเอนต์แรก (เราเห็นข้อความเสียงและข้อความเสียง MSS นอกจากนี้ เรายังเห็นหมายเลขพอร์ตไคลเอนต์เป็นตัวหนา หาก TCP ได้รับการกู้คืน - "การจับมือกันสามครั้ง")

คำขอแรกสำหรับประเภทไคลเอ็นต์ที่มาจากพอร์ต 1090 ได้รับโดยโมดูล TCP (ส่วน 1-3) คำขออื่นสำหรับไคลเอนต์บนพอร์ต 1091 ยังได้รับการยอมรับโดยโมดูล TCP (ส่วน 4-6) โปรแกรมเซิร์ฟเวอร์ยังคง "หลับ" และยังไม่ยอมรับการปลุกที่ต้องการ viconan ทั้งหมดถูกนำมาใช้โดยโมดูล TCP ในเคอร์เนล นอกจากนี้ยังจำเป็นต้องแสดงว่าลูกค้าสองรายได้ดำเนินการรับทราบเรียบร้อยแล้วว่า "การเขียนด้วยลายมือสามครั้ง" เสร็จสมบูรณ์แล้ว

10.0 อาทิตย์ 1090 >bsdi.7777:S1617152000:1617152000(0)
2 0.002310 (0.0023) bsdi.7777 > ดวงอาทิตย์ 1090 : S4164096001:4164096001(0)
30.003098 (0.0008) อาทิตย์ 1090 > bsdi.7777: . ack1617152001
แอค 1
4 4.291007 (4.2879) อาทิตย์ 1091 >bsdi.7777:S1617792000:1617792000(0)
5 4.293349 (0.0023) bsdi.7777 > ดวงอาทิตย์ 1091 : S4164672001:4164672001(0)
ack1617792001
6 4.294167 (0.0008) อาทิตย์ 1091 > bsdi.7777: . แอค 1
7 7.131981 (2.8378) อาทิตย์.1092 >
8 10.556787 (3.4248) อาทิตย์ 1093 > bsdi.7777: S 1618688000:1618688000(0)
9 12.695916 (2.1391) sun.1092 > bsdi.7777: S 1618176000:1618176000(0)
10 16.195772 (3.4999) อาทิตย์1093 >
11 24.695571 (8.4998) อาทิตย์ 1092 > bsdi.7777: S 1618176000:1618176000(0)
12 28.195454 (3.4999) อาทิตย์ 1093 >bsdi.7777:S1618688000:1618688000(0)
13 28.197810 (0.0024) bsdi.7777 > ดวงอาทิตย์ 1093 : S4167808001:4167808001(0)
14 28.198639 (0.0008) อาทิตย์ 1093 > bsdi.7777: . ack1618688001
แอค 1
15 48.694931 (20.4963) อาทิตย์ 1092 >bsdi.7777:S1618176000:1618176000(0)
16 48.697292 (0.0024) bsdi.7777 > อาทิตย์ 1092 : S4170496001:4170496001(0)
ack1618176001
17 48.698145 (0.0009) อาทิตย์ 1092 > bsdi.7777: . แอค 1

รูปที่ 18.24 การดูโปรแกรม tcpdump สำหรับการดึงข้อมูลค้าง

เราพยายามเริ่มต้นไคลเอนต์ที่สามบนเซ็กเมนต์ 7 (พอร์ต 1092) และไคลเอนต์ที่สี่บนเซ็กเมนต์ 8 (พอร์ต 1093) TCP ละเว้นการดูถูก SYN ดังนั้นบรรทัดสำหรับจุดสุดท้ายเท่าที่ฉันได้ยินจึงถูกเติมเต็ม ไคลเอ็นต์ที่ละเมิดส่งสัญญาณ SYN ซ้ำในส่วนที่ 9, 10, 11, 12 และ 15 ยอมรับการส่งข้อมูลซ้ำครั้งที่สามของไคลเอ็นต์ที่สี่ (ส่วนที่ 12-14) ดังนั้นการหยุดชั่วคราว 30 วินาทีของเซิร์ฟเวอร์จึงสิ้นสุดลง และเซิร์ฟเวอร์เห็นว่ายอมรับสองครั้ง ได้ชำระมารแล้ว (สาเหตุที่เกิดขึ้นนั้นเกิดจากการที่เซิร์ฟเวอร์ตอบรับคำขอเมื่อเวลา 28.19 น. ไม่ใช่ในเวลาชั่วโมงซึ่งเกิน 30 น. มันเกิดขึ้นกับผู้ที่ต้องการ ไม่กี่วินาทีเพื่อเริ่มไคลเอนต์แรก [ส่วน 1 , ชั่วโมงเริ่มต้นที่เห็น] หลังจากเซิร์ฟเวอร์เริ่ม) การรับส่งข้อมูลซ้ำครั้งที่สี่ของไคลเอนต์ที่สามก็ยอมรับเช่นกัน (ส่วนที่ 15-17) เซิร์ฟเวอร์ยอมรับวันที่ของไคลเอ็นต์ที่สี่ (พอร์ต 1093) ก่อนวันที่ของไคลเอ็นต์ที่สาม (พอร์ต 1092) หลังจาก 30 วินาทีระหว่างสิ้นสุดการหยุดชั่วคราว 30 วินาทีและการส่งสัญญาณซ้ำของไคลเอ็นต์

เรามั่นใจได้ว่าจำนวนผู้ที่ได้รับการยอมรับจากครึ่งหนึ่งจะได้รับการอัปเกรดโดยโปรแกรมตามหลักการ FIFO (ชนะก่อน ชนะก่อน) ด้วยวิธีนี้ เนื่องจาก TCP ยอมรับภาคผนวกบนพอร์ต 1090 และ 1091 เราจึงพบว่าโปรแกรมกำลังเปลี่ยนกลับเป็นพอร์ต 1090 จากนั้นจึงเปลี่ยนกลับเป็นพอร์ต 1091 อย่างไรก็ตาม การใช้งาน Berkeley ส่วนใหญ่มีข้อบกพร่อง ซึ่งเป็นผลมาจากการที่ LIFO คำสั่งชนะ (ขึ้นก่อน ลงก่อน) Vyrobniki พยายามแก้ไขการให้อภัยหลายครั้ง โปรตีนถูกใช้ในระบบดังกล่าว เช่น SunOS 4.1.3

TCP ละเว้น SYN ที่เข้ามาหากบรรทัดเต็ม และไม่เป็นไปตามตัวแปร RST ผ่านการให้อภัย กรอกเสียงการโทร เนื่องจากโปรแกรมหรือระบบปฏิบัติการไม่ว่าง ดังนั้นโปรแกรมจึงไม่สามารถประมวลผลอินพุตได้ ค่ายดังกล่าวสามารถเปลี่ยนได้ในระยะเวลาอันสั้น อย่างไรก็ตาม หากเซิร์ฟเวอร์ TCP ถูกรีเซ็ต การเชื่อมต่อที่ใช้งานอยู่ของไคลเอ็นต์จะถูกขัดจังหวะ (เช่นเดิม หากเซิร์ฟเวอร์ไม่เริ่มทำงาน) ดังนั้นหาก SYN ถูกเพิกเฉย ไคลเอนต์ TCP จะลังเลที่จะส่งสัญญาณ SYN อีกครั้งในภายหลัง โดยสงสัยว่ามีที่ว่างสำหรับการเชื่อมต่อใหม่หรือไม่

ในที่นี้จำเป็นต้องหารือเกี่ยวกับรายละเอียดที่สำคัญอย่างหนึ่ง ซึ่งสามารถนำไปใช้ได้จริงกับการใช้งาน TCP/IP ทั้งหมด ชนะความจริงที่ว่า TCP ยอมรับคำขออินพุตสำหรับการเชื่อมต่อ (SYN) ในเวลาอื่นและในเวลาต่อมา ถ้าเป็นเช่นนั้น โปรแกรมจะไม่แปลกใจ ขึ้นอยู่กับว่าต้องถามใคร (ที่อยู่ IP ของ gerel และหมายเลขพอร์ตของ gerel) ไม่จำเป็นต้องใช้ TCP มันเป็นเทคนิคเสริมที่ชนะในการนำไปใช้ เช่นเดียวกับ API เช่น TLI (แยก 1) อนุญาตให้คุณเพิ่มภาคผนวกเกี่ยวกับคำขอในการเชื่อมต่อ และอนุญาตให้คุณหยุด ยอมรับคำขอ จากนั้นเมื่อคุณเปลี่ยน TCP ให้ป้อนในลักษณะที่หาก โปรแกรมเป็น pribulo จริงๆ TCP ได้เสร็จสิ้นการ "โบกมือสามครั้ง" แล้ว! ในช่องทางขนส่งอื่น ๆ สามารถแยกขาเข้าและรับเที่ยวบินได้ (ช่องทางขนส่ง OSI) TCP ไม่มีความสามารถดังกล่าว

Solaris 2.2 ให้ตัวเลือกที่จะไม่อนุญาตให้ TCP ยอมรับคำขอขาเข้าในการเชื่อมต่อ แต่ไม่อนุญาตให้โปรแกรมทำเช่นนั้น (tcp_eager_listeners ในการกระจายของโปรแกรม E)

ลักษณะการทำงานนี้ยังหมายความว่าเซิร์ฟเวอร์ TCP ไม่สามารถวางไข่ในลักษณะที่การโทรไคลเอ็นต์ที่ใช้งานอยู่จะถูกขัดจังหวะ หากเชื่อมต่อกับไคลเอนต์ใหม่ไปยังเซิร์ฟเวอร์ TCP "การจับมือกันสามทาง" จะเสร็จสมบูรณ์แล้ว และการโทรที่ใช้งานอยู่ของไคลเอ็นต์จะเสร็จสมบูรณ์ หากเซิร์ฟเวอร์ประหลาดใจกับที่อยู่ IP และหมายเลขพอร์ตของไคลเอ็นต์ และหากคุณไม่ต้องการให้บริการไคลเอ็นต์นั้น เซิร์ฟเวอร์ทั้งหมดสามารถปิดตั๋วได้ (เมื่อส่ง FIN) หรือทิ้งตั๋ว (หากส่ง RST) หากไคลเอนต์รู้สึกเช่นนั้น แสดงว่าทุกอย่างเรียบร้อยดีกับเซิร์ฟเวอร์ เศษชิ้นส่วนจบลงด้วยการตอบสนองที่แอ็คทีฟ และบางทีหลังจากส่งคำขอไปยังเซิร์ฟเวอร์แล้ว

visnovki สั้น

ก่อนหน้านั้น เนื่องจากสองกระบวนการสามารถแลกเปลี่ยนข้อมูลกับผู้ชนะ TCP ได้ จึงเป็นความรับผิดชอบของคุณที่จะต้องสร้างลำดับระหว่างตัวคุณเอง ถ้างานระหว่างนั้นเสร็จ ออเดอร์อาจขาด แผนกใดได้รับการตรวจสอบโดยละเอียด วิธีสร้างใบเสนอราคาสำหรับใบเสนอราคา "การตัดด้วยมือสามครั้ง" และวิธีการจัดเตรียมใบเสนอราคาของส่วน chotirioh

เราแฮ็ก tcpdump เพื่อแสดงฟิลด์ทั้งหมดในส่วนหัวของ TCP เรายังสงสัยด้วยว่าการโทรถูกตั้งค่าอย่างไร แต่อาจถูกขัดจังหวะด้วยการหมดเวลา สายหลุดได้อย่างไร จะเกิดอะไรขึ้นหลังจากปิดการโทร และ TCP เรียกการโทรเข้าสู่โหมดปิดได้อย่างไร การปิดเครื่องหนึ่งชั่วโมง และ ปิดหนึ่งชั่วโมง

เพื่อให้เข้าใจการทำงานของ TCP จำเป็นต้องดูไดอะแกรมการเปลี่ยนแปลงพื้นฐานของ TCP เราดูที่ประเด็นต่างๆ ว่าวันคืนสู่สภาพเดิมอย่างไร และเมื่อใดที่มีการเปลี่ยนแปลงในแคมป์ ดังนั้นเราจึงดูว่าเซิร์ฟเวอร์ TCP ตั้งค่าการโทร TCP อย่างไร

การเชื่อมต่อ TCP จะถูกระบุโดยพารามิเตอร์ 4 ตัว: ที่อยู่ IP ภายในเครื่อง หมายเลขพอร์ตภายใน ที่อยู่ IP ระยะไกล และหมายเลขพอร์ตระยะไกล เมื่อใดก็ตามที่เกิดการปิดเครื่อง ฝ่ายหนึ่งจะมีความผิดเหมือนกันทั้งหมดในการจดจำการปิดเครื่อง ซึ่งในกรณีนี้เราจะบอกว่าใช้โหมด TIME_WAIT กฎคือการบอกว่าฝ่ายนี้สามารถมีความกระตือรือร้นมากขึ้นโดยเข้าสู่ระบอบการปกครองทั้งหมดหลังจากผ่านชั่วโมง MSL แล้วการยอมรับเพื่อนำไปใช้

ขวา

  1. ตัวแทนจำหน่ายแจ้งว่าหมายเลขลำดับปัจจุบัน (ISN) ควรตั้งค่าเป็น 1 และเพิ่มขึ้น 64,000 สกิน pivsec และควรมีการใช้งานมากกว่านี้ Tse หมายความว่าตัวเลขสามหลักที่อายุน้อยที่สุดใน ISN จะเป็น 001 ตลอดไป อย่างไรก็ตาม สำหรับ 18.3 qi เพียงเล็กน้อย ตัวเลขสามหลักที่อายุน้อยที่สุดสำหรับผิวหนังจะบวกโดยตรงกับ 521 เกิดอะไรขึ้น
  2. เจ้าตัวเล็กเมื่อวันที่ 18.15 เราดุสัญลักษณ์ 12 ตัวแล้วต่อสู้ว่า TCP ส่ง 13 ไบต์ ตัวเล็กเมื่อวันที่ 18.16 เราใช้สัญลักษณ์ 8 ตัวในทางที่ผิด แต่ TCP ส่ง 10 ไบต์ เหตุใดจึงเพิ่ม 1 ไบต์ใน vipad แรกและ 2 ไบต์ไปยังอีกอันหนึ่ง
  3. ทำไมคุณต้องพูดว่าvіdminnіstmіzhnapіvvіdkritim z'ednannyam และnapіvzkritim zadnannyam?
  4. ทันทีที่เราเริ่มโปรแกรม sock เป็นเซิร์ฟเวอร์ จากนั้นเราจะขัดจังหวะหุ่นยนต์ (เมื่อไคลเอนต์เดิมไม่ได้เชื่อมต่อกับมัน) เราสามารถรีสตาร์ทเซิร์ฟเวอร์ได้โดยไม่ประมาท Tse หมายความว่าไม่สามารถเรียกคืน vin ในสถานี 2MSL ฉันจะอธิบายคำศัพท์ด้วยไดอะแกรม ฉันจะเปลี่ยน
  5. เราได้แสดงให้เห็นว่าไคลเอนต์ไม่สามารถชนะซ้ำกับหมายเลขพอร์ตท้องถิ่นเดิมได้ ตราบใดที่พอร์ตนั้นเป็นส่วนหนึ่งของค่ายตรวจสอบ 2MSL อย่างไรก็ตาม เมื่อเรารันโปรแกรม sock binary ในฐานะไคลเอนต์ เมื่อเราไปถึงเซิร์ฟเวอร์ในหนึ่งชั่วโมง เราสามารถใช้หมายเลขพอร์ตในเครื่องเดียวกันได้ นอกจากนี้เราสามารถสร้างธุรกิจใหม่ได้เหมือนกับว่าเราจะไปอยู่ในค่าย 2MSL คุณรู้สึกอย่างไร?

    ดวงอาทิตย์ % ถุงเท้า -v bsdi เวลากลางวัน

    พุธ 7 ก.ค. 07:54:51 น. 2536
    การเชื่อมต่อถูกปิดโดยเพียร์

    ดวงอาทิตย์ % ถุงเท้า -v -b1163 bsdi เวลากลางวันส่งต่อหมายเลขพอร์ตในเครื่องเดียวกันอีกครั้ง
    เชื่อมต่อกับ 140.252.13.33.1163 ถึง 140.252.13.35.13
    พุธ 7 ก.ค. 07:55:01 น. 2536
    การเชื่อมต่อถูกปิดโดยเพียร์

  6. ตัวอย่างเช่น หากเราอธิบายถึงโรงสี FIN_WAIT_2 เราระบุว่าควรโอนการใช้งานเพิ่มเติมจากโรงสีที่ปิดไปยังโรงสีที่ปิด อีกด้านหนึ่ง (ในสถานี CLOSE_WAIT) ตรวจสอบ 12 เครดิตก่อนปิดอย่างไร (เปลี่ยนเส้นทาง FIN) TCP ใช้อะไรจากการถอน FIN
  7. สายโทรศัพท์ด้านไหนใช้งานมากกว่ากัน และด้านไหนเป็น Passive Voice? ค้างคืนดูได้ไหม ปิดข้ามคืนได้ไหม
  8. ใน 18.6 เล็กน้อย เราไม่ได้รับ ARP zapizu หรือ ARP vodguk อย่างไรก็ตาม ที่อยู่ฮาร์ดแวร์ของโฮสต์ svr4 อาจอยู่ในแคช bsdi ARP ฉันควรเปลี่ยนอะไรสำหรับสิ่งเล็กๆ น้อยๆ นี้ ซึ่งรายการใดในแคช ARP ไม่พร้อมใช้งาน
  9. อธิบายสิ่งที่เกิดขึ้นกับคำสั่ง tcpdump ปรับโยคะด้วยรูปที่ 18.13

    1 0.0 solaris.32990 > bsdi.discard: S 40140288:40140288 (0)
    ชนะ 8760
    2 0.003295 (0.0033) bsdi.discard > โซลาริส 32990: S 4208081409:4208081409 (0)
    ack 40140289 ชนะ 4096

    3 0.419991 (0.4167) solaris.32990 > bsdi.discard: P 1:257 (256) ack 1 ชนะ 9216
    4 0.449852 (0.0299) solaris.32990 > bsdi.discard: F 257:257 (0) ack 1 ชนะ 9216
    5 0.451965 (0.0021) bsdi.discard > โซลาริส.32990: . แอค 258 ชนะ 3840
    6 0.464569 (0.0126) bsdi.discard > solaris.32990: F 1:1 (0) ชนะ 258 ชนะ 4096
    7 0.720031 (0.2555) solaris.32990 > bsdi.discard: . แอค 2 ชนะ 9216

  10. เหตุใดเซิร์ฟเวอร์บน 18.4 ขนาดเล็กจึงไม่สามารถรวม ACK บน FIN ของลูกค้าเข้ากับ FIN ของตัวเองได้ โดยเปลี่ยนจำนวนเซกเมนต์เป็นสามเซกเมนต์ด้วยตัวมันเอง
  11. สำหรับทารก 18.16 เหตุใดหมายเลขคำสั่งซื้อ RST จึงเป็น 26368002
  12. บอกฉันทีว่าอะไรคือพื้นฐานในการเข้าคิว TCP ไปยังระดับแชนเนลเกี่ยวกับ MTU บนหลักการแยกระดับ
  13. ถูกแยกส่วนโดยการแก้ไขหมายเลขพอร์ตการจดจำ TCP จิใช่ไหม?
สูญเสียลายมือของคุณ TCP

กระบวนการเริ่มต้นเซสชัน TCP (เรียกอีกอย่างว่า "การขูดด้วยมือ" ประกอบด้วยสามส่วน)

1. ไคลเอ็นต์ ซึ่งสามารถกำหนดวันที่ได้ แทนที่เซิร์ฟเวอร์ด้วยเซ็กเมนต์ที่มีหมายเลขลำดับและธง SYN

  • เซิร์ฟเวอร์จะลบเซ็กเมนต์ จดจำหมายเลขลำดับ และพยายามสร้างซ็อกเก็ต (โครงสร้างบัฟเฟอร์และหน่วยความจำ) เพื่อให้บริการไคลเอ็นต์ใหม่
    • หากสำเร็จ เซิร์ฟเวอร์จะส่งเซ็กเมนต์ไปยังไคลเอนต์พร้อมหมายเลขลำดับและระบุ SYN และ ACK และไปที่สถานี SYN-RECEIVED
    • ในกรณีที่เกิดความล้มเหลว เซิร์ฟเวอร์จะส่งเซ็กเมนต์ไปยังไคลเอ็นต์พร้อมกับธง RST

2. หากไคลเอนต์ลบเซ็กเมนต์ด้วยแฟล็ก SYN ให้จำหมายเลขลำดับและส่งเซ็กเมนต์ด้วยแฟล็ก ACK

  • Yakshcho ในหนึ่งชั่วโมงotrimuєฉัน prapor ACK (เสียงอะไรและvіdbuvaєtsya) เมื่อไปที่สถานี ESTABLISHED
  • หากลูกค้ายอมรับส่วนที่มีธง RST เขาจะพยายามเชื่อมต่อ
  • หากลูกค้าไม่ยกเลิกการหน่วงเวลาเป็นเวลา 10 วินาที เขาจะทำการโทรซ้ำอีกครั้ง

3. หากเซิร์ฟเวอร์สามารถยอมรับเซ็กเมนต์ SYN-RECEIVED ที่มีเครื่องหมาย ACK ได้ ก็จะเปลี่ยนเป็น ESTABLISHED

  • มิฉะนั้น หลังจากหมดเวลา ซ็อกเก็ตจะปิดและเปลี่ยนเป็นปิด

กระบวนการนี้เรียกว่า "triheap uzgodzhennyam" oskіlkiไม่รู้เรื่องเหล่านั้น scho เป็นไปได้ที่กระบวนการติดตั้ง z'dnannya z vikoristannya chotirokh segmentіv (SYN สำหรับเซิร์ฟเวอร์ส่วนหลัง, ACK สำหรับไคลเอนต์ส่วนหลัง, SYN สำหรับไคลเอนต์ส่วนหลัง, ชั่วโมง ACK สำหรับเศรษฐกิจ) ในทางปฏิบัติ สามส่วนได้รับชัยชนะ

TCP - วิกโน

ฟิลด์ใดมีตัวเลขที่ระบุเป็นไบต์ของข้อมูล เนื่องจากคำแนะนำสามารถส่งได้โดยไม่ต้องยืนยัน

TCP วิกโน – อัลกอริทึมสำหรับจัดการความเข้มของการไหลของข้อมูล เหตุผลสำหรับการเปลี่ยนแปลงจำนวนข้อมูลสูงสุด เนื่องจากผู้ถือพร้อมที่จะยอมรับและยืนยันด้วยส่วนเดียวที่ส่งคืน
Rozmir vіknaมอบหมายการเชื่อฟังเป็นประจำตามสถิติจำนวนการให้อภัย

ชื่อโดเมน

โดเมนkolіzіy- เช พื้นที่ชายแดนอีเธอร์เน็ต, มหาวิทยาลัยทุกแห่งรู้จัก colisma อย่างอิสระ อันที่จริง ในบางส่วนของ galusia colisma ของไวนิล

  • ไวนิลkolіzіyaไม่ rozpovsyudzhuєtsya เกินกรอบคล้ายกับโดเมนของ colisms
  • ยิ่งจำนวนโดเมนในโคโลนีมากเท่าใด ก็ยิ่งจำร่องรอยของโคโลนีผิวหนังได้น้อยลงเท่านั้น
  • เพื่อทำลายโซ่ที่บ้านไม่มีสวิตช์kolіzіy zastosovuyut

โหมด VTP บนสวิตช์

VTP - VLAN Trunking Protocol ซึ่งช่วยให้จัดการสวิตช์และจัดการ VLAN บนสวิตช์ Cisco ได้ง่ายขึ้น จาก VTP คุณสามารถสร้าง เปลี่ยนแปลง หรือดู VLAN บนเซิร์ฟเวอร์ VTP และการเปลี่ยนแปลงทั้งหมดจะถูกโอนไปยังสวิตช์ทั้งหมดในโดเมน VTP เดียวโดยอัตโนมัติ อะไรทำให้ผู้ดูแลระบบสามารถกำหนดค่า VLAN บนสกินสวิตช์ได้
มีสามโหมด VTP (โหมด VTP):

1. เซิร์ฟเวอร์ VTP - โหมดเซิร์ฟเวอร์ ในโหมดนี้ คุณสามารถสร้าง ดู และเปลี่ยน VLAN ตลอดจนตั้งค่าพารามิเตอร์ต่างๆ เช่น เวอร์ชันโปรโตคอล (เวอร์ชัน vtp) การกรอง vtp (การตัด vtp) สำหรับโดเมน VTP ทั้งหมด เซิร์ฟเวอร์ VTP รายงานการกำหนดค่า VLAN ไปยังสวิตช์อื่นๆ ที่อยู่ในโดเมน VTP เดียวกัน และซิงโครไนซ์การกำหนดค่า VLAN นอกจากนี้ เซิร์ฟเวอร์ VTP ยังสามารถซิงโครไนซ์การกำหนดค่ากับการกำหนดค่า VTP ของไคลเอนต์ได้ ตราบใดที่ไคลเอ็นต์มีหมายเลขการแก้ไขการกำหนดค่าที่สูงกว่า การแลกเปลี่ยนข้อมูล VTP จะถูกส่งผ่านพอร์ต TRUNK

2. ไคลเอนต์ VTP - โหมดไคลเอนต์ บนสวิตช์ที่มีโหมด VTP Client คุณจะไม่สามารถสร้าง ดู หรือเปลี่ยน VLAN ได้ การตั้งค่า VLAN ทั้งหมดบนสวิตช์นำมาจากเซิร์ฟเวอร์ VTP

3. VTP โปร่งใส - โหมดโปร่งใส ในโหมดนี้ สวิตช์จะไม่บล็อกการกำหนดค่า VLAN จากเซิร์ฟเวอร์ VTP และไม่บอกเกี่ยวกับการกำหนดค่าไปยังสวิตช์อื่น แต่อนุญาตให้ส่งข้อมูล VTP ไปยังสวิตช์อื่นผ่านพอร์ตหลัก

คำอ้างอิง

ส่วนหนึ่งของการตรวจสอบความถูกต้องของการถ่ายโอนส่วนผิวหนังสามารถยืนยันได้โดยใบเสร็จรับเงินของคำสั่งซื้อ คำอ้างอิง- เป็นหนึ่งในวิธีการดั้งเดิมในการรักษาความปลอดภัยการโทรเพียงครั้งเดียว ความคิดที่จะเลิกอยู่ในแนวรุก

เพื่อให้สามารถจัดระเบียบการส่งข้อมูลที่สร้างขึ้นซ้ำได้ จำนวนหน่วยที่ต้องแก้ไข (เพื่อความง่าย เราจะเรียกว่าเฟรม) สำหรับกรอบผิวหนัง เสมียนควรตรวจสอบใบเสร็จรับเงินที่เรียกว่า ใบเสร็จรับเงินที่เป็นบวก - การแจ้งเตือนการบริการ ซึ่งยืนยันว่าเฟรมสุดท้ายของการถอนและข้อมูลในใหม่นั้นถูกต้อง ชั่วโมงของการทำความสะอาดสภาพแวดล้อมครั้งแรก - เมื่อส่งเฟรมสกิน การส่งจะเริ่มจับเวลา และทันทีที่ใบเสร็จรับเงินเป็นบวกสำหรับการสิ้นสุด เฟรมจะถูกนำมาพิจารณาด้วย ในบางโปรโตคอล ผู้รับในกรณีของการแยกเฟรมด้วยข้อมูลที่สร้างขึ้นมีความผิดในการแก้ไขใบเสร็จที่เป็นค่าลบ - เป็นที่ชัดเจนว่าเฟรมจำเป็นต้องส่งสัญญาณใหม่


หน้าที่ของสายการขนส่ง

  • รักษาลำดับตรรกะระหว่างอาหารเสริม
  • realizuєnadіynuการถ่ายโอนข้อมูล
  • มั่นใจในการควบคุมความเร็วในการส่ง

ซ็อกเก็ต

เบ้า(ซ็อกเก็ตรัง) - โครงสร้างข้อมูลที่ระบุวัตถุ

ต้องการซ็อกเก็ตเพิ่มเติมหรือไม่? เซิร์ฟเวอร์ (โปรแกรม) สามารถรองรับการเชื่อมต่อ TCP กับคอมพิวเตอร์เครื่องอื่นได้พร้อมกัน รวมถึงเครื่องเดียวกันด้วย ห้องมาตรฐานท่าเรือ. วิธีการใช้? คุณสามารถวางงานให้กับโปรแกรมเมอร์ได้ ให้เขาเลือกไวน์จากบัฟเฟอร์เพื่อรับห่อเงิน ประหลาดใจที่ใครส่งกลิ่นมาและยืนยันอันดับ แต่คุณสามารถทำงานได้ดีขึ้น

จากผิวหนังz'єdnannyamมีความผิด buti po'yazaniya svіypotіkซึ่งคุณสามารถเขียนข้อมูลและจากที่คุณสามารถอ่านได้ สกินสตรีมจะได้รับที่อยู่ IP ของคอมพิวเตอร์ระยะไกลและพอร์ตของคอมพิวเตอร์ระยะไกล เรียกโครงสร้างของข้อมูลที่สนับสนุนการไหลของผิวหนังเช่นซ็อกเก็ต (ดอกกุหลาบ) ด้วยวิธีนี้เซิร์ฟเวอร์สามารถเชื่อมต่อกับซ็อกเก็ต rozgaluzhuvachem z ได้มากมายขึ้นอยู่กับไคลเอนต์ที่เชื่อมต่อ

หากเป็นกรณีนี้ การแทนที่สำหรับการจัดเรียงในแพ็คเกจประเภทต่างๆ จากบัฟเฟอร์ไปยังผู้รับของระดับสื่อ เซิร์ฟเวอร์สามารถอ่านได้จากสตรีม และสกินจากคำขอดังกล่าวจะถูกส่งไปยังไคลเอนต์ . ชนิดข้อมูลของไคลเอนต์ไม่ได้ถูกเรียกในแชปเตอร์ แต่จะถูกแบ่งออกเป็นซ็อกเก็ตสตรีม Vidpovidalnist สำหรับ rozpodil นั้นไม่ได้อยู่ที่โปรแกรมเมอร์ แต่อยู่ในไดรเวอร์ของระดับการขนส่งของระบบปฏิบัติการ

ซ็อกเก็ตได้รับการพัฒนาที่มหาวิทยาลัยแห่งแคลิฟอร์เนียที่ Berkeley และกลายเป็นมาตรฐานโดยพฤตินัยเมื่อเทียบกับ OSI TLI (Transport Layer Interface)

บทพิสูจน์ทางประวัติศาสตร์ รอซคอล ยูนิกซ์

ตั้งแต่ปี พ.ศ. 2521 เขาเริ่มประวัติของ BSD UNIX ซึ่งเป็นผลงานที่มหาวิทยาลัยเบิร์กลีย์ โดยผู้เขียน BSD Bill Joy ในช่วงต้นทศวรรษ 1980 AT&T ซึ่งเป็นเจ้าของ Bell Labs ได้ตระหนักถึงคุณค่าของ UNIX และสร้าง UNIX เวอร์ชันเชิงพาณิชย์ เหตุผลสำคัญสำหรับการแยก UNIX คือการดำเนินการในทศวรรษที่ 1980 สแต็กโปรโตคอล TCP/IP ก่อนการโต้ตอบระหว่างเครื่องใน UNIX ฉันได้ลองที่บ้านเกิด - วิธีทั่วไปในการเชื่อมโยงตัวอักษร UUCP (สำหรับการคัดลอกไฟล์จากระบบ UNIX หนึ่งไปยังอีกระบบหนึ่ง ซึ่งมักใช้สำหรับ มาตรการทางโทรศัพท์สำหรับโมเด็มช่วยเหลือ)

ระบบปฏิบัติการทั้งสองนี้ใช้อินเทอร์เฟซการเขียนโปรแกรมที่แตกต่างกันสองแบบสำหรับส่วนเสริมเครือข่าย: ซ็อกเก็ต Berkley (TCP/IP) และอินเทอร์เฟซเลเยอร์การขนส่ง TLI (OSI ISO) (อินเทอร์เฟซเลเยอร์การขนส่ง) อินเทอร์เฟซซ็อกเก็ต Berkley ถูกขยายที่ University of Berkeley และสแต็กโปรโตคอล TCP / IP ถูกแยกย่อย TLI ของการสร้าง AT&T ขึ้นอยู่กับระดับการขนส่งแบบจำลอง OSI ในขณะเดียวกันก็มีการใช้งาน TCP / IP และโปรโตคอลเครือข่ายอื่น ๆ แต่ บริษัท บุคคลที่สามเป็นผู้จัดหาการใช้งานดังกล่าว Tse, จามรีและіnshі mirkuvannya (zdebіlshoy, rіnkovі), vyklikalo razmіzhuvannіที่เหลืออยู่ระหว่าง dvom gіlkami UNIX - BSD (ถึงมหาวิทยาลัย Berkeley) และ System V (เวอร์ชันเชิงพาณิชย์จาก AT&T) ในช่วงหลายปีที่ผ่านมา หลายบริษัทที่ได้รับลิขสิทธิ์ System V จาก AT&T ได้พัฒนา UNIX เวอร์ชันเชิงพาณิชย์หลายเวอร์ชัน เช่น AIX, HP-UX, IRIX, Solaris

ดั้งเดิมของซ็อกเก็ต

เบ้า สร้างซ็อกเก็ตใหม่ (ว่าง)
ผูก เซิร์ฟเวอร์จะแสดงที่อยู่ในเครื่อง (พอร์ต) จากซ็อกเก็ต
ฟัง เซิร์ฟเวอร์เห็นหน่วยความจำสำหรับการเชื่อมต่อไคลเอนต์ (TCP)
ยอมรับ เซิร์ฟเวอร์ตรวจสอบการเชื่อมต่อของไคลเอ็นต์หรือยอมรับการเชื่อมต่อครั้งแรกจากการ์ด (TCP) หากต้องการบล็อกการตรวจสอบการเชื่อมต่ออินพุต เซิร์ฟเวอร์จะปิดใช้งาน ACCEPT ดั้งเดิม หลังจากลบคำขอแล้ว โมดูลการขนส่ง OS จะสร้างซ็อกเก็ตใหม่ที่มีพลังเดียวกันกับที่ซ็อกเก็ตมี และเปลี่ยนไฟล์คำอธิบายสำหรับซ็อกเก็ตใหม่ จากนั้นเซิร์ฟเวอร์สามารถยกเลิกกระบวนการ หรือหลังจากนั้น เพื่อประมวลผลการเชื่อมต่อสำหรับซ็อกเก็ตใหม่ และควบคู่ไปกับการตรวจสอบการโจมตีสำหรับซ็อกเก็ตเดิม
เชื่อมต่อ ลูกค้าร้องขอ (TCP)
ส่ง/ส่งEND_TO ส่งข้อมูล (TCP/UDP)
รับ / RECEIVE_FROM รับข้อมูล (TCP/UDP)
ตัดการเชื่อมต่อ แหล่งจ่ายไฟ (TCP)

มัลติเพล็กซ์และดีมัลติเพล็กซ์

มัลติเพล็กซ์- การเลือกเพิ่มประเภทซ็อกเก็ตของภาคผนวกที่ใช้และเพิ่มส่วนหัว

มัลติเพล็กซ์- ข้อมูลrozpodіlบนซ็อกเก็ต

สำหรับ UDP ซ็อกเก็ตที่จำเป็นถูกกำหนดโดยหมายเลขพอร์ตของโฮสต์ สำหรับ TCP - โดยหมายเลขพอร์ตของโฮสต์ ที่อยู่ IP และหมายเลขพอร์ตของมาสเตอร์

โปรโตคอลการขนส่ง

ในระดับการขนส่ง มีสองโปรโตคอล: TCP (เหนือกว่า) และ UDP (ไม่เหนือกว่า)

โปรโตคอล UDP

UDP (User Datagram Protocol) มีขีดจำกัดขั้นต่ำ ทำให้โปรแกรมทำงานได้โดยไม่ต้องอาศัยการทำงานร่วมกันระหว่างคนกลาง Pratsyuє สมบูรณ์ยิ่งขึ้นสำหรับ TCP ดังนั้นจึงไม่จำเป็นต้องติดตั้งวันที่และตรวจสอบการยืนยันการจัดส่ง คุณสามารถใช้จ่ายส่วน มีการควบคุมความถูกต้องของข้อมูลที่ส่ง (ควบคุมจำนวน)

โครงสร้างของกลุ่ม UDP

ส่วนหัวมีขนาดเพียง 8 ไบต์

หลักการถ่ายโอนข้อมูลที่เชื่อถือได้

เรากำลังออกแบบโปรโตคอล myTCP ซึ่งส่งผลให้มีความซับซ้อน

  • กลายเป็นโปรโตคอล myTCP 1.0 การส่งโดยช่องทางที่เหนือกว่าอย่างแน่นอน
  • กลายเป็นโปรโตคอล myTCP 1.0 (ขวา) (การส่งโดยช่องทางขวาสุด).JPG

    วิดปราฟนิค

    กลายเป็นโปรโตคอล myTCP 1.0 (หลัก) (การส่งในช่องทางขวาสัมบูรณ์).JPG

    โอเบอร์ชูวาช

  • กลายเป็นโปรโตคอล myTCP 2.0 การส่งโดยช่องทางที่อนุญาตให้สร้างการต่อสู้ เสียแพ็คเก็ตในสิ่งที่เป็นไปไม่ได้
  • กลายเป็นโปรโตคอล myTCP 2.0 (ขวา) (การส่งโดยช่องทางที่อนุญาตให้สร้างการต่อสู้ ใช้จ่ายแพ็คเก็ตโดยไม่สามารถ)JPG

    วิดปราฟนิค

    กลายเป็น myTCP 2.0 protocol (master) (ส่งโดยช่องที่อนุญาตให้สร้างการต่อสู้ ใช้จ่ายแพ็คเก็ตโดยไม่สามารถ)JPG

    โอเบอร์ชูวาช

แต่ใบเสร็จรับเงินก็สามารถถูกทำลายได้เช่นกัน ทันทีที่สร้างใบเสร็จรับเงิน ผู้ปฏิบัติงานจะต่ออายุบรรจุภัณฑ์ ผู้ครอบครองมีความผิดในการคิดวิธีดำเนินการแพ็คเกจซ้ำ ๆ (จำเป็นต้องแนะนำค่ายใหม่ - พวกเขามอบแพ็คเกจขั้นต่ำให้กับส่วนเสริม)

บทบาทของตัวระบุ "ซ้ำ" และ "ใหม่" ใน TCP / IP เล่นโดยหมายเลขแพ็กเก็ต (เนื่องจากแพ็กเก็ตสามารถถูกทำลายได้)

  • กลายเป็นโปรโตคอล myTCP 2.1 การส่งโดยช่องทางที่อนุญาตให้สร้างการต่อสู้ เสียแพ็คเก็ตในสิ่งที่เป็นไปไม่ได้
  • กลายเป็นโปรโตคอล myTCP 2.1 (ขวา) (การส่งโดยช่องทางที่อนุญาตให้สร้างการต่อสู้ ใช้จ่ายแพ็คเก็ตโดยไม่สามารถ)JPG

    วิดปราฟนิค

    กลายเป็น myTCP 2.1 protocol (master) (ส่งโดยช่องสัญญาณที่อนุญาตให้สร้างการต่อสู้ ใช้จ่ายแพ็คเก็ตโดยไม่สามารถ)JPG

    โอเบอร์ชูวาช

ความแตกต่างที่สำคัญระหว่างประเทศต่างๆ นั้นขึ้นอยู่กับวิธีการดำเนินการบรรจุภัณฑ์ซ้ำๆ ในสถานี "แพ็คเกจ Minulium ที่ถ่ายโอนไปยังภาคผนวก" เราได้รับแพ็กเก็ตซ้ำๆ และในสถานี "แพ็คเกจ Minulium ที่ไม่ถูกถ่ายโอนโดยภาคผนวก" เรายอมรับและถ่ายโอนภาคผนวก

ถึงเวลาแล้วที่จะเดาว่าแพ็คเกจใดที่สามารถทำลายได้

  • จำเป็นต้องทราบข้อเท็จจริงที่ว่าพัสดุถูกใช้ไป เช่น ตรวจสอบชั่วโมงหลังจากส่งพัสดุ
  • จำเป็นต้องกำหนดหมายเลขแพ็คเกจ
  • ในใบเสร็จรับเงินจำเป็นต้องระบุหมายเลขของบรรจุภัณฑ์ที่ส่งไป

ในอันดับนี้ เรามาถึงการบริโภคของตัวจับเวลา เมื่อถึงวันราวกับว่าชั่วโมงสุดท้ายของเพลงและการยืนยันไม่มาก็จำเป็นต้องแจ้งเตือนซ้ำ ช่วงเวลาหนึ่งชั่วโมงไม่มาก ความเป็นไปได้ในการใช้จ่ายนั้นใกล้เคียงกับ 1 (ไม่จำเป็นต้องใช้สำหรับการเชื่อมต่อ WiFi ที่ดี)

โปรโตคอลสั้น ๆ พร้อมจุดยืนยัน

ลองดูตัวอย่าง ไปกันเถอะ 1Gb-channel Rostov - มอสโก รอชั่วโมงส่ง 1,000 ไบต์ (หรือ 8,000 ไบต์):

8000 บิต/1 Gb/s = 8 µs

ชั่วโมงของสัญญาณ rozpovsudzhennya:

1,000 กม./300,000 กม./วินาที = 3333 µs

ร่วมกัน: 1,000 ไบต์ถัดไปจะถูกส่งมากขึ้นและน้อยลงใน 6674 µs

Visnovok: 99.9% ของเวลาที่ช่องไม่ได้รับชัยชนะ

Way of cherry - เพิ่มขนาดแพ็คเกจ เอลถ้าคุณต้องการสะดุด 1 บิตให้ทิ้งทั้งห่อ อะไรอีก?

โปรโตคอลงานฝีมือ

วิธีแก้ปัญหา: อนุญาตให้ผู้ดูแลระบบเอาชนะไม่ใช่เฟรมเดียว แต่เป็น sprats ของ zupinity ที่ต่ำกว่าและเปลี่ยนเป็นโหมดการยืนยัน (ใบเสร็จ) เทคนิคนี้เรียกว่า สายการประกอบ.

บนสีเขียวเล็กๆ ใบเสร็จเหล่านั้นจะถูกทำเครื่องหมายไว้ ถ้าถูกถอนออกไปแล้ว ถ้าถูกเอาออกแล้ว ถ้ายังไม่ได้เอาออกไป แสดงว่าได้เตรียมการหยุดทำงานก่อนที่จะแก้ไข แต่ถ้าไม่สามารถแก้ไขได้ ท่าเทียบเรือจะถูกลบออก ใบเสร็จรับเงินใน Zhovt Vіkno: zhovti และ blakitnі - แพ็คเกจ tse, yakіสามารถโอนได้โดยไม่ต้องหักล้างใบเสร็จรับเงิน บรรจุภัณฑ์สีขาวชุดแรกจะออกได้ก็ต่อเมื่อมีการยืนยันสีเหลืองชุดแรกแล้วเท่านั้น Todіknoล้มลงบน 1 คนถนัดขวา

คุณสามารถขอทราบ: ตอนนี้เราต้องจัดเตรียมการเปิดหน้าต่างส่งพัสดุทั้งหมดแล้วตรวจสอบการยืนยัน แต่มันเป็นไปไม่ได้ที่จะขี้อาย: มันง่ายที่จะใช้ประโยชน์จากการลงทุนในmerezі

มีสองวิธีในการแก้ปัญหาการอภัยโทษสำหรับชั่วโมงของเจ้าหน้าที่ลำเลียง:

  • GBN (ย้อนกลับ N - เปลี่ยนแพ็กเก็ต N กลับ);
  • SR (การทำซ้ำแบบเลือก - การทำซ้ำแบบสั่นสะเทือน)
GBN

Oberzhuvach ใช้การรับในเชิงบวกมากขึ้นและน้อยลงเกี่ยวกับการถอนแพ็คเกจดังกล่าวซึ่งจิตใจถูกตี: แพ็คเกจทั้งหมดที่มีจำนวนต่ำกว่าจะถูกถอนออกแล้ว ในอันดับนี้ ที่นี่vikoristovuєtsya การทำให้เท่าเทียมกันของกลุ่ม: ได้รับโดยผู้จัดการของใบเสร็จที่มีหมายเลข i หมายความว่าพัสดุทั้งหมดจนถึงและรวมถึง i ได้ถูกจัดส่งเรียบร้อยแล้ว หากในบางชั่วโมงพนักงานไม่รับใบเสร็จ ฉันจะทำซ้ำการออกแพ็กเก็ต N ทั้งหมดโดยเริ่มจากอันถัดไปสำหรับใบเสร็จที่เหลือ

วิธี GBN นั้นใช้ไม่ได้ผลในกรณีที่แพ็กเก็ตขยายเป็นเวลานานและยาวนานเนื่องจากเงินถูกใช้ไป ก้น: 1,000 แพ็คเก็ตได้รับการแก้ไข แต่อีกอันมาไม่ถึงจำเป็นต้องทำซ้ำความแข็งแกร่งของทั้งหมดโดยเริ่มจากอีกอัน เราzasmіchuєmo mezhu marny การจราจร

เอส.อาร์

Tsey pidhіdถ่ายโอนพลังของใบเสร็จรับเงินสำหรับแพ็คเกจเครื่องหนัง ผู้จัดการนำเฟรมที่ถูกต้องทั้งหมดจากบัฟเฟอร์ของเขามาหลังจากที่ถ่ายผิด เมื่อ tsimu ผิดเฟรมvіdkidaєtsya ทันทีที่มีการรวมใบเสร็จรับเงินสำหรับเฟรมเดียวกัน ผู้จัดการจะปรับใช้เฟรมเดียวกันใหม่โดยไม่ต้องแก้ไขซ้ำกับเฟรมที่จะเกิดขึ้นทั้งหมด การทดสอบอื่นจะประสบความสำเร็จ แพ็กเก็ตที่สะสมอยู่ในความครอบครองสามารถถ่ายโอนไปยังบรรทัดสตริงได้ หลังจากนั้นจะมีการส่งการยืนยันการลบเฟรมด้วยจำนวนสูงสุด

บ่อยครั้งที่วิธีการสั่นสะเทือนถูกรวมเข้ากับการแก้ไข "การยืนยันเชิงลบ" (NAK - การรับทราบเชิงลบ) ในกรณีที่มีการให้อภัย (เช่น มีผลรวมการควบคุมที่ไม่ถูกต้อง) ซึ่งประสิทธิภาพของหุ่นยนต์กำลังก้าวไปข้างหน้า

ในกรณีของการแตกครั้งใหญ่ SR อาจต้องใช้ขนาดบัฟเฟอร์ที่มีนัยสำคัญ

โปรโตคอล TCP

รูปแบบเซ็กเมนต์ TCP

ส่วน TCP ประกอบด้วยฟิลด์ข้อมูลและจำนวนฟิลด์ส่วนหัว เขตส่วยเพื่อล้างแค้นในส่วนของข้อมูลที่ส่งผ่านระหว่างกระบวนการ การขยายเขตข้อมูลแยกตามขนาด นางสาว(ขนาดเซกเมนต์สูงสุด). หากโปรโตคอลต้องการการถ่ายโอนไฟล์ขนาดใหญ่ก็จะส่งเสียงแยกข้อมูลออกเป็นส่วนย่อยตามขนาดของ MSS (เสียงร้องของส่วนที่เหลืออยู่ซึ่งอาจ ขนาดที่เล็กกว่า). ในทางกลับกัน โปรแกรมเชิงโต้ตอบมักแลกเปลี่ยนกับข้อมูล ซึ่งมักจะน้อยกว่า MSS มาก ตัวอย่างเช่น โปรแกรมการเข้าถึงระยะไกลเช่น Telnet สามารถส่งข้อมูล 1 ไบต์ไปยังสายการขนส่ง Oskіlkiให้ความยาวของส่วนหัวของส่วน TCP เป็น 20 ไบต์ (ซึ่งมากกว่า 12 ไบต์, ต่ำกว่าสำหรับ UDP) ขนาดสุดท้ายของส่วนด้วยวิธีนี้คือ 21 ไบต์

เช่นเดียวกับในโปรโตคอล UDP ส่วนหัวประกอบด้วยหมายเลขของพอร์ตหลักและไดรเวอร์ ซึ่งเป็นที่รู้จักสำหรับขั้นตอนการมัลติเพล็กซ์ข้อมูลและดีมัลติเพล็กซ์ รวมถึงช่องตรวจสอบผลรวม นอกจากนี้ ก่อนที่คลังสินค้าเซ็กเมนต์ TCP จะเข้าสู่ฟิลด์ deak_

  • ฟิลด์ 32 บิตของหมายเลขซีเรียลและหมายเลขยืนยัน จำเป็นสำหรับการส่งข้อมูล
  • ฟิลด์ความยาวส่วนหัว 4 บิตกำหนดความยาวของส่วนหัว TCP เป็นคำ 32 บิต ขนาดต่ำสุดกำหนดไว้ที่ 5 คำ และสูงสุดคือ 15 คำ ดังนั้นการตั้งค่า 20 และ 60 ไบต์จึงสมเหตุสมผล ส่วนหัว TCP สามารถเปลี่ยนเป็นความยาวของฟิลด์พารามิเตอร์ที่อธิบายด้านล่าง (ตั้งค่าฟิลด์พารามิเตอร์เป็นว่าง ซึ่งหมายความว่าความยาวของส่วนหัวถูกตั้งค่าเป็น 20 ไบต์)
  • ฟิลด์ธงประกอบด้วย 6 บิต บิตยืนยัน (ABC) ระบุว่ามีนัยสำคัญซึ่งควรจะอยู่ในใบเสร็จรับเงินนั้นถูกต้อง บิต RST, SYN และ FIN ถูกเรียกใช้เพื่อสิ้นสุดการโทร การแทรกบิต PSH สั่งให้ผู้ใช้ประมวลผลข้อมูลที่สะสมอยู่ในบัฟเฟอร์ priymal ซึ่งเป็นส่วนเสริมของ coristuvacha บิต URG แสดงให้เห็นว่ามีข้อมูลอยู่ในเซกเมนต์ ซึ่งวางไว้ในระดับบนเป็นคำ การบีบอัดของไบต์ที่เหลือของข้อมูลคำศัพท์ระบุไว้ในฟิลด์ 16 บิตของตัวบ่งชี้ข้อมูลคำศัพท์ ในด้านที่ได้รับ โปรโตคอล TCP มีหน้าที่รับผิดชอบในการรายงานขีดจำกัดสูงสุดของการมีอยู่ของข้อมูลคำศัพท์ในกลุ่มและส่งต่อไปยังตัวบ่งชี้สำหรับการสิ้นสุดของข้อมูล ในทางปฏิบัติ แฟล็ก PSH, URG และฟิลด์ของตัวบ่งชี้คำศัพท์จะไม่ถูกพิมพ์ออกมา เราคาดเดามากกว่าสินค้าคงคลังที่สมบูรณ์
  • การควบคุมการไหลของข้อมูลแบบ 16 บิตเป็นครั้งแรก มันจะแก้แค้นจำนวนไบต์ราวกับว่ามันเป็นความคิดที่ดีที่จะยอมรับด้านที่คุณยอมรับ
  • ค่าความสำคัญ - ค่า 16 บิตของค่าบวกของหมายเลขซีเรียลในส่วนที่กำหนด ฟิลด์นี้ระบุหมายเลขประจำเครื่องของออคเต็ตที่จะสิ้นสุดข้อมูลเร่งด่วน ฟิลด์นี้ใช้เพื่อเคารพแพ็คเกจจาก URG ธงที่ติดตั้งน้อยลง
  • ฟิลด์ neobov'yazykove parametrіv vikoristovuєtsya ที่ vypadki หากด้านที่ส่งและรับ "domovlyayutsya" เกี่ยวกับขนาดสูงสุดของส่วน แต่สำหรับการปรับขนาดหน้าต่างที่vysokoshvidkіsnyh merezha นอกจากนี้ ในช่องนี้ พารามิเตอร์ของตัวระบุเวลาจะแสดงขึ้นด้วย ดูข้อมูลเพิ่มเติมได้ใน RFC 854 และ RFC 1323
หมายเลขลำดับและหมายเลขยืนยัน

หมายเลขลำดับส่วน- จำนวนไบต์แรกของเซ็กเมนต์

หมายเลขยืนยัน- Tse เลขลำดับของไบต์ octified ที่จะเกิดขึ้น

ฟิลด์หมายเลขลำดับซึ่งยืนยันว่าเป็นฟิลด์ที่สำคัญที่สุดในส่วนหัวของเซ็กเมนต์ TCP ออสซิลมีบทบาทสำคัญในการทำงานของบริการถ่ายโอนข้อมูล อย่างไรก็ตาม ก่อนหน้านั้น วิธีดูบทบาทของฟิลด์เหล่านี้ในกลไกของการส่งผ่านที่ไม่จำเป็น นำไปสู่ค่า เช่นโปรโตคอล TCP เพื่อแก้แค้นฟิลด์เหล่านี้

โปรโตคอล TCP ถือว่าข้อมูลเป็นการเรียงลำดับไบต์แบบไม่มีโครงสร้าง พฤติกรรมนี้แสดงให้เห็นในข้อเท็จจริงที่ว่า TCP กำหนดหมายเลขลำดับไม่ให้เซกเมนต์ แต่ให้กับสกินไบต์ที่กำลังส่ง หมายเลขลำดับของเซ็กเมนต์ถูกกำหนดให้เป็นหมายเลขลำดับของไบต์แรกของเซ็กเมนต์แทน ลองดูที่ก้นโจมตี ส่งโฮสต์ A ต้องการส่งต่อข้อมูลไปยังโฮสต์ผ่าน TCP-rejection โปรโตคอล TCP ในด้านการส่งระบุจำนวนไบต์ต่อสตรีมโดยปริยาย มาขยายไฟล์ที่กำลังถ่ายโอน ตั้งค่าเป็น 500,000 ไบต์ ค่า MSS คือ 1,000 ไบต์ และไบต์แรกของสตรีมอาจมีหมายเลขลำดับเป็น 0 TCP แบ่งสตรีมข้อมูลออกเป็น 500 ส่วน ส่วนแรกกำหนดหมายเลขลำดับเป็น 0 ส่วนอื่นกำหนดหมายเลขลำดับที่ 1,000 ส่วนที่สามกำหนดหมายเลขลำดับที่ 2000 และอื่น ๆ หมายเลขลำดับถูกป้อนในฟิลด์หมายเลขลำดับของสกิน TCP ส่วน

ทีนี้มาดูหมายเลขยืนยันกัน ลองคิดดูว่าโปรโตคอล TCP ช่วยให้มั่นใจได้ถึงการส่งข้อมูลแบบดูเพล็กซ์ ดังนั้นผ่านการถ่ายโอนข้อมูล TCP เดียวระหว่างโฮสต์ A และสามารถส่งพร้อมกันไปยังทั้งสองฝ่าย สกินเซกเมนต์ที่จะออกจากโฮสต์ แทนที่หมายเลขลำดับของข้อมูลที่ส่งจากโฮสต์ B ไปยังโฮสต์ A หมายเลขยืนยันซึ่งโฮสต์ A ส่งไปยังเซกเมนต์คือหมายเลขลำดับของไบต์ที่ไม่เหมาะสม ซึ่งตรวจสอบโดยโฮสต์ A จากโฮสต์ B. ลองดูที่ก้นโจมตี . สมมติว่าโฮสต์ A ได้ลบไบต์ทั้งหมดที่มีตัวเลขตั้งแต่ 0 ถึง 535 ที่ส่งโดยโฮสต์ และสร้างกลุ่มสำหรับการส่งไปยังโฮสต์ B 536 สำหรับฟิลด์ตัวเลขยืนยันเซ็กเมนต์

ลองดูสถานการณ์อื่น ให้โฮสต์ A ใช้ประเภทของโฮสต์ U ในสองส่วน ส่วนแรกมีไบต์ที่มีตัวเลขเช่น 0 ถึง 535 และอีกส่วน - ไบต์ที่มีตัวเลขเช่น 900 ถึง 1,000 โฮสต์ A ไม่ยอมรับ 899 ซึ่งในกรณีนี้โฮสต์ A ตรวจสอบลักษณะของไบต์รายวันและใส่หมายเลข 536 ในช่องหมายเลขยืนยันของกลุ่ม

ตัวอย่างที่เหลือแสดงลักษณะที่สำคัญยิ่งกว่าของฟังก์ชันการทำงานของโปรโตคอล TCP ส่วนที่สาม (เพื่อลบไบต์ 900-1,000) ได้รับการยอมรับโดยโฮสต์ A ก่อนหน้านี้ ต่ำกว่าส่วนอื่น (เพื่อลบไบต์ 536-899) เพื่อให้ลำดับของข้อมูลเสียหาย อำนาจการตำหนิ: TCP ตอบสนองต่อสิ่งที่ไม่เป็นระเบียบอย่างไร ถ้าเซ็กเมนต์ถูกเอาออก หมายเลขลำดับจะสูงขึ้น คะแนนต่ำกว่า ข้อมูลจากเซกเมนต์จะถูกบัฟเฟอร์ แต่หมายเลขลำดับที่ยืนยันจะไม่เปลี่ยนแปลง เมื่อไรก็ตามที่เซกเมนต์ได้รับการยอมรับ ซึ่งนำมาถึงหมายเลขลำดับที่ระบุ ลำดับของข้อมูลจะได้รับการอัปเดตโดยอัตโนมัติ โดยยึดตามหมายเลขลำดับของเซ็กเมนต์ ในการจัดอันดับนี้ TCP ขึ้นไปถึงโปรโตคอลของ SR แต่ในอันใหม่นั้น จะมีการเฉลิมฉลองเป็นการรับทราบอย่างเป็นทางการเช่น GBN ต้องการ SR - ไม่ค่อยสะอาด หากฝ่ายยอมรับ (3) ใบเสร็จรับเงินเชิงลบสำหรับหนึ่งและส่วนเดียวกัน x ก็จะเดาได้ว่ามีการเรียกเก็บเงินสำหรับคำสั่งซื้อและส่วน x +1, x +2, x +3, ... ซึ่งไม่ใช่ ส่ง. Todi nadsilaetsya ทั้งชุดของ x - เหมือนในโปรโตคอล GBN

ปัญหาเกี่ยวกับขนาดสูงสุดของส่วน

TCP ยังคงต้องตั้งค่าขนาดเซ็กเมนต์สูงสุดอย่างชัดเจนในขณะนั้น เพื่อให้มีการจำลองเสมือนทั่วทั้งเซกเมนต์ และขนาดสูงสุดต่อหน่วย (MTU) น้อยกว่ามาตรฐาน Ethernet MTU (1500 ไบต์) โปรโตคอล Tunneling เช่น GRE, IPIP และ PPPoE Tunnel MTU นั้นน้อยกว่ามาตรฐาน ดังนั้น TCP Segment ของขนาดสูงสุดจึงสามารถใหญ่กว่าขนาดแพ็กเก็ตสูงสุด MTU ที่ต่ำกว่าได้ เศษของการกระจายตัวในกรณีที่สำคัญที่สุดจะถูกบล็อก แพ็กเก็ตดังกล่าวจะถูกโยนออกไป

เมื่อพบปัญหาเหล่านี้แล้ว ดูเหมือน "วางสาย" ของวัน ในกรณีของการ "วางสาย" ใด ๆ สามารถวางสายได้ในช่วงเวลาและชั่วโมงที่แน่นอน และจากนั้น หากผู้นำของผู้ชนะไปถึงส่วนของนกพิราบเพื่อการขยายที่ยอมรับได้ เพื่อแก้ไขปัญหา กฎไฟร์วอลล์จะถูกติดตั้งบนเราเตอร์ เพื่อเพิ่มพารามิเตอร์ MSS ให้กับแพ็กเก็ตทั้งหมดที่เริ่มต้นการเชื่อมต่อ เพื่อให้ไดรเวอร์สามารถเอาชนะเซ็กเมนต์ที่มีขนาดที่อนุญาตได้ MSS สามารถควบคุมได้โดยการตั้งค่าระบบปฏิบัติการ

ลายมือของไทรอาย

ในการกำหนดความท้าทาย โฮสต์ 2 ประเมินความท้าทายอินพุตอย่างไม่โต้ตอบโดยไพรม์ ACCEPT

โฮสต์ 2 เลือก CONNECT ดั้งเดิม ระบุที่อยู่ IP และพอร์ต vin ที่คุณต้องการตั้งค่าการเชื่อมต่อ ขนาดสูงสุดของส่วน TCP เป็นต้น ASK=0 และตรวจสอบการยืนยัน ในลำดับนี้ โฮสต์จะประกาศหมายเลขซีเรียล x ของลำดับการรบในโฮสต์ตั้งแต่ 1 ถึง 2

โฮสต์ 2 ส่งการยืนยัน "ยอมรับการเชื่อมต่อ" (ยอมรับฟังก์ชัน) ลำดับของส่วน TCP ที่จะเข้าสู่รูปแบบปกติจะแสดงในรูป: SYN=1 ASK=1 โฮสต์ 2 ตรวจสอบหมายเลขลำดับ x ของหมายเลขลำดับของการรบในโฮสต์ 2 ต่อ 1 และบอกคุณว่าข้อมูลมี ได้รับการตรวจสอบ เริ่มจาก byte number x+ 1

โฮสต์ 1 (เชื่อมต่อ) บังคับใช้การยืนยันการยอมรับการเชื่อมต่อ

TCP ล้นหลามการต่อสู้

หากมีเครื่องบรรณาการมาที่รั้วมากขึ้น จะมีงานให้ทำมากขึ้น ความคับคั่งจะเกิดขึ้นที่รั้ว อินเทอร์เน็ตไม่ได้ตำหนิความรู้สึกของใคร แม้ว่าขอบจะช่วยต่อสู้กับความไร้สาระ แต่การสนับสนุนหลักในการแก้ปัญหานี้ซึ่งเกี่ยวข้องกับความเร็วในการส่งข้อมูลที่ลดลงนั้นถูกนำมาใช้โดยโปรโตคอล TCP

ในทางทฤษฎี เป็นไปได้ที่จะต่อสู้เพื่อเอาคืนสำหรับหลักการเพิ่มเติมที่อยู่นอกเหนือไปจากฟิสิกส์ นั่นคือกฎแห่งการอนุรักษ์แพ็คเกจ แนวคิดนี้ไม่ใช่การถ่ายโอนแพ็กเก็ตใหม่ไปยังการวัด ท่าเทียบเรือไม่ควรทิ้งแพ็กเก็ตเก่า (ดังนั้นพวกเขาจะไม่ถูกจัดส่ง) ทั่วโลกมีโปรโตคอล TCP เพื่อขอความช่วยเหลือจากสภาพแวดล้อมแบบไดนามิก

ขั้นตอนแรกในการต่อสู้กับการผจญภัยของสนามคือการนำมันออกมา เป็นเวลาสิบปีแล้วที่จะแสดงการเปลี่ยนแปลงในmerezіได้ยาก สิ่งสำคัญคือต้องเข้าใจว่าเหตุใดจึงไม่จัดส่งพัสดุเป็นรายชั่วโมง นอกจากนี้ยังมีโอกาสที่ดีในการถ่ายโอนพัสดุผ่านแม่น้ำสายสูงไปยังสาย

ในเดนมาร์ก ใช้แพ็กเก็ตระหว่างการส่ง พวกมันดักจับได้ยากเนื่องจากสายตัวกลางส่วนใหญ่เชื่อมต่อกับไฟเบอร์ออปติก (แม้ว่าจะอยู่ใน เมเรซ่าไร้ลูกดอก vіdsotok pakіv, scho vtrachayutsya ผ่าน shkodi, dosit สูง) เห็นได้ชัดว่าแพ็กเก็ตส่วนใหญ่ที่ใช้บนอินเทอร์เน็ตทำให้เกิดความแออัด อัลกอริทึม TCP ทั้งหมดได้รับอนุญาตให้ใช้บนอินเทอร์เน็ต ซึ่งแพ็กเก็ตขยะจะถูกเรียกให้เป็นแนวหน้า และติดตามการหมดเวลาราวกับว่าพวกเขาเป็นผู้ก่อกวน

ขั้นแรก เรามาพูดถึงวิธีที่ TCP ตอบสนองต่อการโจมตี และเราจะอธิบายถึงวิธีการบางอย่างที่โปรโตคอลสามารถหยุดยั้งได้ ในกรณีที่เร่งด่วนอาจมีการนัดหมายสำหรับ rozmir ที่ทำงานได้ Obedzhuvach สามารถระบุrozmіrvіkna, vyhodyachi іzkіlkostі ที่ว่างที่บัฟเฟอร์ ราวกับว่าไดรเวอร์ของ matime บนuvazіrozmіrvіknการล้นของบัฟเฟอร์ในผู้ครอบครองไม่สามารถเป็นสาเหตุของปัญหาได้

TCP ล้นหลามการต่อสู้

ฉันอธิบายปัญหาเกี่ยวกับก้นของแหล่งจ่ายน้ำ ฉันจะเป่าท่อที่เจ้าตัวเล็กซึ่งนำไปสู่ความหลงใหลในความสามารถอันน้อยนิด ท่าเทียบเรือของบ้านน้ำไม่อนุญาตให้มีน้ำมากขึ้น, ด้านล่างสามารถพอดีกับลม, น้ำจะไม่รั่วไหล, ปัจจัยแทรกแซงไม่ได้ความจุของลม, แต่เป็นความจุของอาคาร. จากก๊อกที่อ่างน้ำวน น้ำจะไหลออกเร็วกว่า ธารน้ำที่อ่างน้ำวนก็ผุดบ่อยขึ้น และถ้าใส น้ำบางส่วนอาจล้นขอบอ่างน้ำวนได้

วิธีแก้ปัญหาที่zastosovuєtsyaในอินเทอร์เน็ตกระตุ้นการรับรู้ถึงปัญหาที่อาจเกิดขึ้นสองประการ: ความจุปริมาณงานต่ำและความจุต่ำ oberzhuvacha - ประเภทของการแก้ปัญหาสำหรับทั้งสองปัญหา สำหรับคนทำงานเครื่องหนังคนนี้ มีชัยชนะอยู่สองประการ: วิคโน ครอบงำ และวิคโน เรวันทาเจนเนีย Rozmir skin їх відпідідє кілкої byteіv เนื่องจากไกด์อาจมีสิทธิ์ในการโอน Vdpravnik keruetsya ขั้นต่ำของค่าทั้งสองนี้ ตัวอย่างเช่น เจ้าของดูเหมือนจะพูดว่า: "ส่ง 8 Kbytes" แต่ผู้จัดการรู้ว่าถ้าคุณได้รับมากกว่า 4 Kbytes ความคับคั่งจะถูกสร้างขึ้นในการวัด ซึ่งคุณยังคงส่ง 4 Kbytes คนงานก็รู้ เบอร์เด็ดข้อมูล เช่น 32 Kbytes ส่งมอบสไตล์ ขอใบรับรอง (สูงสุด 8 Kbytes)

เมื่อคุณตั้งตั๋ว คนขับจะกำหนดขนาดของหน้าต่างให้เท่ากับขนาดของส่วนสูงสุดที่ชนะในโซนที่กำหนด มาโอนส่วนสูงสุดหนึ่งส่วนกันเถอะ เพื่อยืนยันการครอบครองส่วนนี้ ระยะเวลาของการให้คะแนนจะสิ้นสุดลง จนถึงสิ้นปี การขยายส่วนจะถูกเพิ่ม เพื่อให้การขยายตัวของศตวรรษเปลี่ยนไป และสองส่วนถูกบังคับแล้ว ในกรณีของการปรับปรุงการแบ่งส่วนผิวหนังจะดำเนินการขยายการแบ่งส่วนของผิวหนังด้วยค่าของส่วนสูงสุดหนึ่งส่วน สมมติว่าการขยายตัวนั้นดีสำหรับ n ส่วน เมื่อมีการยืนยันเซ็กเมนต์ทั้งหมดทุกชั่วโมง จำนวนไบต์จะเพิ่มขึ้นตาม n เซ็กเมนต์ ในความเป็นจริง การยืนยันลำดับสกินของเซกเมนต์ควรดำเนินการก่อนสิ้นสุดสงคราม

กระบวนการเติบโตแบบทวีคูณนี้มีสามครั้ง การขยายหน้าต่างควบคุมจะไม่ไปถึงท่าเรือ หรือจะไม่สั่นสะเทือนด้วยสัญญาณหมดเวลา ซึ่งส่งสัญญาณเกี่ยวกับการเปลี่ยนแปลงในพรมแดน ตัวอย่างเช่น เนื่องจากแพ็กเก็ตที่มีขนาด 1024, 2048 และ 4096 ไบต์ทำได้สำเร็จ แต่การยืนยันการส่งแพ็กเก็ตที่มีขนาด 8192 ไบต์ไม่ได้รับการยืนยันโดยการแทรกคำ แต่ความท้าทายถูกกำหนดให้เท่ากับ 4096 ไบต์ . ตราบเท่าที่การขยายตัวของตำแหน่งที่ว่างยังคงเท่ากับ 4096 ไบต์ แพ็กเก็ตอื่น ๆ อีกมากมายจะไม่ถูกครอบงำ โดยไม่คำนึงถึงการขยายตัวของตำแหน่งที่ว่างซึ่งหวังว่าจะถูกครอบครอง เรียกว่าอัลกอริทึมทั้งหมด เริ่มยืดเยื้อ, หรือ การเปิดตัวที่เหมาะสม. อย่างไรก็ตาม ไวน์ไม่ธรรมดาอีกต่อไป (Jacobson, 1988) ชนะแบบทวีคูณ ต้องรองรับการใช้งานโปรโตคอล TCP ทั้งหมด

ทีนี้มาดูกลไกการต่อสู้กับความทุกข์ยากซึ่งได้รับชัยชนะบนอินเทอร์เน็ต Krіm vikon ครอบงำการ revantation เนื่องจากพารามิเตอร์ที่สามมีค่าขอบเขต ตามกฎแล้ว 64 Kb จะถูกกู้คืน หากสถานการณ์การหมดเวลาเกิดข้อผิดพลาด (การยืนยันไม่ได้หมุนเป็นสตริง) ค่าขีดจำกัดใหม่จะถูกตั้งค่าเท่ากับครึ่งหนึ่งของหน้าต่างความจุการสตรีม และขีดจำกัดความจุจะเปลี่ยนเป็นขนาดของเซกเมนต์สูงสุดหนึ่งเซ็กเมนต์ จากนั้นพัฒนาอัลกอริทึมการเริ่มต้นที่ยืดเยื้อราวกับอยู่ด้านหน้าทางลาดซึ่งช่วยให้คุณแสดงได้อย่างรวดเร็วระหว่างความสามารถในการรับส่งข้อมูลของเลน อย่างไรก็ตาม เมื่อการแพร่กระจายของหลอดเลือดดำเพิ่มขึ้นแบบทวีคูณจะเพิ่มขึ้นหลังจากถึงค่าเกณฑ์ หลังจากนั้นจะเพิ่มขึ้นเป็นเส้นตรง ทีละส่วนสำหรับการส่งผ่านที่น่ารังเกียจทางผิวหนัง ในความเป็นจริงมีการกล่าวกันว่าคุณสามารถลดการขยายตัวสองเท่าของอนาคตได้อย่างใจเย็น หลังจากนั้นค่อยเพิ่มโยคะทีละขั้นตอน

กลไกการส่งผ่านค่าใช้จ่าย อุซากัลเลนเนีย

เช็คซัม เปิดเผยการสร้างการต่อสู้ในแพ็คเกจที่ได้รับ
จับเวลา Vіdl_k _interval och_kuvannya ที่ vkaz_vka บน yogo zakіchennya ส่วนที่เหลือหมายความว่าแพ็คเกจมีความสามารถในการถ่ายโอนในระดับสูงหรือใช้ใบเสร็จรับเงินระหว่างการส่ง ในเวลาเดียวกัน หากพัสดุถูกนำส่งจากการอุดตันแต่ไม่ได้ใช้งาน (ก่อนสิ้นสุดช่วงชำระเงิน) มิฉะนั้นใบเสร็จจะสูญหาย การส่งซ้ำจะทำได้จนกว่าพัสดุจะทำซ้ำในด้านที่ได้รับ .
หมายเลขลำดับ หมายเลขลำดับของแพ็คเกจซึ่งถูกครอบงำโดยด้านการถ่ายโอน "Probіli" ในจำนวนแพ็คเกจที่ถ่าย อนุญาตให้คุณเพิ่มหนวดเกี่ยวกับการใช้เงิน หมายเลขลำดับและแพ็กเก็ตเดียวกันหมายความว่าแพ็กเก็ตซ้ำกัน
ใบเสร็จ "+" และ "-" มันถูกสร้างขึ้นโดยฝั่งที่รับ และระบุฝั่งที่ส่งไปยังฝั่งที่รับแพ็กเก็ต หรือกลุ่มของแพ็กเก็ตที่รับหรือไม่รับ โทรยืนยันหมายเลขการสั่งซื้อและรับแพ็คเก็ตสำเร็จ ตามโปรโตคอล การยืนยันรายบุคคลและกลุ่มจะถูกแบ่งตามโปรโตคอล
Vikno/สายพานลำเลียง ล้อมรอบช่วงของหมายเลขประจำเครื่อง เพื่อให้คุณสามารถชนะการถ่ายโอนแพ็กเก็ต การถ่ายโอนกลุ่มและการจับมือช่วยให้เพิ่มขึ้นอย่างมาก ฉันจะผ่านอาคารโปรโตคอลที่โหมดpor_vnyannі z ochіkuvannya podverdzhennya Rozmіr vykna สามารถประกันซ้ำได้บนพื้นฐานของความเป็นไปได้ในการรับและการบัฟเฟอร์ด้านรับรวมถึงระดับของการใช้อักษรตัวพิมพ์ใหญ่

คุณสมบัติการเขียนโปรแกรม

  1. สตรีมการเชื่อมต่อ TCP
    • สถานการณ์ a) เป็นไปได้ ดาวสกปรกเพียงหนึ่งชั่วโมงระหว่างการมาถึงของกลุ่มดาตาแกรมของแม่น้ำ Merezny นั้นยอดเยี่ยมมาก:
      • คอมพิวเตอร์ 1 เมื่อได้รับชัยชนะส่งฟังก์ชัน;
      • คอมพิวเตอร์ 2 ไม่ได้ใช้ข้อมูลทั้งหมดในหนึ่งรอบ recv (ต้องใช้รอบของรอบ)
    • สถานการณ์ b) เป็นไปได้ เนื่องจากช่วงเวลาระหว่างชั่วโมงระหว่างการเรียกใช้ฟังก์ชันจะส่ง malium และการขยายตัวของ malium เหล่านี้:
      • ฟังก์ชัน vicorist ของคอมพิวเตอร์ 1 ส่ง sprat ครั้ง;
      • คอมพิวเตอร์ 2 รับข้อมูลทั้งหมดในคลิกเดียว
  2. เบื้องหลังโปรโตคอล UDP
    • สถานการณ์ ก) - เป็นไปไม่ได้
      • คอมพิวเตอร์1 เมื่อมีฟังก์ชั่น send บนเส้นขอบ UDP-segment จะถูกแบ่งออกเป็นกลุ่มย่อยของแพ็กเก็ต
      • คอมพิวเตอร์ 2 รับส่วนทุกครั้งด้วยการคลิก recv เพียงครั้งเดียวและมีเพียงไม่กี่รายการเท่านั้นที่มาในดาตาแกรม IP ทั้งหมด
    • สถานการณ์ b) - เป็นไปไม่ได้
      • ทวีต sendto ที่แตกต่างกันบนคอมพิวเตอร์1 ได้รับอนุญาตให้ใช้กับดาตาแกรม UDP ที่แตกต่างกันและทวีต recvfrom ที่แตกต่างกันบนคอมพิวเตอร์2
  3. เนื่องจากบัฟเฟอร์สำหรับฟังก์ชัน recv และ recvfrom มีขนาดเล็กกว่า ขนาดของข้อมูลที่ส่ง จากนั้นสำหรับโหมด UDP ข้อมูลบางส่วนจึงสูญเปล่า และสำหรับโหมด TCP ส่วนเกินจะถูกบันทึกสำหรับการเรียก recv ที่ไม่เหมาะสม
  4. เซิร์ฟเวอร์ UDP สามารถมี 1 ซ็อกเก็ต และเซิร์ฟเวอร์ TCP สามารถมีซ็อกเก็ตที่แตกต่างกันจำนวนมาก (ต่อไคลเอ็นต์ที่เชื่อมต่อรายชั่วโมง) และข้อมูลของตัวเองจะถูกส่งไปยังสกิน

© 2022 androidas.ru - ทั้งหมดเกี่ยวกับ Android