ทำไมฉันถึงส่ง Ping ได้ 127.1?


11

ฉันรู้ว่า IPv6 อนุญาตให้ละเว้นค่าศูนย์ต่อเนื่อง แต่แล้ว IPv4 ล่ะ? ฉันไม่พบข้อมูลอ้างอิงเกี่ยวกับสิ่งนี้ทางอินเทอร์เน็ตรวมถึง Wikipedia และRFC 791 - Internet Protocol เอกสารนี้ แนะนำว่า "ละเว้นศูนย์นำหน้า" ในที่อยู่ IPv4 (ค้นหาคำว่า 'ละเว้น') ไม่เจาะจงพอ

ลองดูเซสชันเชลล์นี้:

[~]$ ping -c 1 127.1
PING 127.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms

--- 127.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms
[~]$ ping -c 1 127.0.1
PING 127.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.044 ms

--- 127.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.044/0.044/0.044/0.000 ms
[~]$ ssh 127.1 :
The authenticity of host '127.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is 04:48:fa:f2:ef:95:7c:35:46:39:2e:d3:89:dd:cd:87.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.1' (ECDSA) to the list of known hosts.
alex@127.1's password: 

เห็นได้ชัดว่าทั้ง ping และ ssh เข้าใจ 127.1 และ 127.0.1 เหมือนกันกับ 127.0.0.1 สิ่งนี้ระบุไว้ที่ไหน?


7
หน้าคู่มือนี้เชื่อมโยงในโพสต์สแต็คโอเวอร์โฟลว์นี้อาจอยู่ในซอยของคุณ
nerdwaller

1
นั่นคือรูปแบบสัญกรณ์โบราณ แต่ใช่: ใช้งานได้ :-)
Sander Steffann

1
@nerdwaller: โปรดโพสต์เป็นคำตอบ (คะแนนโบนัสถ้าคุณคิดว่าทำไมping 0.0.0.0หรือping 0ทำงานในลักษณะเดียวกัน ... )
user1686

คำตอบ:


14

มีการโพสต์กองมากเกินจากปีที่ผ่านมาขอให้สิ่งที่คล้ายกัน (เป็นโพสต์นี้ )

เหตุผลหลักคือวิธีinet_aton()( man page ) แปลง octets เป็นที่อยู่ไบนารี

เอบีซีดี

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

abc

ส่วน a และ b ระบุสองไบต์แรกของไบนารีที่อยู่ ส่วน c ถูกตีความว่าเป็นค่า 16 บิตที่กำหนดสองไบต์ขวาสุดของที่อยู่ไบนารี สัญลักษณ์นี้เหมาะสำหรับการระบุที่อยู่เครือข่ายคลาส B (outmoded)

AB

ส่วน a ระบุไบต์แรกของที่อยู่ไบนารี ส่วน b ถูกตีความว่าเป็นค่า 24 บิตที่กำหนดสามไบต์ขวาสุดของที่อยู่ไบนารี สัญลักษณ์นี้เหมาะสำหรับการระบุที่อยู่เครือข่ายคลาส C (เก่า)

a

ค่า a ถูกตีความว่าเป็นค่า 32- บิตที่จัดเก็บโดยตรงไปยังที่อยู่ไบนารีโดยไม่มีการจัดเรียงไบต์ใหม่

สิ่งนี้ไม่ได้ถูกกำหนดโดย POSIX สิ่งใด ๆ - แต่มันก็มีอยู่ค่อนข้างกว้างขวาง


1
เยี่ยมมากและฉันก็ตรวจสอบโพสต์ที่คุณลิงก์ไว้ใน Stack Overflow ด้วย มันมีข้อมูลเชิงลึกที่ยอดเยี่ยมเกี่ยวกับวิธีการใช้ระบบตัวเลขที่แตกต่างกัน @grawity Wikipediaพูดว่า 0.0.0.0/8 เป็นเครือข่ายปัจจุบัน ฉันถือว่า 0.0.0.0/32 ต้องเป็นโฮสต์ปัจจุบันและ ping นั้นคาดหวังเพียง / 32 "เครือข่าย" ฉันไม่พบการอ้างอิงที่ชัดเจนว่า
Alexandre de Verteuil

2
@AlexandredeVerteuil: ping คาดว่าจะมีโฮสต์ไม่ใช่เครือข่าย ... ดังนั้นใช่ / 32 สำหรับ IPv4
user1686

3

มันเป็นของที่ระลึกจากวันเก่าแก่ของที่อยู่ที่มีระดับ 127.1หมายถึงเครือข่ายโฮสต์127 1(และใช่127.257ถูกกฎหมายเพราะเครือข่าย127สามารถมีโฮสต์ได้มากกว่า 256 โฮสต์


127.257 ความหมายโดยเฉพาะอย่างยิ่ง 127.0.1.1 ที่อยู่ที่ฉันเห็นบนตัวกระตุ้นเซิร์ฟเวอร์ KMS เก่าที่ทำงานบน Windows 8.0
Paul Stelian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.