linux協議
㈠ linux內核-arp協議
從ip_finish_output2到dev_queue_xmit路徑:
http://www.bluestep.cc/linux%e5%91%bd%e4%bb%a4arping-%e7%bd%91%e7%bb%9c%e7%ae%a1%e7%90%86-%e9%80%9a%e8%bf%87%e5%8f%91%e9%80%81arp%e5%8d%8f%e8%ae%ae%e6%8a%a5%e6%96%87%e6%b5%8b%e8%af%95%e7%bd%91%e7%bb%9c/
arp協議:
(1).硬體類型:
硬體地址類型,該欄位值一般為ARPHRD_ETHER,表示乙太網。
(2).協議類型:
表示三層地址使用的協議,該欄位值一般為ETH_P_IP,表示IP協議
(3)硬體地址長度,乙太網MAC地址就是6;
(4)協議地址長度,IP地址就是4;
(5)操作碼
常見的有四種,arp請求,arp相應,rarp請求,rarp相應。
(6)發送方硬體地址與IP地址,(7)目標硬體地址與目標IP地址。
arp頭數據結構:
arp模塊的初始化函數為arp_init(),這個函數在ipv4協議棧的初始化函數inet_init()中被調用。
1.初始化arp表arp_tbl;
2.注冊arp協議類型;
3.建立arp相關proc文件,/proc/net/arp;
4.注冊通知事件
一個neigh_table對應一種鄰居協議,IPv4就是arp協議。用來存儲於鄰居協議相關的參數、功能函數、鄰居項散列表等。
一個neighbour對應一個鄰居項,就是一個arp條目
鄰居項函數指針表,實現三層和二層的dev_queue_xmit()之間的跳轉。
用來存儲統計信息,一個結構實例對應一個網路設備上的一種鄰居協議。
注冊arp報文類型 :dev_add_pack(&arp_packet_type);
就是把arp_packet_type添加到ptype_base哈希表中。
注冊新通知事件的時候,在已經注冊和UP的設備上,會調用一次這個通知事件。
設備事件類型:
創建一個鄰居項,並將其添加到散列表上,返回指向該鄰居項的指針。
tbl:待創建的鄰居項所屬的鄰居表,即arp_tbl;
pkey:三層協議地址(IP地址)
dev:輸出設備
want_ref:??
創建鄰居項
1.設置鄰居項的類型
2.設置鄰居項的ops指針
3.設置鄰居項的output函數指針
調用dst_link_failure()函數向三層報告錯誤,當鄰居項緩存中還有未發送的報文,而該鄰居卻無法訪問時被調用。不懂。
用來發送arp請求,在鄰居項狀態定時器處理函數中被調用。
neigh:arp請求的目的鄰居項
skb:緩存在該鄰居項中的待發送報文,用來獲取該skb的源ip地址。
將得到的硬體源、目的地址,IP源、目的地址等作為參數,調用arp_send()函數創建一個arp報文並將其輸出。
創建及發送arp報文
創建arp報文,填充欄位。
發送arp報文
用來從二層接收並處理一個arp報文。這個函數中就是做了一些參數檢查,然後調用arp_process()函數。
neigh_event_ns
neigh_update
這個函數的作用就是更新鄰居項硬體地址和狀態。分支比較多。
neigh_update_notify
代理arp(proxy arp),通常像路由器這樣的設備才使用,用來代替處於另一個網段的主機回答本網段主機的arp請求。
感覺代碼ARP好像沒啥用呀。
網路主機發包的一般過程:
1.當目的IP和自己在同一網段時,直接arp請求該目的IP的MAC。
2.當目的IP和自己不再同一網段時,arp請求默認網關的MAC。
https://www.cnblogs.com/taitai139/p/12336554.html
https://www.cnblogs.com/Widesky/p/10489514.html
當主機沒有默認網關的時候,arp請求別的網段的報文,到達路由器後,本來路由器是要隔離廣播的,把這個arp請求報文給丟棄,這樣就沒法通信了。當路由器開啟arp proxy後,路由器發現請求的目的IP在其他網段,就自己給主機回復一個arp響應報文,這樣源主機就把路由器的MAC當成目的IP主機對應的MAC,可以通信了。這樣可能會造成主機arp表中,多個IP地址都對應於路由器的同一個MAC地址。
可以使用arping命令發送指定IP的arp請求報文。
寫完了發現這個老妹寫的arp代理文章蠻好的,不過她好像是轉載的。
㈡ linux 網路路徑中網路協議棧有幾種
1.總述
Linux中用戶空間的網路編程,是以socket為介面,一般創建一個sockfd = socket(family,type,protocol),之後以該sockfd為參數,進行各種系統調用來實現網路通信功能。其中family指明使用哪種協議域(如INET、UNIX等),protocol指明該協議域中具體哪種協議(如INET中的TCP、UDP等),type表明該介面的類型(如STREAM、DGRAM等),一般設protocol=0,那麼就會用該family中該type類型的默認協議(如INET中的STREAM默認就是TCP協議)。
Linux中利用mole機制,層次分明地實現了這套協議體系,並具有很好的擴展性,其基本模塊構成如下:
先看右邊,頂層的socket模塊提供一個sock_register()函數,供各個協議域模塊使用,在全局的net_family[]數組中增加一項;各個協議域模塊也提供一個類似的register_xx_proto()函數,供各個具體的協議使用,在該協議域私有的xx_proto[]數組中增加一項。這兩個數組中的存放的都是指針,指向的數據結構如下圖所示:
很明顯它們是用來創建不同類型的socket介面的,且是一種分層次的創建過程,可想而知,頂層socket_create()完成一些共有的操作,如分配內存等,然後調用下一層create;協議域內的create()完成一些該協議域內共有的初始化工作;最後具體協議中的create()完成協議特有的初始化。具體的下一節講。
再來看上圖右邊的,也是頂層socket模塊提供的4個函數,前兩個一般由具體協議模塊調用,由於協議棧與應用層的交互,具體的後面會講到。後兩個一般有協議域模塊調用,用於底層設備與協議棧間的交互。但這也不絕對,如在PPPOE協議中,這4個函數都由具體協議模塊調用,這是因為PPPOX協議域內的共有部分不多,各個協議間幾乎獨立。這4個函數的功能及所用到的數據結構,在後面具體用到時會詳細說明。
2.socket插口創建
首先來看一下最終創建好的socket插口由哪些部分組成,該結構是相當龐大的,這里只給出框架:
基本屬性有state(listen、accept等),flags標志(blocked等),type類型,這里family和protocol都沒有了,因為它們再創建時使用過了,已經被融入到socket結構中。
File指針指向一個file結構,在Linux中一個socket也被抽象為一個文件,所以在應用層一般通過標準的文件操作來操作它。
Ops指向一個struct proto_ops結構,它是每種協議特有的,應用層的系統調用,最終映射到網路棧中具體協議的操作方法。
Sk指向一個struct sock結構,而該結構在分配空間時,多分配了一點以作為該協議的私有部分,這里包含了該協議的具體信息,內容相當多。首先是一個struct sock_common結構,包含了協議的基本信息;然後是一個sk_prot_create指針,指向一個struct proto結構體,該結構體就是第一節中所述的,用proto_regsiter()注冊到內核中的,它包含應用層到協議棧的交互操作和信息(也可以說成是Appà transport layer的交互信息);然後還有一個sk_backlog_rcv函數指針,所指函數在協議棧處理完接收到的包之後調用,一般僅是把數據包放到該socket的接收隊列中,等待APP讀取;最後協議的私有部分里存放該協議的私有信息,如pppoe的sessionID、daddr,tcp的連接4元組等,這些信息很重要,利用它們來區分同一個協議中的多個socket。
附上出處鏈接:http://blog.csdn.net/vfatfish/article/details/9296885
㈢ linux系統遠程連接使用什麼協議
遠程協議有很多,本文只討論幾種主要的,另外由於Windows之間的遠程桌面工具實在是太多了,這里就不再說明,主要以Windows和Linux之間的改嫌戚互相訪問來說明。
ssh,遠程無界面連接,是伺服器管理常用方式,vnc,xdrp均是可視化遠程,至少我很少使用這兩個。
遠程管理,實際上就是計算機(伺服器)之間通過網路進行數據傳輸(信息交換)的過程,與瀏覽器需要 HTTP 協議(超文本傳輸協議)瀏覽網頁一樣,遠程管理同樣需要遠程管理協議的支持。
(3)linux協議擴展閱讀:
Linux同時具有字元界面和圖核陵形界面。在字元界面用戶可以通過鍵盤輸入相應的指令來進行操作。它同時也提供了類似Windows圖形界面的X-Window系統,用戶可以使用滑鼠對其進行操作。在X-Window環境中就和在Windows中相似,可以說是一個Linux版的Windows。
Linux可以運行在多種硬體平台上,如具有x86、680x0、SPARC、Alpha等處理器的平台。此外Linux還是一種嵌入式操作系統,可以運行在掌上電腦、機頂盒或游戲機上。2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel64位晶元架構。同時Linux也支持多處者岩理器技術。多個處理器同時工作,使系統性能大大提高。
㈣ linux協議地址是sftp windows server的是多少
SFTP的默認埠號是22。
要進行文件傳輸wincscp的文件協議需要是sftp。並且,linux系統要支持sftp協議。如果其他的sftp伺服器的埠號修改之後,可以通過-P來指定要通過哪個埠號連接。
㈤ 使用遠程中端管理阿里雲Linux雲伺服器ecs時用的什麼協議
一般都是走ssh 協議
ssh可以把所有傳輸的數據進行加密,傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。
ssh提供一套完備的密鑰機制,即一對秘鑰的非對稱加密。
SSH協議框架中最主要的部分是三個協議:
1傳輸層協議(The Transport Layer Protocol)提供伺服器認證,數據機密性,信息完整性 等的支持;
2用戶認證協議(The User Authentication Protocol) 則為伺服器提供客戶端的身份鑒別;
3連接協議(The Connection Protocol) 將加密的信息隧道復用成若干個邏輯通道,提供給更高層的應用協議使用;
㈥ linux網路協議是什麼該如何去理解
Linux網路協議棧基於分層的設計思想,總共分為四層,從下往上依次是:物理層,鏈路層,網路層,應用層。 Linux網路協議棧其實是源於BSD的協議棧,它向上以及向下的介面以及協議棧本身的軟體分層組織的非常好。 Linux的協議棧基於分層的設計思想,總共分為四層,從下往上依次是:物理層,鏈路層,網路層,應用層。 物理層主要提供各種連接的物理設備,如各種網卡,串口卡等; 鏈路層主要指的是提供對物理層進行訪問的各種介面卡的驅動程序,如網卡驅動等; 網路層的作用是負責將網路數據包傳輸到正確的位置,最重要的網路層協議當然就是IP協議了,其實網路層還有其他的協議如ICMP,ARP,RARP等,只不過不像IP那樣被多數人所熟悉; 傳輸層的作用主要是提供端到端,說白一點就是提供應用程序之間的通信,傳輸層最著名的協議非TCP與UDP協議末屬了; 應用層,顧名思義,當然就是由應用程序提供的,用來對傳輸數據進行語義解釋的「人機界面」層了,比如HTTP,SMTP,FTP等等,其實應用層還不是人們最終所看到的那一層,最上面的一層應該是「解釋層」,負責將數據以各種不同的表項形式最終呈獻到人們眼前。 Linux網路核心架構Linux的網路架構從上往下可以分為三層,分別是: 用戶空間的應用層。 內核空間的網路協議棧層。 物理硬體層。 其中最重要最核心的當然是內核空間的協議棧層了。 Linux網路協議棧結構Linux的整個網路協議棧都構建與Linux Kernel中,整個棧也是嚴格按照分層的思想來設計的,整個棧共分為五層,分別是 : 1,系統調用介面層,實質是一個面向用戶空間應用程序的介面調用庫,向用戶空間應用程序提供使用網路服務的介面。 2,協議無關的介面層,就是SOCKET層,這一層的目的是屏蔽底層的不同協議(更准確的來說主要是TCP與UDP,當然還包括RAW IP, SCTP等),以便與系統調用層之間的介面可以簡單,統一。簡單的說,不管我們應用層使用什麼協議,都要通過系統調用介面來建立一個SOCKET,這個SOCKET其實是一個巨大的sock結構,它和下面一層的網路協議層聯系起來,屏蔽了不同的網路協議的不同,只吧數據部分呈獻給應用層(通過系統調用介面來呈獻)。 3,網路協議實現層,毫無疑問,這是整個協議棧的核心。這一層主要實現各種網路協議,最主要的當然是IP,ICMP,ARP,RARP,TCP,UDP等。這一層包含了很多設計的技巧與演算法,相當的不錯。 4,與具體設備無關的驅動介面層,這一層的目的主要是為了統一不同的介面卡的驅動程序與網路協議層的介面,它將各種不同的驅動程序的功能統一抽象為幾個特殊的動作,如open,close,init等,這一層可以屏蔽底層不同的驅動程序。 5,驅動程序層,這一層的目的就很簡單了,就是建立與硬體的介面層。 可以看到,Linux網路協議棧是一個嚴格分層的結構,其中的每一層都執行相對獨立的功能,結構非常清晰。 其中的兩個「無關」層的設計非常棒,通過這兩個「無關」層,其協議棧可以非常輕松的進行擴展。在我們自己的軟體設計中,可以吸收這種設計方法。