TCP是一個工作在傳輸層,面向連接的協議,一臺計算機與另一臺計算機通信就需要TCP協議,當然還有一個和它并列的一個協議可以使用,只是TCP更加穩定且常用.
上圖為一臺計算機與另一臺計算機建立通訊的過程,它實際通信中傳遞的不止斜線上的信息.上面的SYN是同步號,
ACK為確認號.seq為序列號,ack為輔助的確認號
上面為建立通信時發送的TCP信息詳細結構,ip首部為internet層添加的IP和mac地址信息.端口是在跨路由通信時使用到的,它并不在IP中,而是在TCP的首部,序列號表示本機發送的第幾個數據包,在來回的通信中會有各自的序列號. 確認號,是在對方發送信息以后,記錄對方序列號后加以得到的號碼,再次發送時如果對方發現確認號正確就代表傳輸過程中沒有丟包.數據偏移(字節),窗口(傳播速率),校驗和(計算校驗發現錯誤),緊急指針,選項有(最大報文長度,窗口擴大,時間戳).
URG,ACK,PSH,RST,SYN,FIN都只有一位,0或1
URG表示是否緊急,ACK表示前面的確認號字段是否有效.TCP規定,建立連接后,ACK必須為1.
PSH提示接收方是否把緩存區數據提交上層應用
RST表示與主機連接是否有錯誤,否則重新建立連接,帶有RST=1的標志的報文為復位報文段
SYN建立連接時使用,用來同步序號,和ACK連用.SYN=1,ACK=0,表示請求連接,SYN=1,ACK=1,表示同意建立接
FIN表示是否要關閉連接,帶FIN的tcp報文段稱為結束報文段
?連接時有三次握手,斷開時還有四次揮手,兩者發送的報文類似,只是通信機制有些差別.在已經建立聯通時,發送的報文也是類似結構.
在兩臺計算機建立連接之前發動連接的計算機要知道需要連接的計算機是誰它們才可能通信,這個需要操使用者提供IP地址,然后才能獲得mac地址,才能夠通訊.這里涉及到一個問題為什么要使用到mac地址才能通訊,使用IP地址也能唯一確定一臺計算機了,即使不在一個局域網中使用端口也能確定一臺計算機.這主要和網絡管理,和網絡協議(TCP/IP)有關.關于這個問題網上有很多版本的討論,我選擇了一個版本的,反正TCP/IP協議中同時需要IP和mac地址才能通訊.
IP地址分為網絡地址和主機地址兩部分,在網絡傳輸中便于快速尋找路由,并返回主機解析。而且,對于主機來說不是唯一性的。MAC是網卡物理地址,是每個網卡唯一地址。其中前6位16進制數代表網絡硬件制造商的編號,它由IEEE(Istitute of Electrical and Electronics Engineers,電氣與電子工程師協會)分配,而后3位16進制數代表該制造商所制造的某個網絡產品(如網卡)的系列號。
當網卡更換的時候不必通知網管MAC地址更換,即可使用現有IP地址進行網絡服務。
現在有很多計算機都是通過先組建局域網,然后通過交換機和Internet連接的。然后給每個用戶分配固定的IP地址,由管理中心統一管理,這樣為了管理方便就需要使用Mac地址來標志用戶,防止發生混亂,明確責任(比如網絡犯罪)。
ARP(Address Resolution Protocol)地址解析協議通信
如果在路由器一側(在同一個廣播域中),主機A廣播(誰的ip是IPB)后主機B返回它的mac地址, A與B就能確定連接路徑夠建立連接.
如果不在同一側,比如向主機C訪問,廣播沒有回應證明目標計算機不在一個廣播域中,那么會向網關(路由器)發信息,路由器回應它的mac地址,然后A再次發送{DST MAC:MAC1??SRC MAC:MACA DST IP:IPC SRC IP:IPA}??到路由器端口1,路由器處理的辦法是向廣播域中發廣播(誰的ip是IPC),有C回應了它的mac地址,
然后端口2再次發信息給C{MACC??MAC2??IPC??IPA},機器C就知道A了,這樣A和C就建立了連接 ,如果中間有多次路由就是多次經過上面過程
arp -n 顯示局域網中mac地址和IP的對應關系
Windows中使用 arp -a
RARP:Reverse Address Resolution Protocol 反向地址轉換協議
RARP發出要反向解析的物理地址并希望返回其對應的IP地址,應答包括由能夠提供所需信息的RARP服務器發出的IP地址。雖然發送方發出的是廣播信息,RARP規定只有RARP服務器能產生應答。許多網絡指定多個RARP服務器,這樣做既是為了平衡負載也是為了作為出現問題時的備份
在計算機中有一個ARP表,在ARP中記錄IP和mac地址的對應關系,它是在之前獲取IP的mac地址之后記錄下來的.
通過ARP表就能直接確定目標計算機,但是仍然需要確定路由路徑,但是計算機的ARP表中信息保存時間很短(一般10分鐘),路由路徑依然存在,不用重新獲取.
在TCP通訊中IP首部就包含自己的mac地址和IP和源的mac地址和IP地址
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89084