天天看點

Linux網絡基礎協定和ip管理

1、簡述osi七層模型和TCP/IP五層模型

Linux網絡基礎協定和ip管理

 osi七層模型分别是:實體層、資料鍊路層、網絡層、傳輸層、會話層、表示層、應用層。

  1)實體層:這一層的主要功能是二進制傳輸資料,界定連接配接器和網線的規格;為啟動、維護以及關閉實體鍊路定義了電氣規範、機械規範、過程規範和功能規範

  2)資料鍊路層:這一層的主要功能是互連裝置之間傳送和識别資料幀;定義如何格式化資料以便進行傳輸以及如何控制對網絡的通路

  3)網絡層:這一層的主要功能是位址管理和路由選擇;路由資料包,選擇傳遞資料的最佳路徑,支援邏輯尋址和路徑選擇

  4)傳輸層:這一層主要功能是管理兩個節點之間的資料傳輸,負責可靠傳輸;確定資料傳輸的可靠性(確定資料被可靠地傳送到目标位址);建立、維護和終止虛拟電路;通過錯誤檢查和恢複;資訊流控制來保障可靠性。

  5)會話層:這一層的主要功能是通信管理;建立、管理和終止在應用程式之間的會話。

  6)表示層:這一層的主要功能是裝置固有資料格式和網絡标準資料格式的轉換;確定接受系統可以讀出該資料、格式化資料、建構資料;協商用于應用層的資料傳輸文法;提供加密。

  7)應用層:這一層的主要功能是針對特定應用協定為其應用程式程序提供網絡服務;提供使用者身份驗證。

tcp/ip協定棧把網絡分為5層結構,分别是實體層、資料鍊路層、internet層和應用層。

  1)實體層:負責資料傳輸的硬體,這種硬體就相當于以太網或電話線路等實體層的硬體。

  2)資料鍊路層:資料鍊路層也叫資料接口層,它是利用以太網中的資料鍊路層進行通信。我們可以了解為網卡驅動程式,驅動程式是在作業系統與硬體之間起橋梁作用的軟體。我們在使用計算機外圍裝置時,不是把外圍裝置插上就可以馬上可以使用,通常還需要相應的驅動程式支援才可以。

   3)internet層:internet層使用ip 協定,它相當于OSI模型中的第3層網絡層。IP協定基于ip位址轉發、分組資料封包。

  4)傳輸層:TCP/IP的傳輸層有兩個具有代表行的協定(tcp/udp),該層的功能本身與OSI參考模型中的傳輸層類似;傳輸層的最主要功能就是能夠讓應用程式之間實作通信,在計算機内部,通常同一時間運作着衆多程式,為此,我們用端口号來識别這些程式。

  5)應用層:TCP/IP的分層模型中将OSI參考模型中的會話層、表示層和應用層的功能都集中到了應用層中實作。這些功能有時由一個點一的程式實作,有時也有可能會有多個程式實作,是以,細看TCP/IP的應用層的功能會發現,它不僅僅實作OSI模型中的應用層的内容,它還要實作會話層與表示層的功能。

2、總結描述TCP三向交握四次揮手

Linux網絡基礎協定和ip管理

 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狀态,有了上面三次握手後,後續就可以正常的收發資料了;

Linux網絡基礎協定和ip管理

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;

3、描述TCP和UDP差別

   1)tcp是一種面向連接配接的傳輸層協定,它可以保證兩端通信主機之間的通信可達。tcp能夠正确處理在傳輸過程中丢包、傳輸順序亂掉等異常情況,此外tcp還能夠有效利用帶寬,緩解網絡擁堵。udp有别于tcp,它是一種面向無連接配接的傳輸層協定,udp不會關注對端是否真的收到了傳送過去的資料,如果需要檢查對端是否接收到分組資料包,或者對端是否連接配接到網絡,則需要在應用程式中實作。

  2)tcp對系統資源的要求較多,upd較少;

  3)tcp是資料流模式(sock_stream)而udp是資料報模式(sock_dgram);

  4)tcp工作效率沒有udp工作效率高

4、總結ip分類以及每個分類可以配置設定的IP數量

   ip位址是由兩部分組成網絡ID和主機ID,網絡ID辨別網絡,每個網段配置設定一個網絡ID;主機ID辨別單個主機,由組織分給各裝置;

  ipv4位址格式:點分十進制記法;ip位址是一個32位二進制數;可将此32位二進制劃分為四組8位二進制八位數,使之可讀;每組二進制八為數(或位元組)均可轉換成十進制數;位址可使用點分十進制記錄

Linux網絡基礎協定和ip管理

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位址,系統就會為主機配置設定這樣的位址。

5、總結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       ##centos6、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 ~]#ip addr add 172.16.1.2/16 dev enp2s0  
[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
    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  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
    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 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,内容如上所示

作者:Linux-1874

出處:https://www.cnblogs.com/qiuhom-1874/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.

繼續閱讀