在學習Linux的快兩個月時間的這個階段,我們學習到了網絡的相關知識,哇,原來我們上網是需要這么多步驟的,玩了這么久的電腦,打開過無數網站還只是停留在以為打開網站只需要點點鼠標的層面,慚愧慚愧。學習了一周,終于了解了一些網絡的基層結構和一些網絡協議,下面是對這一周所學知識的一些總結,加強記憶和理解。還停留在以為打開一個網站只是動動鼠標層面的同學們注意了,別再說自己玩了多久的電腦啦,其實你對計算機一無所知(怕不怕),快來學習吧!
先來簡單介紹下要在網絡上發送數據需要的地址和步驟(這只是簡化的草圖)
具體信息如下:
簡單的網絡物理硬件:計算機,交換機,路由器,連接線,RJ-45連接口,這樣就具備聯網的物理基礎啦
第一步:了解OSI模型
OSI模型即開放式通信系統互聯參考模型,是國際標準化組織(ISO)提出的一個試圖使各種計算機在世界范圍內互連為網絡的標準框架,簡稱OSI
OSI模式的功能:降低復雜性、標準化接口、簡化模塊化設計、確保技術的互操作性、加快發展速度、簡化教學,既然是框架和模型,那么不可避免的的就是分層次,分層次的緣由就是易于管理,便于每個層次的修改和使用,所以我們的OSI就分了七個層次:
應用層:
1.為應用程序進程提供網絡服務(如:電子郵件,視頻語音聊天等)
2.提供用戶身份驗證
表示層:
1.確保接收系統可以讀出該數據
2.格式化數據
3.構建數據
4.協商用于應用層的數據傳輸語法
5.提供加密
會話層:
1.建立,管理和終止在應用程序之間的會話
傳輸層:
1.確保數據傳輸的可靠性
2.建立,維護和終止虛擬電路
3.通過錯誤檢測和恢復
4.信息流控制來保障可靠性
網絡層:
1.路由數據包
2.選擇傳遞數據的最佳路徑
3.支持邏輯尋址的路徑選擇
數據鏈路層:
1.訪問介質,訪問接口接收數據,進行格式化判斷,并進行錯誤檢測
2.定義如何格式或數據以使進行傳輸以及如何控制對網絡的訪問
3.支持錯誤檢測
物理層:
1.二進制傳輸
2.為啟動,維護以及關閉物理鏈路定義了電氣規范,機械規范,過程和功能規范
【下層為上層提供服務,所以在上層是可以查看到下層信息的】
然后,了解一下數據的封裝過程:(原來數據是這樣在網絡上傳輸的)
由計算機發送的數據每經過一層都會加上每一層的報頭(HDR),這樣才能被識別 到達目的地會進行解封裝,過程和封裝相似,一層一層去掉每一層封裝。
第二步:了解下TCP/IP協議棧,并與OST進行對比
TCP:Transmission Control Protocol/Internet Protocol傳輸控制協議/因特網互聯協議
TCP/IP是一個Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等許多協議最早發源于美國國防部(縮寫為DoD)的因特網的前身ARPA網項目,1983年1月1日,TCP/IP取代了舊的網絡控制協議NCP,成為今天的互聯網和局域網的基石和標準,由互聯網工程任務組負責維護,共定義了四層,和ISO參考模型的分層有對應關系
。
這里我們重點了解下 傳輸層和網絡層,比較重要。
傳輸層中有兩個重要的協議(TCP協議和UDP協議)
兩個協議的區別重點在于TCP協議可靠安全效率不太高,而UDP協議則是效率高不注重安全,目前使用TCP協議更多一點,
TCP協議特性:
工作在傳輸層面向連接協議
全雙工協議
半關閉
錯誤檢查
將數據打包成段,排序
確認機制
數據恢復,重傳
流量控制,滑動窗口
擁塞控制,慢啟動和擁塞避免算法
TCP包頭:
源端口、目標端口:計算機上的進程要和其他進程通信是要通過計算機端口的,而一個計算機端口某個時刻只能被一個進程占用,所以通過指定源端口和目標端口,就可以知道是哪兩個進程需要通信。源端口、目標端口是用16位表示的,可推算計算機的端口個數為2^16個
序列號:表示本報文段所發送數據的第一個字節的編號。在TCP連接中所傳送的字節流的每一個字節都會按順序編號。由于序列號由32位表示,所以每2^32個字節,就會出現序列號回繞,再次從 0 開始
確認號:表示接收方期望收到發送方下一個報文段的第一個字節數據的編號。也就是告訴發送發:我希望你(指發送方)下次發送的數據的第一個字節數據的編號是這個確認號
數據偏移:表示TCP報文段的首部長度,共4位,由于TCP首部包含一個長度可變的選項部分,需要指定這個TCP報文段到底有多長。它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠。該字段的單位是32位(即4個字節為計算單位),4位二進制最大表示15,所以數據偏移也就是TCP首部最大60字節
URG:表示本報文段中發送的數據是否包含緊急數據。后面的緊急指針字段(urgent pointer)只有當URG=1時才有效
ACK:表示是否前面的確認號字段是否有效。ACK=1,表示有效。只有當ACK=1時,前面的確認號字段才有效TCP規定,連接建立后,ACK必須為1,帶ACK標志的TCP報文段稱為確認報文段
PSH:提示接收端應用程序應該立即從TCP接收緩沖區中讀走數據,為接收后續數據騰出空間。如果為1,則表示對方應當立即把數據提交給上層應用,而不是緩存起來,如果應用程序不將接收到的數據讀走,就會一直停留TCP接收緩沖區中
RST:如果收到一個RST=1的報文,說明與主機的連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,然后再重新建立連接?;蛘哒f明上次發送給主機的數據有問題,主機拒絕響應,帶RST標志的TCP報文段稱為復位報文段
SYN:在建立連接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求建立連接的報文段;當SYN=1,ACK=1時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置為1,帶SYN標志的TCP報文段稱為同步報文段
FIN:表示通知對方本端要關閉連接了,標記數據是否發送完畢。如果FIN=1,即告訴對方:“我的數據已經發送完畢,你可以釋放連接了”,帶FIN標志的TCP報文段稱為結束報文段
tcp協議port(端口號):傳輸層通過端口號來確定應用層,應用層的每個服務或者應用都有對應的端口號,找到端口號就找到了所對應的應用。如下圖:
計算機間建立連接過程:(這里叫三次握手,挺友好的一個名字)
文字描述一哈:客戶A向服務器B發送一個建立連接請求(SYN=1 seq=x表示包的序列號 )自己進入SYN-SENT狀態,服務器則一直處于監聽LISTEN狀態,收到客戶A的請求后,回復給客戶A一個確認信息(ACK=1代表收到了請求,SYN=1表示服務器也想和客戶A建立連接,ack=x+1表示收到了客戶A發送的包,希望下次收到第x+1個包)然后進去SYN-RCVD狀態,客戶A收到后進入ESTAB-LISHED狀態,再發送給服務器確認信息(ACK=1,seq=x+1包序列號)進入到ESTAB-LISHED 這樣連接就建立完成了?。?/p>
斷開連接的過程:四次揮手
文字描述:客戶A要和服務器分手發送分手請求(FIN=1)進入FIN-WAIT-1狀態,服務器B收到請求后回復(ACK=1,ack=u+1確定收到)客戶A收到后進入FIN-WAIT-2狀態,此時,服務器也確定和客戶A分手,發送分手請求(FIN=1,ACK=1)進入到LAST-ACK狀態,客戶A收到后進入TIME-WAIT狀態,(這里客戶A會等待2個MSL時長,過后進入CLOSED狀態)發送確認信息ACK=1,服務器收到后進去CLOSED狀態。
狀態信息:
CLOSED 沒有任何連接狀態
LISTEN 偵聽狀態,等待來自遠方TCP端口的連接請求
SYN-SENT 在發送連接請求后,等待對方確認
SYN-RECEIVED 在收到和發送一個連接請求后,等待對方確認
ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態
FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認
FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求
TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失
CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,并已確認
LAST-ACK 被動關閉,等待最后一個關閉傳輸連接確認,并等待所有分組消失
CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認
TCP確認機制并不是一個確認一次,那樣效率太低了,所以TCP確認機制是一段確認一次。
UDP協議特性:
工作在傳輸層
提供不可靠的網絡訪問
非面向連接協議
有限的錯誤檢查
傳輸性能高
無數據恢復特性
UDP的包頭里沒有確認號序號啊等功能,只有源端口和目的端口,所以UDP協議只管發不確認,所以效率高但安全性差。
網絡層:
網絡層中有幾個重要的協議,ARP協議,IP協議。
先來介紹ICMP協議,全稱Internet Control Message Protocol,互聯網控制消息協議,其實網絡層也被分為很多小層,ICMP協議就處在比較上層的位置。
ICMP:控制消息,網路裝備(ping命令就是ICMP協議)
type:8 請求
type:0回應
重點來介紹下ARP協議:
ARP:地址解析協議(通過IP地址廣播找MAC地址),只針對本網段的進行廣播,找到目標會把目標的MAC地址存到自己的ARP表中,但是長時間不用的話,會被刪除,也可以手動指定
查看ARP表的相關命令:
arp -n:查看arp表中ip信息 (ip neigh)
iarp -d ip地址:刪除arp表中的ip地址的信息
arp [HW] -s:設置靜態地址(不會被自動刪除),標志是Flags Mask 會變成了CM
反向ARP:通過MAC地址,查找IP地址(用于一些無硬盤的機器,開機有MAC地址但是沒有IP地址)
IP PDU包頭:
版本: 占4位,指 IP 協議的版本目前的IP協議版本號為4
首部長度: 占4位,可表示的最大數值是15個單位,一個單位為4字節,因此IP 的首部長度的最大值是60字節
區分服務: 占8位,用來獲得更好的服務,在舊標準中叫做服務類型,但實際上一直未被使用過.后改名為區分服務.只有在使用區分服務(DiffServ)時,這個字段才起作用.一般的情況下都不使用
總長度: 占16位,指首部和數據之和的長度,單位為字節,因此數據報的最大長度為 65535 字節.總長度必須不超過最大傳送單元 MTU
標識: 占16位,它是一個計數器,通常,每發送一個報文,改值會加1, 也用于數據包分片,在同一個包的若干分片中,該值是相同的
標志(flag): 占3位,目前只有后兩位有意義
DF: Don‘t Fragment,中間的一位,只有當 DF=0 時才允許分片
MF: More Fragment,最高位,MF=1表示后面還有分片。MF=0 表示最后一個分片
片偏移: 占12位,指較長的分組在分片后,該分片在原分組中的相對位置.片偏移以8個字節為偏移單位
(分片:Fragmented)
生存時間: 占8位,記為TTL (Time To Live) 數據報在網絡中可通過的路由器數的最大值,TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值為64.發送 ICMP 回顯應答時經常把 TTL 設為最大值 255
TTL time to live: linux默認64 Windows默認128 表示能通過最大的路由器數目
協議: 占8位,指出此數據報攜帶的數據使用何種協議以便目的主機的IP層將數據部分上交給哪個處理過程, 1表示為ICMP 協議, 2表示為 IGMP 協議, 6表示為 TCP 協議, 17表示為UDP 協議
首部檢驗和: 占16位,只檢驗數據報的首部不檢驗數據部分.這里不采用 CRC 檢驗碼而采用簡單的計算方法
源地址和目的地址:都各占4字節,分別記錄源地址和目的地址
其中片偏移是以8個字節為單位:所以如果設置一個3000字節的大包(包的范圍是60-1516),IP PDU報頭示例
網絡層也是通過編號來識別上層傳輸層使用的是TCP協議還是UDP協議,TCP的編號是6,UDP的是17
i
p地址:
每臺主機(計算機,網絡設備,外圍設備)必須具有唯一的地址
IP地址由兩部分組成:IP地址=網絡ID+主機ID
網絡ID:標識網絡,每個網段分配一個網絡ID
主機ID:標識單個主機,由組織分配給各個設備
IP地址格式:
IP地址是一個32位二進制數:10101100 00010000 10000000 00010001(172.16.128.17)
IP地址分類:
公式:
網絡數=2^可變網絡ID數
主機數=2^主機ID數-2
A類
0xxxxxxx.a.b.c 前八位位網絡ID,后24位為主機ID
網絡數=(00000000 01111111)0-127 其中0和127不可用 所以可用范圍為1-126
主機數=2^24-2(其中0xxxxxxx.0.0.0和0xxxxxxx.255.255.255不可用)
1-126.a.b.c
B類
10xxxxxx.xxxxxxxxx.b.c前16位為網絡ID,后16位為主機ID
網絡數=2^14
主機數=2^16-2
前八位:10000000 10111111 128-191
128-191.xxxxxxx.b.c
C類
110xxxxx.xxxxxxxx.xxxxxxxx.c前24位位網絡ID,后8位為主機ID
網絡數=2^21
主機數=2^8-2
前八位:11000000 11011111 192-223
192-223.xxxxxxxx.xxxxxxxx.c
D(多播)
1110
224-239
E(備用)
240-254
公共IP地址:由管理組織分配的地址,每個是全世界唯一的地址(如果能擁有一個公共IP地址,那就厲害了?。?/p>
A類1.0.0.0到9.255.255.255 11.0.0.0到126.255.255.255
B類128.0.0.0到172.15.255.255 172.32.0.0到191.255.255.255
C類192.0.0.0到192.167.255.255 192.169.0.0到223.255.255.255
私有IP地址:
A類10.0.0.0到10.255.255.255 共254個網段*(0-255有256個網段,10.0.0.0和10.255.255.255不可用,為特殊網段)
B類172.16.0.0到172.31.255.255 共16個網段
C類192.168.0.0到192.168.255.255 共256個網段
特殊地址:
0.0.0.0:位置地址
0.0.0.0不是一個真正意義上的IP地址。它表示一個集合:所有不清楚的主機和目的網絡
255.255.255.255 限制廣播地址。對本機來說,這個地址指本網段內(同一廣播域)的所有主機
127.0.0.1~127.255.255.254:本機回環地址,主要用于測試。在傳輸介質上永遠不應該出現目的地址為”127.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服務器獲取地址,系統會為主機分配這樣地址
子網掩碼:
也是32位,與IP地址一一對應,對應的網絡ID為1,主機ID為0
無類域間路由(CIDR)CIDR表示法:ip/網絡ID位數=id/(32-主機ID位數)【舉例:172.17.0.100/16的子網掩碼為 255.255.0.0】
子網掩碼的8位:
00000000 0
10000000 128
11000000 192
11100000 224
11110000 240
11111000 248
11111100 252
11111110 254
11111111 255
劃分子網:將一個大網絡(主機ID位多)劃分成多個小(主機ID位多)的網絡,網絡ID向主機ID借位,網絡ID變多,主機ID變少
劃分子網數=2^網絡ID向主機ID借的位數
損失IP=2*(劃分子網數-1)
【例題:(根據上述公式)
172.200.249.200/22 劃分16子網(2^4)
1 每個子網絡netmask
255.255.255.192
netid網絡ID位 26(22+4)
2 每個子網絡的主機數
2^(32-26(=22+4))-2=62
3 最小子網的netid
172.200.111110 (01.11) 001000 ()里的為網絡ID向主機ID借的位數 要最小子網的網絡ID的話就借的位全為0,要最大的則全為1
172.200.248.0/26
4 最大子網的IP范圍
172.200.111110 (11.11)000001-172.200.111110 (11.11)111110(注意2進制的轉化)
172.200.251.193-172.200.251.254】
劃分超網:將多個小網合并為一個大網,主機id向網絡id借位
跨網絡通信:路由
路由分類:
主機路由(精準)
網絡路由(一般)
默認路由(0.0.0.0)
優先級:精度越高,優先級越高
路由表構成:
多個路由記錄組成
每個路由記錄由4項組成部分
1目標 主機地址 網絡地址 未知地址 0.0.0.0
2 netmask 子網掩碼
3 接口interface ,發往目標,從哪個接口發出去
4 網關gateway:下一個路由器的鄰近本路由器的接口的IP
如果是一個比較大的網絡,其中有許多路由器,那么路由表中不能存放所有的路由信息,那么就由路由協議來解決,軟件通過路由協議(互相學習)生成路由表。
DHCP協議:動態主機配置協議(發廣播到網絡中求分配給一個可用IP)
4個步驟:
DHCP DISCOVER: 0.0.0.0 255.255.255.255
DHCP OFFER: DHCP SERVER–>IP
DHCP REQUEST
DHCP ACK:
(IP地址 netmask子網掩碼 dns協議 gatway網關 租期)這些都自動分配好了
配置網絡(理論知識學過,終于到了動手的時候了!?。?/p>
基本網絡配置:將Linux主機接入到網絡,需要配置網絡相關設置。
一般包括如下內容:
主機名
IP/netmask
路由:默認網關
DNS服務器
網絡配置方式(常用的命令)
靜態指定: ifcfg: ifconfig, route, netstat ip: object {link, addr, route}, ss, tc system-config-network-tui (setup)
配置文件
CentOS 7:網絡配置工具
nmcli, nmtui, nm-connection-editor
動態分配:DHCP: Dynamic Host Configuration Protocol
網絡接口識別并命名相關的udev配置文件:/etc/udev/rules.d/70-persistent-net.rules
查看網卡:
dmesg |grep –i eth
ethtool -i eth0
卸載網卡驅動:
modprobe -r e1000
rmmod e1000
裝載網卡驅動:
modprobe e1000
ifconfig命令
ifconfig [interface]
# ifconfig -a
# ifconfig IFACE [up|down]
ifconfig interface [aftype] options | address …
# ifconfig IFACE IP/netmask [up]
# ifconfig IFACE IP netmask NETMASK
注意:立即生效
route命令:
查看:route -n
添加:route add【舉例:# route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0 】
刪除:route del【舉例: # route del -net 192.168.0.0 netmask 255.255.255.0】
netstat命令
常用組合:-tan, -uan, -tnl, -unl
顯示路由表:
netstat {–route|-r} [–numeric|-n]
-r: 顯示內核路由表
-n: 數字格式
網絡配置文件:
IP、MASK、GW、DNS相關配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE
路由相關的配置文件:
/etc/sysconfig/network-scripts/route-IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE:
說明參考 /usr/share/doc/initscripts-9.49.30/sysconfig.txt
DEVICE:此配置文件應用到的設備
HWADDR:對應的設備的MAC地址
BOOTPROTO:激活此設備時使用的地址配置協議,常用的dhcp, static, none, bootp
NM_CONTROLLED:NM是NetworkManager的簡寫,此網卡是否接受NM控制;建議CentOS6為“no
配置選項模式:
ONBOOT:在系統引導時是否激活此設備
TYPE:接口類型;常見有的Ethernet, Bridge
UUID:設備的惟一標識
IPADDR:指明IP地址
NETMASK:子網掩碼
GATEWAY: 默認網關
DNS1:第一個DNS服務器指向
DNS2:第二個DNS服務器指向
USERCTL:普通用戶是否可控制此設備
PEERDNS:如果BOOTPROTO的值為“dhcp”,是否允許
dhcp server分配的dns服務器指向信息直接覆蓋至
/etc/resolv.conf文件中
原創文章,作者:Ganten,如若轉載,請注明出處:http://www.www58058.com/85943