一、簡述osi七層模型和TCP/IP五層模型 編程
OSI七層模型(Open System Interconnection) vim
1).物理層緩存
二進制傳輸 bash
爲啓動,維護以及關閉物理鏈路定義了電氣規範,機械規範,過程規範和功能規範服務器
2).數據鏈路層網絡
訪問介質 socket
定義如何格式化數據以便進行傳輸以及如何控制對網絡的訪問ide
支持錯誤檢測工具
3).網絡層測試
數據傳輸
路由數據包
選擇傳遞數據的最佳路徑
支持邏輯尋址和路徑選擇
4).傳輸層
傳輸問題
確保數據傳輸的可靠性
創建,維護和終止虛擬電路
經過錯誤檢測和恢復
信息流控制來保障可靠性
5).會話層
主機間通訊
創建,管理和終止在應用程序之間的會話
6).表示層
數據表示
確保接受系統能夠讀出該數據
格式化數據
構建數據
協商用於應用層的數據傳輸語法
提供加密
7).應用層
網絡進程訪問應用層
爲應用程序進程(例如:電子郵件,文件傳輸和終端仿真)提供網絡服務
提供用戶身份驗證
TCP/IP協議棧
1)物理層
2)數據鏈路層
物理層和數據鏈路層統稱爲網絡訪問層
3)Internet層
4)傳輸層
5)應用層
二、總結描述TCP三次握手四次揮手
源端口,目標端口:計算機上進程之間通訊是經過端口,端口某個時刻只能被一個進程佔用,因此經過指定源端口和目標端口,可知道哪兩個進程須要通訊
序列號:表示本報文段所發送數據的第一個字節的編號,在TCP鏈接中所傳送的字節流的每個字節都會按順序編號。
確認號: 表示接收方指望收到發送方下一個報文段的第一個字節數據的編號
數據偏移: 表示TCP報文段的首部長度,共4位,因爲TCP首部包含一個長度可變的選項部分,須要指定這個TCP報文段到底有多長,它指出TCP報文段的數據起始處距離TCP報文段的起始處有多遠
URG: 表示本報文段中發送的數據是否包含緊急數據,後面的緊急指針字段只有當URG=1時,纔有效
ACK: 表示是否前面確認號字段是否有效,只有當ACK=1時,前面的確認號字段纔有效,TCP規定,鏈接創建後,ACK必須爲1,帶ACK標誌的TCP報文段稱爲確認報文段
PSH: 提示接收端應用程序應該當即從TCP接受緩衝區中讀走數據,爲接受後續數據騰出空間,若是爲1,則表示對方應當當即把數據提交給上層應用,而不是緩存起來,若是應用程序不將接受到的數據讀走,就會一直停留在TCP接收緩衝區中
RST: 若是收到一個RST=1的報文,說明與主機的鏈接出現了嚴重錯誤(如主機崩潰),必須釋放鏈接,而後在從新創建鏈接,或者說明上次發送給主機的數據有問題,主機拒絕響應,帶RST標誌的TCP報文段稱爲復位報文段
SYN: 在創建鏈接時使用,用來同步序號
當SYN=1,ACK=0,表示這是一個請求創建鏈接的報文段,
當SYN=1,ACK=1時表示對方贊成創建鏈接,
SYN=1,說明這是一個請求創建鏈接或贊成創建鏈接的報文,只有前面兩次握手中SYN才置爲1,帶SYN標誌的TCP報文段稱爲同步報文段
FIN: 表示通知對方本端要關閉鏈接,標記數據是否發送完畢,若是FIN=1,即告訴對方」數據已經發送完畢,能夠釋放鏈接了」;帶FIN標誌的TCP報文段稱爲:結束報文段
窗口大小: 表示如今容許對方發送的數據量,即,從本報文段的確認號開始容許對方發送的數據量,達到此值,須要ACK確認後才能繼續傳送後面數據。
校驗和: 提供額外的可靠性
緊急指針: 標記緊急數據在數據字段中的位置
選項部分: 其最大長度可根據TCP首部長度進行推算,TCP首部長度用4位表示,選項部分最長爲40字節
TCP三次握手,是指創建一個TCP鏈接時,須要客戶端和服務器端總共發送3個包
三次握手的目的是鏈接服務器指定端口,創建TCP鏈接,並同步鏈接雙方的序列號和確認號並交換TCP窗口大小信息,在socket編程中,客戶端執行connect()時,將觸發三次握手
第一次握手:客戶端發送一個TCP的SYN標誌位置1的包,指明客戶打算鏈接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段裏
第二次握手: 服務器發回確認包(ACK)應答,即SYN標誌位和ACK標誌位均爲1,同時確認序號設置爲客戶的序號加1,即X+1
第三次握手: 客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1,而且把服務器發來ACK的序號字段+1,放在肯定字段中發給對方,而且在數據段放寫ISN的+1
TCP四次揮手
第一次揮手:客戶端發送了一個FIN報文,報文中會指定一個序列號,此時客戶端狀態爲FIN_WAIT1狀態
第二次揮手:服務端收到FIN以後,會發送ACK報文,而且包客戶端的序列號+1,做爲ACK報文的序列號值,代表已經收到了客戶端的報文了,此時服務端處於CLOSE_WAIT狀態
第三次揮手:若是服務端也想斷開鏈接了,和客戶端的第一次揮手同樣,發給FIN報文,且指定一個序列號,此時服務端處於LAST_ACK狀態
第四次揮手:客戶端收到FIN以後,同樣發送一份ACK報文做爲應答,而且把服務器的序列號+1,做爲本身的ACK報文的序列號值,此時客戶端處於TIME_WAIT狀態,注意此時TCP鏈接尚未釋放,必須通過2*MSL(最長報文壽命)的時間後,才進入CLOSE狀態,服務器只要收到客戶端發出的確認,當即進入CLOSED狀態
三、描述TCP和UDP區別
1).TCP協議是有鏈接的,意思是開始傳輸實際數據以前TCP的客戶端和服務器端必須經過三次握手創建鏈接,會話結束以後也要結束鏈接;UDP是無鏈接的
2).TCP協議保證數據按序發送,按序到達,提供超時重傳來保證可靠性,可是UDP不保證按序到達,甚至不保證到達,只是努力交付,即使是按序發送的序列,也不保證按序送到
3).TCP協議所需資源多,TCP首部需20個字節(不算可選項),UDP首部字段只需8個字節
4).TCP有流量控制和擁塞控制,UDP沒有,網絡擁堵不會影響發送端的發送率
5).TCP是一對一的鏈接,而UDP則能夠支持一對一,多對多,一對多的通訊
6).TCP面對的是字節流的服務,UDP面向的是報文的服務
四、總結ip分類以及每一個分類能夠分配的IP數量
IP地址是一個32位二進制數,可將此32位二進制數劃分爲四組8位二進制八位數
IP地址由兩部分組成:
1)網絡ID
標識網絡
每一個網段分配一個網絡ID
2)主機ID
標識單個主機
由組織分配給各設備
IP地址中的前5位用於標識IP地址的類別
A類地址的第一位爲0
B類地址的第一位爲10
C類地址的第一位爲110
D類地址的第一位爲1110
E類地址的第一位爲11110
IP全爲0或全爲1的都保留不用
IP地址分類:
A類
前8位(第一個字節)爲網絡ID,後24位(後三個字節)爲主機ID
00000000-01111111:1-127
範圍:1.0.0.1-126.255.255.254
網絡數:126
每一個網絡中的主機數:2^24-2=16777214
子網掩碼:255.0.0.0
B類
前16位爲網絡ID,後16位爲主機ID
10000000-10111111:128-191
範圍:128.0.0.1-191.255.255.254
網絡數:2^14
每一個網絡中的主機數:2^16-2=65534
C類
前24位爲網絡ID,後8位爲主機ID
11000000-11011111:192-223
範圍:192.0.0.1-223.255.255.254
網絡數:2^21=2097152
每一個網絡中的主機數:2^8-2
D類
用於:多播、組播用戶
11100000-11101111:224-239
不分網絡地址和主機地址,前四位固定爲1110
範圍:224.0.0.1-239.255.255.254
E類
保留未使用
240-255
私有地址有:
A.10.0.0.0-10.255.255.255
B.172.16.0.0-172.31.255.255
C.192.168.0.0-192.168.255.255
私有地址:就是在互聯網上不使用,而被用在局域網絡中的地址
保留地址:是本機地址,等效於localhost或本機IP,通常用於測試使用(127.X.X.X;169.254.X.X)
netmask:子網掩碼
功能:肯定網絡ID的位數
32位二進制,對應IP網絡ID爲1,對應IP中主機ID爲0
五、總結IP配置方法
1)ifconfig命令
此方法,一般用來臨時的測試用,計算機啓動後,ip地址的配置將自動失效
[ root@CentOS7 ]#ifconfig ens33 192.168.0.1 netmask 255.255.255.0
關閉networkmanager服務(同時配置Network和NetworkManager兩種網絡管理工具會引發衝突)
[ root@CentOS7]#systemctl stop NetworkManager
[ root@CentOS7 ]#systemctl status NetworkManager
編輯網卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet 網絡類型
BOOTPROTO=static 獲取IP的方式,有dhcp、static、none
DEVICE=enp0s3 設備名稱
ONBOOT=yes 開機是否啓動此網卡,重啓network時是否一塊兒激活
若是是獲取IP方式爲static,須要增長如下字段
IPADDR=192.168.75.100
NETMASK=255.255.255.0
GATEWAY=192.168.75.1
重啓網絡
systemctl restart network
CentOS和RHEL系統默認使用NetworkManager來提供網絡服務,這是一種動態管理網絡配置的守護進程,可以讓網絡設備保持鏈接狀態
使用nmtui命令來配置網絡
使用nmcli命令來管理NetworkManager服務(nmcli是一款基於命令行的網絡配置工具)
一個接口具備一個硬件名稱(惟一的身份標識)和一個或多個鏈接名稱(類比外號)
硬件名稱:DEVICE、ifname
鏈接名稱:NAME、cname、con-name、connection-name
具備多個鏈接名稱的緣由:多個鏈接名稱生成多個配置文件,容許用戶在多個配置文件中快速切換(網絡會話功能,在不一樣的使用環境激活相應的網絡會話,可實現網絡配置信息的自動切換)
[ root@CentOS7 ]#nmcli connection show
NAME UUID TYPE DEVICE
eht0 c0de6c44-881b-4107-9daf-31176bffd5a9 ethernet ens33
virbr0 e67a9e33-d559-43f8-8440-f67aa5ecf0b4 bridge virbr0
沒有鏈接到物理接口的鏈接名稱不生效
[root@CentOS7 /]#ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.47.73 netmask 255.255.255.0 broadcast 192.168.47.255 inet6 fe80::55bd:55a6:276e:e371 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:4f:1e:a9 txqueuelen 1000 (Ethernet) RX packets 423743 bytes 632738940 (603.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 62395 bytes 3874561 (3.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 建立會話 [23:06:06 root@CentOS7 /]#nmcli connection add con-name test ifname eno16777736 type ethernet autoconnect yes save yes Connection 'test' (1686d137-27c8-4cb8-870f-d28e48ac470d) successfully added. [23:11:07 root@CentOS7 /]#nmcli connection show NAME UUID TYPE DEVICE eht0 c0de6c44-881b-4107-9daf-31176bffd5a9 ethernet ens33 virbr0 e67a9e33-d559-43f8-8440-f67aa5ecf0b4 bridge virbr0 test 1686d137-27c8-4cb8-870f-d28e48ac470d ethernet -- 配置IP [23:11:27 root@CentOS7 /]#nmcli connection modify test ipv4.addresses 192.168.75.100/24 ipv4.gateway 192.168.75.1 ipv4.dns 192.168.75.1 ipv4.method manual 啓用會話 [23:12:56 root@CentOS7 /]#nmcli connection up test