一、簡述osi七層模型和TCP/IP五層模型react
![](http://static.javashuo.com/static/loading.gif)
osi七層模型分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。docker
1)物理層:這一層的主要功能是二進制傳輸數據,界定鏈接器和網線的規格;爲啓動、維護以及關閉物理鏈路定義了電氣規範、機械規範、過程規範和功能規範vim
2)數據鏈路層:這一層的主要功能是互連設備之間傳送和識別數據幀;定義如何格式化數據以便進行傳輸以及如何控制對網絡的訪問windows
3)網絡層:這一層的主要功能是地址管理和路由選擇;路由數據包,選擇傳遞數據的最佳路徑,支持邏輯尋址和路徑選擇centos
4)傳輸層:這一層主要功能是管理兩個節點之間的數據傳輸,負責可靠傳輸;確保數據傳輸的可靠性(確保數據被可靠地傳送到目標地址);創建、維護和終止虛擬電路;經過錯誤檢查和恢復;信息流控制來保障可靠性。bash
5)會話層:這一層的主要功能是通訊管理;創建、管理和終止在應用程序之間的會話。服務器
6)表示層:這一層的主要功能是設備固有數據格式和網絡標準數據格式的轉換;確保接受系統能夠讀出該數據、格式化數據、構建數據;協商用於應用層的數據傳輸語法;提供加密。網絡
7)應用層:這一層的主要功能是針對特定應用協議爲其應用程序進程提供網絡服務;提供用戶身份驗證。併發
tcp/ip協議棧把網絡分爲5層結構,分別是物理層、數據鏈路層、internet層和應用層。tcp
1)物理層:負責數據傳輸的硬件,這種硬件就至關於以太網或電話線路等物理層的硬件。
2)數據鏈路層:數據鏈路層也叫數據接口層,它是利用以太網中的數據鏈路層進行通訊。咱們能夠理解爲網卡驅動程序,驅動程序是在操做系統與硬件之間起橋樑做用的軟件。咱們在使用計算機外圍設備時,不是把外圍設備插上就能夠立刻可使用,一般還須要相應的驅動程序支持才能夠。
3)internet層:internet層使用ip 協議,它至關於OSI模型中的第3層網絡層。IP協議基於ip地址轉發、分組數據報文。
4)傳輸層:TCP/IP的傳輸層有兩個具備表明行的協議(tcp/udp),該層的功能自己與OSI參考模型中的傳輸層相似;傳輸層的最主要功能就是可以讓應用程序之間實現通訊,在計算機內部,一般同一時間運行着衆多程序,爲此,咱們用端口號來識別這些程序。
5)應用層:TCP/IP的分層模型中將OSI參考模型中的會話層、表示層和應用層的功能都集中到了應用層中實現。這些功能有時由一個點一的程序實現,有時也有可能會有多個程序實現,所以,細看TCP/IP的應用層的功能會發現,它不只僅實現OSI模型中的應用層的內容,它還要實現會話層與表示層的功能。
二、總結描述TCP三次握手四次揮手
![](http://static.javashuo.com/static/loading.gif)
tcp三次握手如上圖所示:
第一次握手:客戶端主動向服務端發送鏈接請求報文,SYN=1(請求創建鏈接),seq=x(x是一個隨機正整數),而後客戶端從CLOSED狀態轉變爲SYN_SENT狀態;
第二次握手:服務端收到來自客戶端的syn包會回覆一個確認報文給客戶端的SYN(ack=x+1)表示服務端已經收到了客戶端的鏈接請求,同時服務端也發送一個SYN包(SYN=1,ACK=1,seq=y其中SYN=1,ACK=1表示服務端贊成客戶端的鏈接請求。),服務端將確認包和SYN包一併發送給客戶端,而後服務端由LISTEN狀態轉變爲SYN_RCVD狀態;
第三次握手:客戶端收到服務端的確認包和SYN包後,客戶端會回覆一個確認包(ACK=1,seq=x+1,ack=y+1),ACK=1表示上一條的確認號字段有效,此時,當服務端收到來自客戶端的回覆報文後,客戶端和服務端的狀態都會變成ESTABLISHED狀態,有了上面三次握手後,後續就能夠正常的收發數據了;
![](http://static.javashuo.com/static/loading.gif)
tcp/ip四次揮手如上圖所示:
第一次揮手:客戶端主動向服務端發送FIN=1,seq=u,表示斷開鏈接請求。客戶端從ESTABLISHED狀態轉化爲FIN-WAIT-1的狀態;
第二次揮手:服務端收到客戶端的斷開鏈接請求,服務端會回覆客戶端一個確認包(ACK=1,seq=v,ack=u+1)表示服務端已經收到了客戶端的斷開鏈接請求,此時服務端不會立馬斷開,它還要看它這邊的數據是否傳輸完畢,若沒有傳輸完畢,它將會繼續傳輸數據,直到把數據傳輸完。客戶端收到服務端的確認報文後,客戶端狀態由FIN-WAIT-1變爲FIN-WAIT-2,服務端由ESTABLISHED狀態變爲CLOSE-WAIT狀態;
第三次揮手:當服務端把數據傳輸完後,它會再向客戶端發送一條斷開請求的報文(FIN=1,ACK=1,seq=w,ack=u+1),表示服務端已經把數據傳輸完畢,斷開吧。此時服務端的狀態由CLOSE-WAIT狀態變爲LAST-ACK狀態;
第四次揮手:當客戶端收到服務端的斷開請求後,客戶端會回覆服務端一條確認斷開請求的確認包(ACK=1,seq=u+1,ack=w+1),表示贊成服務端斷開鏈接,此時客戶端的狀態由FIN-WAIT-2變爲TIME-WAIT狀態,服務端收到客戶端的確認包後,服務端的狀態變爲CLOSED狀態,客戶端會等待2MSL後(MSL表示最長報文段生存時間),狀態變爲CLOASED;
三、描述TCP和UDP區別
1)tcp是一種面向鏈接的傳輸層協議,它能夠保證兩端通訊主機之間的通訊可達。tcp可以正確處理在傳輸過程當中丟包、傳輸順序亂掉等異常狀況,此外tcp還可以有效利用帶寬,緩解網絡擁堵。udp有別於tcp,它是一種面向無鏈接的傳輸層協議,udp不會關注對端是否真的收到了傳送過去的數據,若是須要檢查對端是否接收到分組數據包,或者對端是否鏈接到網絡,則須要在應用程序中實現。
2)tcp對系統資源的要求較多,upd較少;
3)tcp是數據流模式(sock_stream)而udp是數據報模式(sock_dgram);
4)tcp工做效率沒有udp工做效率高
四、總結ip分類以及每一個分類能夠分配的IP數量
ip地址是由兩部分組成網絡ID和主機ID,網絡ID標識網絡,每一個網段分配一個網絡ID;主機ID標識單個主機,由組織分給各設備;
ipv4地址格式:點分十進制記法;ip地址是一個32位二進制數;可將此32位二進制劃分爲四組8位二進制八位數,使之可讀;每組二進制八爲數(或字節)都可轉換成十進制數;地址可以使用點分十進制記錄
![](http://static.javashuo.com/static/loading.gif)
A類地址:
0 000 0000 - 0 111 1111(1-127),網絡數:2^7=127,每一個網絡中的主機數爲:2^24,其中要減去兩個特殊地址 網絡Id.0.0.0和網絡id.255.255.255,因此每一個網絡中的可用地址爲2^24-2,默認的子網掩碼是255.0.0.0,私網地址:10.0.0.0 - 10.255.255.255,公共ip地址範圍1.0.0.0 - 9.255.255.255 11.0.0.0 - 126.255.255.255,其中127.0.0.1-127.255.255.254爲本機迴環地址,主要用於測試。
B類地址:
10 00 0000 - 10 111 1111(128-191),網絡數:2^14,每一個網絡中的主機數爲:2^16-2(也要減去兩個特殊地址),默認子網掩碼:255.255.0.0,私網地址範圍:172.16.0.0-172.31.255.255,公共ip地址範圍128.0.0.0 - 172.15.255.255 172.32.0.0 - 191.255.255.255
C類地址:
110 0 0000 - 110 1 1111(192-223),網絡數:2^21,每一個網絡中的主機數爲:2^8-2(也要減去兩個特殊地址),默認子網掩碼:255.255.255.0,私網地址範圍:192.168.0.0-192.168.255.255,公共ip地址範圍192.0.0.0 -192.167.255.255 192.169.0.0 - 223.255.255.255
D類地址:
1110 0000 - 1110 1111(224-239),組播地址
E類地址爲保留地址未使用,其範圍1111000 - 11111111 (240-255)
經過上面的分類,一個網絡的網絡數等於2^(網絡ID位數),網絡中的主機數等於2^(主機ID位數)-2,其中主機ID位數等於32-默認子網掩碼位數,好比A類地址的網絡數2^7其中7表示網絡ID爲數是7,網絡中的主機數等於2^(32-8)-2
特殊地址:
0.0.0.0:它不是一個真正意義上的ip地址,它表示全部不清楚的主機和目標網絡
255.255.255.255:限制廣播地址,對本機來講,這個地址指本網段內(同一廣播域)的全部主機
127.0.0.1 - 127.255.255.254:本機迴環地址,主要用於測試。在傳輸介質上永遠不該該出現目標地址爲「172.0.0.1」的數據包
224.0.0.0 - 239.255.255.255:組播地址,224.0.0.1特指全部主機,224.0.0.2特指全部路由器,224.0.0.5指OSPF路由器,組播地址多用於一些特定的程序以及多媒體程序
169.254.x.x:若是windows主機使用DHCP自動分配IP地址,而又沒法從DHCP服務器獲取ip地址,系統就會爲主機分配這樣的地址。
五、總結IP配置方法
永久配置方法:
1)修改網卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-enp2s0
說明:後面的ifcfg-enp2s0根據實際狀況網卡的名稱來修改
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR="192.168.0.99"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
DNS1="192.168.0.1"
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp2s0
UUID=ea718503-8af8-41d8-97b1-b394995a22ca
DEVICE=enp2s0
ONBOOT=yes
IPV6_PRIVACY=no
說明:這裏的配置文件須要寫明幾個重點的參數,BOOTPROTO=static表示使用靜態ip,配置了BOOTPROTO=none或者static都表示使用靜態IP須要再配置指定的IP地址,子網掩碼,網關等;IPADDR表示指定的IP地址,NETMASK表示子網掩碼,GATEWAY表示指定網關地址,DNS1表示主DNS地址,DEVICE表示網卡對應的設備別名,ONBOOT表示開機是否啓用網卡。其餘的參數能夠不用設置。
2)保存配置文件後,重啓網絡服務
/etc/init.d/network restart ##centos6
service network restart ##centos六、centos7均可以使用
systemctl restart network ##centos7
固然咱們也能夠用圖形工具和字符工具配置ip地址,centos6上字符工具備setup (固然咱們須要安裝對應的包setuptool)centos7上字符工具備nmtui (對應的包NetworkManager-tui)。centos7命令行工具備nmcli (對應的包NetworkManager),這個工具使用有些複雜,後續再總結。
臨時配置方法:
1)ifconfig命令添加網卡別名:
[root@test ~]#ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:bd:55:ad:ff txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.99 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::230:18ff:fe51:af3c prefixlen 64 scopeid 0x20<link>
ether 00:30:18:51:af:3c txqueuelen 1000 (Ethernet)
RX packets 33830 bytes 30390958 (28.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17385 bytes 1649969 (1.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:30:18:51:af:3d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 8 bytes 424 (424.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 424 (424.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@test ~]#ifconfig enp2s0:0 192.168.0.100/24
[root@test ~]#ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:bd:55:ad:ff txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.99 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::230:18ff:fe51:af3c prefixlen 64 scopeid 0x20<link>
ether 00:30:18:51:af:3c txqueuelen 1000 (Ethernet)
RX packets 33905 bytes 30397068 (28.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17441 bytes 1657579 (1.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255
ether 00:30:18:51:af:3c txqueuelen 1000 (Ethernet)
enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:30:18:51:af:3d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 8 bytes 424 (424.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 424 (424.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@test ~]#
說明:以上命令是給enp2s0這個網卡綁定一個臨時地址,固然咱們重啓網絡服務這個地址將不會保存,或者咱們不想要這個地址了,能夠用ifconfig enp2s0 down 命令將其禁用
2)ip命令添加網卡別名
[root@test ~]#ip addr show enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#systip addr add 172.16.1.2/16 dev enp2s0
[root@test ~]#ip addr add show2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#
說明:以上命令是給enp2s0網卡綁定一個地址爲172.16.1.2/24的地址
[root@test ~]#ip addr add show2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#ip addr add 172.16.1.3/16 dev enp2s0 label enp2s0:0
[root@test ~]#ip addr add show enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.3/16 scope global secondary enp2s0:0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#
說明:以上命令表示給enp2s0網卡綁定ip爲172.16.1.3/16的地址,並設置標籤名爲enp2s0:0,這個標籤名必須是已經有的網絡設備名後面加冒號數字
[root@test ~]#ip a s enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.3/16 scope global secondary enp2s0:0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#ip addr flush dev enp2s0 label enp2s0:0
[root@test ~]#ip addr s enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0
valid_lft forever preferred_lft forever
inet 172.16.1.2/16 scope global enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::230:18ff:fe51:af3c/64 scope link
valid_lft forever preferred_lft forever
[root@test ~]#
說明:以上命令表示清除某條網卡別名上的記錄,固然想要所有清空,則能夠選擇重啓網絡服務便可
root@test network-scripts]#cat ifcfg-enp2s0:0
DEVICE=enp2s0:0
IPADDR=172.16.1.2
NETMASK=255.255.0.0
GATEWAY=172.16.1.1
[root@test network-scripts]#
說明:若想要保存永久的保存網卡別名地址,咱們能夠在/etc/sysconfig/network-scripts/目錄下新建一個名爲ifc-網卡別名的文件如:ifc-enp2s0:0,內容如上所示