OSI七層模型
它是一個(gè)由國(guó)際標(biāo)準(zhǔn)化組織??提出的概念模型,試圖提供一個(gè)使各種不同的計(jì)算機(jī)和網(wǎng)絡(luò)在世界范圍內(nèi)實(shí)現(xiàn)互聯(lián)的標(biāo)準(zhǔn)框架

數(shù)據(jù)傳輸過程
數(shù)據(jù)封裝是由上到下,數(shù)據(jù)解封是由下到上

frame結(jié)構(gòu)

TCP/IP協(xié)議

TCP包頭

TCP端口
0-1023:系統(tǒng)端口或特權(quán)端口(僅管理員可用) ,眾所周知,永久的分配給固定的系統(tǒng)應(yīng)用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-49151:用戶端口或注冊(cè)端口,但要求并不嚴(yán)格,分配給程序注冊(cè)為某應(yīng)用使用,1433/tcp(SqlServer),1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp(memcached)
49152-65535:動(dòng)態(tài)端口或私有端口,客戶端程序隨機(jī)使用的端口
TCP過程
三次握手

第一次握手:主機(jī)A發(fā)送位碼為syn=1,隨機(jī)產(chǎn)生seq number=10001的數(shù)據(jù)包到服務(wù)器,主機(jī)B由SYN=1知道,A要求建立聯(lián)機(jī),此時(shí)狀態(tài)為SYN_SENT
第二次握手:主機(jī)B收到請(qǐng)求后要確認(rèn)聯(lián)機(jī)信息,向A發(fā)送ack number=(主機(jī)A的seq+1),syn=1,ack=1,隨機(jī)產(chǎn)生seq=20001的包,此時(shí)狀態(tài)由LISTEN變?yōu)镾YN_RECV
第三次握手:主機(jī)A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機(jī)A會(huì)再發(fā)送ack number=(主機(jī)B的seq+1),ack=1,主機(jī)B收到后確認(rèn)seq值與ack=1則連接建立成功,雙方狀態(tài)ESTABLISHED
四次揮手

為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢?
這是因?yàn)榉?wù)端的LISTEN狀態(tài)下的SOCKET當(dāng)收到SYN報(bào)文的建連請(qǐng)求后,它可以把ACK和SYN(ACK起應(yīng)答作用,而SYN起同步作用)放在一 個(gè)報(bào)文里來發(fā)送。但關(guān)閉連接時(shí),當(dāng)收到對(duì)方的FIN報(bào)文通知時(shí),它僅僅表示對(duì)方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對(duì)方了,所以你可以未 必會(huì)馬上會(huì)關(guān)閉SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對(duì)方之后,再發(fā)送FIN報(bào)文給對(duì)方來表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的ACK報(bào)文 和FIN報(bào)文多數(shù)情況下都是分開發(fā)送的
為什么TIME_WAIT狀態(tài)還需要等2MSL后才能返回到CLOSED狀態(tài)?
因?yàn)殡m然雙方都同意關(guān)閉連接了,而且握手的4個(gè)報(bào)文也都發(fā)送完畢,按理可以直接回到CLOSED 狀態(tài)(就好比從SYN_SENT 狀態(tài)到ESTABLISH 狀態(tài)那樣),但是我們必須假想網(wǎng)絡(luò)是不可靠的,你無法保證你(客戶端)最后發(fā)送的ACK報(bào)文一定會(huì)被對(duì)方收到,就是說對(duì)方處于LAST_ACK 狀態(tài)下的SOCKET可能會(huì)因?yàn)槌瑫r(shí)未收到ACK報(bào)文,而重發(fā)FIN報(bào)文,所以這個(gè)TIME_WAIT 狀態(tài)的作用就是用來重發(fā)可能丟失的ACK報(bào)文
關(guān)閉TCP連接一定需要4次揮手嗎?
不一定,4次揮手關(guān)閉TCP連接是最安全的做法。但在有些時(shí)候,我們不喜歡TIME_WAIT 狀態(tài)(如當(dāng)MSL數(shù)值設(shè)置過大導(dǎo)致服務(wù)器端有太多TIME_WAIT狀態(tài)的TCP連接,減少這些條目數(shù)可以更快地關(guān)閉連接,為新連接釋放更多資源),這時(shí)我們可以通過設(shè)置SOCKET變量的SO_LINGER標(biāo)志來避免SOCKET在close()之后進(jìn)入TIME_WAIT狀態(tài),這時(shí)將通過發(fā)送RST強(qiáng)制終止TCP連接(取代正常的TCP四次握手的終止方式)。但這并不是一個(gè)很好的主意,TIME_WAIT 對(duì)于我們來說往往是有利的
TCP特性
- TCP面向連接(如打電話要先撥號(hào)建立連接)
- TCP提供可靠的服務(wù)。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯(cuò),不丟失,不重復(fù),且按序到達(dá)
- TCP面向字節(jié)流,實(shí)際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流
- 每一條TCP連接只能是點(diǎn)到點(diǎn)的
- TCP首部開銷20字節(jié)
- TCP的邏輯通信信道是全雙工的可靠信道
UDP協(xié)議
UDP包頭

UDP特性
- UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
- UDP盡最大努力交付,即不保 證可靠交付
- UDP是面向報(bào)文的 ,沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用,如IP電話,實(shí)時(shí)視頻會(huì)議等)
- UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通信
- UDP的首部開銷小,只有8個(gè)字節(jié)
- UDP是不可靠信道
ARP協(xié)議
地址解析協(xié)議 ,是根據(jù)IP地址獲取MAC地址的一個(gè)TCP/IP協(xié)議
ARP報(bào)文格式

ARP工作原理

IP地址
它們可唯一標(biāo)識(shí)IP網(wǎng)絡(luò)中的每臺(tái)設(shè)備,由網(wǎng)絡(luò)ID和主機(jī)ID組成
IP地址分類


私有ip地址

特殊地址
0.0.0.0
不是一個(gè)真正意義上的IP地址。它表示一個(gè)集合:所有不清楚的主機(jī)和目的網(wǎng)絡(luò)
255.255.255.255
限制廣播地址。對(duì)本機(jī)來說,這個(gè)地址指本網(wǎng)段內(nèi)(同一廣播域)的所有主機(jī)
127.0.0.1~127.255.255.254
本機(jī)回環(huán)地址,主要用于測(cè)試。在傳輸介質(zhì)上永遠(yuǎn)不應(yīng)該出現(xiàn)目的地址為“127.0.0.1”的數(shù)據(jù)包
224.0.0.0到239.255.255.255
組播地址,224.0.0.1特指所有主機(jī),224.0.0.2特指所有路由器。224.0.0.5指OSPF 路由器,地址多用于一些特定的程序以及多媒體程序
169.254.x.x
如果Windows主機(jī)使用了DHCP自動(dòng)分配IP地址,而又無法從DHCP服務(wù)器獲取地址,系統(tǒng)會(huì)為主機(jī)分配這樣地址
保留地址
主機(jī)位全為0:表示本網(wǎng)段網(wǎng)絡(luò)地址
主機(jī)位全為1:表示本網(wǎng)段廣播地址
子網(wǎng)掩碼
網(wǎng)絡(luò)ID位全為1即為本網(wǎng)段的子網(wǎng)掩碼??筛鶕?jù)實(shí)際情況,通過借位來劃分子網(wǎng)和合并子網(wǎng)

路由
路由是指分組從源到目的地時(shí),決定端到端路徑的網(wǎng)絡(luò)范圍的進(jìn)程
分類:主機(jī)路由、網(wǎng)絡(luò)路由、默認(rèn)路由
優(yōu)先級(jí):精度越高,優(yōu)先級(jí)越高
DHCP
動(dòng)態(tài)主機(jī)配置協(xié)議??梢宰詣?dòng)分配IP地址

網(wǎng)絡(luò)配置文件
網(wǎng)卡配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=此配置文件應(yīng)用到的設(shè)備
HWADDR=對(duì)應(yīng)的設(shè)備的MAC地址
BOOTPROTO=激活此設(shè)備時(shí)使用的地址配置協(xié)議,常用的dhcp, static, none, bootp
NM_CONTROLLED=NM是NetworkManager的簡(jiǎn)寫,此網(wǎng)卡是否接受NM控制;建議CentOS6為“no”
ONBOOT=在系統(tǒng)引導(dǎo)時(shí)是否激活此設(shè)備
TYPE=接口類型;常見有的Ethernet, Bridge
UUID=設(shè)備的惟一標(biāo)識(shí)
IPADDR=指明IP地址
PREFIX=掩碼長(zhǎng)度(centos7中支持)
NETMASK=子網(wǎng)掩碼
GATEWAY: 默認(rèn)網(wǎng)關(guān)
DNS1=第一個(gè)DNS服務(wù)器指向
DNS2=第二個(gè)DNS服務(wù)器指向
USERCTL=普通用戶是否可控制此設(shè)備
PEERDNS=如果BOOTPROTO的值為“dhcp”,是否允許dhcpserver分配的dns服務(wù)器指向信息直接覆蓋至/etc/resolv.conf文件中
路由配置文件
/etc/sysconfig/network-scripts/route-eth0
target/prefix via GW
ADDRESS=目標(biāo)IP地址
NETMASK=子網(wǎng)掩碼
GATEWAY=網(wǎng)關(guān)
DNS配置文件
/etc/hosts
負(fù)責(zé)ip地址與域名快速解析的文件,hosts文件包含了IP地址和主機(jī)名之間的映射,在域名解析的過程中,會(huì)先查看hosts文件中是否有域名和ip地址之間的映射關(guān)系,如果沒有則向DNS服務(wù)器發(fā)起域名解析的請(qǐng)求
[root@centos6 network-scripts]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf
DNS服務(wù)器配置,當(dāng)主機(jī)要訪問某個(gè)域名的時(shí)候,就會(huì)向resolv.conf的中的DNS服務(wù)器發(fā)起解析的請(qǐng)求
[root@centos6 network-scripts]# cat /etc/resolv.conf
# Generated by NetworkManager
domain magedu.com
search magedu.com localdomain
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 192.168.94.1
bond配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=設(shè)備名
ONBOOT=是否開機(jī)啟動(dòng)
NM_CONTROLLED=是否允許networkmanager管理
BOOTPROTO=激活此設(shè)備時(shí)使用的地址配置協(xié)議,常用的dhcp, static, none, bootp
BONDING_OPTS=miimon是用來進(jìn)行鏈路監(jiān)測(cè)的。如果miimon=100,那么系統(tǒng)每100ms 監(jiān)測(cè)一次鏈路連接狀態(tài),如果有一條線路不通就轉(zhuǎn)入另一條線路。mode表示當(dāng)前bond的工作模式
IPADDR=指明IP地址
NETMASK=子網(wǎng)掩碼
Bonding
是一種允許將多個(gè)物理以太網(wǎng)接口綁定成單一的虛擬接口,同時(shí)增加數(shù)據(jù)帶寬并且提供故障切換的技術(shù),是網(wǎng)卡層面的高可用方案
工作模式
mode=0(balance-rr)
mode=0具有負(fù)載均衡和容錯(cuò)的能力。采用Round Robin方式,依次有第一個(gè)slave網(wǎng)卡至最后一個(gè)slave網(wǎng)卡來傳送數(shù)據(jù)包,每一塊slave網(wǎng)卡都在輪流進(jìn)行工作。如果其中一個(gè)slave網(wǎng)卡故障失效,整機(jī)的網(wǎng)絡(luò)通信可以正常運(yùn)轉(zhuǎn)。需要上聯(lián)交換機(jī)進(jìn)行配置支持。
mode=1(active-backup)
mode=1模式下,同一時(shí)間只有一個(gè)網(wǎng)卡在工作,其他的網(wǎng)卡不工作。當(dāng)當(dāng)前的slave網(wǎng)卡故障失效后,其他的slave網(wǎng)卡開始接替工作
mode=1模式下,不需要上聯(lián)交換機(jī)進(jìn)行配置支持
mode=2(balance-xor)
本模式下,既具備負(fù)載平衡功能,也具備容錯(cuò)功能。需要上聯(lián)交換機(jī)進(jìn)行配置支持。
mode=3(broadcast)
所有slave網(wǎng)卡都會(huì)接收和發(fā)送數(shù)據(jù)包,本模式主要提供容錯(cuò)能力,任一張slave網(wǎng)卡故障失效,整機(jī)的網(wǎng)絡(luò)通信仍可正常運(yùn)轉(zhuǎn)。需要上聯(lián)交換機(jī)進(jìn)行配置支持。
mode=4(802.3ad)
802.3ad是正式的交換機(jī)連接聚合技術(shù),需要交換機(jī)本身支持802.3ad,而本機(jī)網(wǎng)卡也需要支持ethtool
mode=5(balance-tlb)
該模式下,是根據(jù)每個(gè)slave網(wǎng)卡的負(fù)載情況選擇slave網(wǎng)卡進(jìn)行發(fā)送,接收時(shí)使用當(dāng)前輪到的slave。該模式要求slave接口的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)有某種ethtool支持;而且ARP監(jiān)控不可用。該種模式不需要上聯(lián)交換機(jī)做特殊的配置支持。如果正在接受數(shù)據(jù)的slave出故障了,另一個(gè)slave網(wǎng)卡會(huì)接管MAC地址
mode=6(balance-alb)
該模式是在mode=5的tlb基礎(chǔ)上增加了rlb(接收負(fù)載均衡receiveload balance)。不需要上聯(lián)交換機(jī)做特殊配置支持。接收負(fù)載均衡是通過ARP協(xié)商實(shí)現(xiàn)的
Team
網(wǎng)絡(luò)組,是將多個(gè)網(wǎng)卡聚合在一起,從而實(shí)現(xiàn)冗錯(cuò)和提高吞吐量,是RHEL7種一種新技術(shù),bonding的升級(jí)版
Bridge
網(wǎng)橋,可以實(shí)現(xiàn)橋接功能