計算機網絡基礎
分層的網絡模型
網絡發展到今天,規模很龐大,內容很復雜,不利于網絡的管理和教學。網絡分層可以:降低網絡結構的復雜性、把各層的接口標準化、簡化模塊設計、確保技術的互操作性、加快發展速度以及簡化教學過程。
OSI模型——國際標準:根據國際標準化組織( ISO,International Standards Orgnization)提案,計算機網絡模型分為七層。也就是通常所說的七層協議(即OSI參考模型),即:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。由于七層協議實現起來較復雜,雖是標準但還是被五層協議替代,就是通常所說的 TCP/IP 參考模型。
每層的結構如下:
兩個主機通信過程
IP報文傳輸過程包括:
Host sends packet to default gateway(主機將數據包發送到默認網關)
Packet placed in frame(數據包被封裝入幀)
Router receives frame(路由器接到幀)
Router finds destination network in route table(路由器在路由表中發現目標網絡)
Router chooses next hop toward destination(路由器選擇一個更接近目標的下一跳)
MAC address of next hop determined(下一跳的MAC地址被確定)
Packet placed in frame(數據包被封裝入幀)
Repeats steps 2 through 7 as necessary(如果需要的話,重復步驟2~7)
Router receives frame(路由器接到幀)
Router finds network directly connected(路由器發現直連網絡)
MAC address of end host determined(最終主機的MAC地址被確定)
Packet placed in frame to final destination(幀中的數據包被發送到最終主機)
主機A與主機B通信,A Ping B,圖:A-交換機-B,AB同一子網
(1)ping數據包用的是ICMP協議,IP協議的一個子協議,位于三層,包含A的IP,B的IP,三層進行IP封裝成包,進入二層
(2)A,B處于相同子網,查看緩存中對與目的對應得B第2層mac地址,如果存在,直接進行第2層封裝成幀,經物理層信號編碼,以0101010010這樣的bits流傳輸在網絡介質上。
(3)如果不存在B的MAC,則發送ARP廣播請求B的MAC,ARP數據包經物理層進入交換機端口,需要進行源端口號學習,目的端口查找,B響應ARP請求,交換機又可以學習一目的MAC地址與哪個端口對應,在下次傳送數據時就不再需要對所有端口進行廣播了。B通過ARP單播把B的MAC響應給A,此時再返回(2)的處理過程。
(4)當再進行A與B之間數據包轉發,將直接用B的MAC地址封裝,數據轉發得以高速交換
主機A與主機C通信,A Ping C,圖:A-交換機-路由器M-路由器N-交換機-C,AC不同子網
(1)兩個機器不在同一子網內,A要與目的C通信,A要向“缺省網關”發出ARP包,而“缺省網關”的IP地址已經在A系統軟件中設置。這個IP地址實際上對應路由器M的E0的IP地址。所以A對“缺省網關”的IP地址廣播出一個ARP請求時,路由器M的E0口的MAC回復給A,此時A數據包的目的MAC替換為M的E0口MAC。
(2)MAC替換后,經物理層,傳輸到交換機物理層,再傳到交換機數據鏈路層,再經數據數據鏈路層到物理層。
(3)經bit流傳到路由器M的物理層,然后傳到數據鏈路層,二層解封裝,目的IP與路由器M三層IP路由表比較,若匹配正確,交給上層處理,否則會緩存數據包內容,然后根據目標地址查找路由表找到相關表項,得到NEXT HOP及出接口的MAC地址,用這兩個地址作為新的目的及源MAC地址封裝事先緩存的數據包,然后轉發,這個過程稱為幀的重寫(REWRITE)。
(4)重復進行MAC替換后, 在路由器N中,找到與目的IP匹配表項,若N中存在C對應的MAC表項,則數據傳輸到C網絡層,否則N發送ARP廣播請求C的MAC。
(5)當C收到A的數據包后,再從A到C進行一次反向MAC替換過程。反向過程中,每一步省略掉ARP請求NEXT HOP的MAC,因為MAC表已經建立起來。
網絡層
網絡通信靠的三個地址
真正完成一次通信需要三個地址。MAC地址用來實現本地通信??缇W絡通信要靠IP地址,但是IP地址僅僅只是界定兩個通信的主機,就是界定哪個主機是通信的源,哪個主機是通信的目標。真正實現通信的還是MAC地址。即為
互聯網通信=多段接力的本地通信
但是問題來了,我用在主機上用qq給目標主機發送一個信息,目標主機運行著各種進程,是哪一個進程去接我的這個信息呢,這就涉及到第三個地址,port地址,也稱為端口地址?;ヂ摼W通信的實質是兩個進程之間的通信
進程地址=IP+端口地址,叫socket,由內核提供。(端口是指用來標識本地主機上每一個進程的唯一的數字標識)
當進程要發起某個通信時要向內核注冊一個進程地址,這個地址只是臨時的。
Linux主機是如何接入網絡中的
IP地址是最基礎的了,用來標識源和目標,有了IP才有掩碼,沒有掩碼沒法判定誰是本地,誰是遠端的,即為無法判斷是本地通信還是跨網通信。
有了IP與掩碼最多可以判定誰是本地,可以通信,遠端的就通信不了了,想要遠端通信還要加上網關,有了網關才能實現跨網通信。但是互聯網也不會通過IP 地址來通信,像我們訪問www.baidu.com,這叫主機名,通常講是域名,拿一個域名是不能夠通信的,要把名字轉換為IP才可以,要依賴應用層來實現轉換。
例如AB兩個主機通信,A不知道B是誰,A要通過互聯網層層路由找到另外一個網絡主機,這個主機是DNS服務器(名稱服務器,能夠完成名稱解析功能,就是轉換,主機名<–>IP),DNS服務器有一個數據庫,A要與B通信,第一步是A要向DNS服務器發送地址解析請求,但是如果直接訪問IP 就不需要解析了,要知到www.baidu.com的IP 地址是什么,查找數據庫,將查找結果響應到A主機,A就知道了,這個時候將報文封裝起來,有傳輸層守護、IP守護,再將報文發個B主機。
如果要把一個主機接到網絡中去,要配置 IP/NETMASK:能夠實現本地通信 路由(網關)條目:跨網絡通信 DNS服務器地址:基于主機名的通信
路由器
路由器是依靠路由表來判斷某一主機通信的目標主機是在哪一個網絡上,從而發往哪一個接口(下一跳),簡單說就是數據進來后,路由器查看這個包的目的地址,然后根據自己的路由表轉發到下個端口,這個端口就是下一跳的地址。路由表都知道自己在網絡中處在什么位置,都要知道到達目標主機有哪些路可以走,這些記錄的數據就是路由表條目。
所以Linux設置路由器就要設置到達目的以及經過哪個下一跳地址。
路由表生成: 靜態指定 動態學習:rlp2、ospf協議
Linux網絡配置命令
配置方式:
靜態指定: ifcfg家族: ifconfig:配置IP,NETMASK route:路由 netstat:狀態及統計數據查看 iproute2家族:(主要學習這個家族,功能強大) ip OBJECT: addr:地址和掩碼; link:接口 route:路由 ss:狀態及統計數據查看 CentOS 7:nm(Network Manager)家族 nmcli:命令行工具 nmtui:text window 工具 注意: (1) DNS服務器指定 配置文件:/etc/resolv.conf (2) 本地主機名配置 hostname 配置文件:/etc/sysconfig/network CentOS 7:hostnamectl 配置文件: RedHat及相關發行版 /etc/sysconfig/network-scripts/ifcfg-NETCARD_NAME 動態分配:依賴于本地網絡中有DHCP服務 DHCP:Dynamic Host Configure Procotol
ifcfg-IFACE配置文件參數含義
配置文件: IP/NETMASK/GW/DNS等屬性的配置件:/etc/sysconfig/network-scripts/ifcfg-IFACE IFACE:接口名稱; 路由的相關配置文件:/etc/sysconfig/networkj-scripts/route-IFACE
配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE通過大量參數來定義接口的屬性;其可通過vim等文本編輯器直接修改,也可以使用專用的命令的進行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)
DEVICE:此配置文件對應的設備的名稱; ONBOOT:在系統引導過程中,是否激活此接口; UUID:此設備的惟一標識; IPV6INIT:是否初始化IPv6; BOOTPROTO:激活此接口時使用什么協議來配置接口屬性,常用的有dhcp、bootp、static、none; TYPE:接口類型,常見的有Ethernet, Bridge; DNS1:第一DNS服務器指向; DNS2:備用DNS服務器指向; DOMAIN:DNS搜索域; IPADDR: IP地址; NETMASK:子網掩碼;CentOS 7支持使用PREFIX以長度方式指明子網掩碼; GATEWAY:默認網關; USERCTL:是否允許普通用戶控制此設備; PEERDNS:如果BOOTPROTO的值為“dhcp”,是否允許dhcp server分配的dns服務器指向覆蓋本地手動指定的DNS服務器指向;默認為允許; HWADDR:設備的MAC地址;
iproute家族:
ip命令:
show / manipulate routing, devices, policy routing and tunnels ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { link | addr | route | netns } 注意: OBJECT可簡寫,各OBJECT的子命令也可簡寫;
ip OBJECT: ip link: network device configuration ip link set - change device attributes dev NAME (default):指明要管理的設備,dev關鍵字可省略; up和down: multicast on或multicast off:啟用或禁用多播功能; name NAME:重命名接口 mtu NUMBER:設置MTU的大小,默認為1500; netns PID:ns為namespace,用于將接口移動到指定的網絡名稱空間; ip link show - display device attributes ip link help - 顯示簡要使用幫助;
ip netns: - manage network namespaces. ip netns list:列出所有的netns ip netns add NAME:創建指定的netns ip netns del NAME:刪除指定的netns ip netns exec NAME COMMAND:在指定的netns中運行命令
ip address - protocol address management. ip address add - add new protocol address ip addr add IFADDR dev IFACE [label NAME]:為額外添加的地址指明接口別名; [broadcast ADDRESS]:廣播地址;會根據IP和NETMASK自動計算得到; [scope SCOPE_VALUE]: global:全局可用; link:接口可用; host:僅本機可用; ip address delete - delete protocol address ip addr delete IFADDR dev IFACE ip address show - look at protocol addresses ip addr list [IFACE]:顯示接口的地址; ip address flush - flush protocol addresses ip addr flush dev IFACE
ip route - routing table management ip route add - add new route ip route change - change route ip route replace - change or add new one ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP] 示例: # ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100 # ip route add default via GW ip route delete - delete route ip route del TYPE PRIFIX 示例: # ip route delete 192.168.1.0/24 ip route show - list routes TYPE PRIFIX ip route flush - flush routing tables TYPE PRIFIX ip route get - get a single route ip route get TYPE PRIFIX 示例:ip route get 192.168.0.0/24
ss命令:
ss [options] [ FILTER ] 選項: -t:TCP協議的相關連接 -u:UDP相關的連接 -w:raw socket相關的連接 -l:監聽狀態的連接 -a:所有狀態的連接 -n:數字格式 -p:相關的程序及其PID -e:擴展格式信息 -m:內存用量 -o:計時器信息 常用組合: -tan, -uan, -tnl, -unl, -tunlp
FILTER := [ state TCP-STATE ] [ EXPRESSION ] TCP的常見狀態: TCP FSM: LISTEN:監聽 ESTABLISEHD:建立的連接 FIN_WAIT_1: FIN_WAIT_2: SYN_SENT: SYN_RECV: CLOSED: EXPRESSION: dport = sport = 示例:'( dport = :22 or sport = :22)' ~]# ss -tan '( dport = :22 or sport = :22 )' ~]# ss -tan state ESTABLISHED
實例:ip,增刪查
1.查看網卡協議地址
2.顯示網卡eno16777736
3.在網卡eno16777736上增加一個IP 地址192.168.0.3/24,標準廣播地址,指定別名為eno16777736:0.
ip addr add IP dev IFACE(接口)
4.刪除網卡eno16777736上的ip地址192.168.0.3/24.
5.添加靜態主機路由。
6.啟用網卡eno16777736
ip link set dev eno16777736 up
7.更改網卡名稱
因為我只有一個網卡,要修改名稱必須先停掉,我的網卡停掉后,就連不上忘了。
8.顯示路由表
9.添加靜態網絡路由
#ip route add 192.168.1/24 via 192.168.0.1
10.添加靜態主機 路由
#ip route add 192.168.1.2 via 192.168.0.1
11.刪除路由
#ip route delete
12.ss命令
-tnl -tan #ss -tan state ESTABLISHED
原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/60340
網絡知識總結看的很全面,值得大家學習,加油。