本文僅供學(xué)習(xí)交流使用,侵權(quán)必刪臼节。
不作商業(yè)用途撬陵,轉(zhuǎn)載請(qǐng)注明出處
IP地址,又稱網(wǎng)際協(xié)議地址网缝,由32位組成巨税。IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式,為網(wǎng)絡(luò)世界中的每一個(gè)網(wǎng)絡(luò)和每一臺(tái)主機(jī)分配一個(gè)邏輯地址粉臊,以此來屏蔽物理地址的差異草添。
IP報(bào)文頭
- Version(版本):4位,定義IP協(xié)議版本扼仲。是使用IPv4還是IPv6远寸。兩臺(tái)機(jī)器必須使用一致的版本號(hào),否則無法建立通信
- Hdr Len(頭部長度):4位屠凶,定義數(shù)據(jù)報(bào)文頭的長度驰后。協(xié)議頭最小值為5,最大值為15
- Type of Service(服務(wù)):8位阅畴,該字段定義上層協(xié)議對(duì)處理當(dāng)前數(shù)據(jù)報(bào)所期望的服務(wù)質(zhì)量倡怎,并對(duì)數(shù)據(jù)報(bào)按照重要性級(jí)別進(jìn)行分配。前3位成為優(yōu)先位贱枣,后面4位成為服務(wù)類型监署,最后1位沒有定義。這些8位字段用于分配優(yōu)先級(jí)纽哥、延遲钠乏、吞吐量以及可靠性
- Identification(標(biāo)識(shí)):表示當(dāng)前是第幾個(gè)分片,數(shù)據(jù)報(bào)文重組時(shí)用到
- Flag(標(biāo)記):3位春塌,該字段由3位字段構(gòu)成晓避,其中最低位(MF)控制分段簇捍,存在下一個(gè)分段置為1,否則置0代表該分段是最后一個(gè)分段俏拱。中間位(DF)指出數(shù)據(jù)報(bào)是否可進(jìn)行分段暑塑,如果為1則機(jī)器不能將該數(shù)據(jù)報(bào)進(jìn)行分段。第三位即最高位保留不使用锅必,值為0
- Fragment Offset(分段偏移):13位事格,表示分段數(shù)據(jù)在源數(shù)據(jù)報(bào)文中的相對(duì)位置,
- TTL(生存時(shí)間):8位搞隐,表示改報(bào)文的存活時(shí)間驹愚。每過1ms或者經(jīng)過一個(gè)網(wǎng)關(guān),TTL的值就減1劣纲。當(dāng)TTL為0時(shí)逢捺,該報(bào)文被認(rèn)為目的主機(jī)不可達(dá),直接丟棄癞季。
- Protocol(協(xié)議):8位劫瞳,表示上層使用的協(xié)議,例如是TCP余佛、UDP柠新、ICMP、IGP等等辉巡。
- Header Checksum(頭部校驗(yàn)和):16位恨憎,該字段幫助確保IP協(xié)議頭的完整性。由于某些協(xié)議頭字段的改變郊楣,這就需要對(duì)每個(gè)點(diǎn)重新計(jì)算和檢驗(yàn)憔恳。計(jì)算過程是先將校驗(yàn)和字段置為0,然后將整個(gè)頭部每16位劃分為一部分净蚤,將個(gè)部分相加钥组,再將計(jì)算結(jié)果取反碼,插入到校驗(yàn)和字段中
- Source IP Address(源地址):32位今瀑,源主機(jī)IP地址
- Destination IP Address(目的地址):32位程梦,目標(biāo)主機(jī)IP地址
查看IP
日常我們查看IP地址的方式有:ip addr(需要iproute2) 或者 ifconfig(需要net-tools)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:4e:65:ff:fe brd ff:ff:ff:ff:ff:ff
inet 172.16.176.152/20 brd 172.16.191.255 scope global dynamic eth0
valid_lft 306370030sec preferred_lft 306370030sec
上面的172.16.176.152/20就是我們的IPv4地址。
ip地址后面的有個(gè)scope是global橘荠,表示eth0這張網(wǎng)卡是對(duì)外的屿附。IP地址上面有一行是link/ether 00:16:3e:15:ff:fe brd ff:ff:ff:ff:ff:ff,這個(gè)是mac地址哥童,就是網(wǎng)卡的物理地址挺份,由6個(gè)byte組成。
上面還有一個(gè)lo(loopback),又稱為回環(huán)接口贮懈,一般就是分配到127.0.0.1這個(gè)地址匀泊。這個(gè)地址一般用于本地优训,不會(huì)出現(xiàn)在網(wǎng)絡(luò)中而是直接經(jīng)過內(nèi)核處理然后返回。
網(wǎng)卡名稱旁邊有一行<BROADCAST,MULTICAST,UP,LOWER_UP>的是網(wǎng)絡(luò)設(shè)備的狀態(tài)標(biāo)識(shí)(net_device flags)
- UP代表處于啟動(dòng)狀態(tài)
- BROADCAST表示這個(gè)網(wǎng)卡可以發(fā)送廣播包
- MULTICAST表示可以發(fā)送多播包
- LOWER_UP代表插著網(wǎng)線
mtu是最大傳輸單元各聘。mtu 1500表示ip packet不能超過1500byte揣非。包括mac頭不超過1518byte(其中mac頭14字節(jié),尾4字節(jié))
qdisc這個(gè)是排隊(duì)規(guī)則伦吠,這里排隊(duì)規(guī)則采用的是pfifo_fast妆兑。排隊(duì)規(guī)則的作用是內(nèi)核通過網(wǎng)絡(luò)發(fā)送數(shù)據(jù)的時(shí)候魂拦,按照這個(gè)接口配置的排隊(duì)規(guī)則將數(shù)據(jù)包push到隊(duì)列中毛仪。pfifo_fast采用先進(jìn)先出的方式,但是pfifo_fast這種規(guī)則的隊(duì)列包含三個(gè)band芯勘,這里面的原理暫時(shí)不太了解箱靴,后面有空再深入學(xué)習(xí)。
CIDR(無類型域間選路)
IP地址172.16.176.152/20荷愕,這個(gè)地址用的就是CIDR表示法衡怀。IP地址由<網(wǎng)絡(luò)號(hào)><主機(jī)號(hào)>組合而成。172.16.176.152/20表示前20位表示網(wǎng)絡(luò)號(hào)安疗,后12位表示主機(jī)號(hào)抛杨。
子網(wǎng)掩碼
另外我們可以通過子網(wǎng)掩碼跟ip地址做按位與運(yùn)算得到網(wǎng)絡(luò)號(hào)。而子網(wǎng)掩碼的二進(jìn)制值就是網(wǎng)絡(luò)位都為1荐类,主機(jī)號(hào)都為0怖现。
那么我的子網(wǎng)掩碼就是255.255.240.0,跟ip地址做按位與運(yùn)算得到網(wǎng)絡(luò)號(hào)為172.16.176.0
廣播地址
廣播地址一般是網(wǎng)絡(luò)號(hào)不變玉罐,主機(jī)號(hào)的二進(jìn)制位都為1屈嗤。得出廣播地址為172.16.191.255
機(jī)器是如何通過IP通信
機(jī)器1需要與機(jī)器2通信,首先會(huì)先判斷兩個(gè)IP地址是否在同一個(gè)網(wǎng)段中吊输,如果是同一個(gè)網(wǎng)段饶号,機(jī)器1直接發(fā)送ARP請(qǐng)求獲取MAC地址。如果不是季蚂,Linux的邏輯判斷如果是一個(gè)跨網(wǎng)段的通信茫船,它會(huì)獲取網(wǎng)關(guān)的MAC地址,然后將包發(fā)過去扭屁。
這里只是非常簡單描述IP層的聯(lián)系算谈,網(wǎng)絡(luò)通信底層邏輯是極其復(fù)雜的。