基礎知識:json
tcp/ip協議不是一個協議,是一個協議羣,tcp/ip協議對應的四層模型,應用層、傳輸層、網絡層、鏈路層。服務器
各層到底作了啥?網絡
鏈路層:tcp
主要是將數據封裝成數據幀,數據幀頭部信息有源mac地址,目標mac地址,而後以廣播形式經過物理介質(光纖、雙絞線..)發送給目標主機。
爲何有ip地址還須要mac地址?
ip地址是分配的,可變更的,mac地址是每塊網卡的身份標識,主機接入互聯網必須使用網卡,網卡地址是一個機器全球惟一標識,因此經過mac地址找目標主機更可靠。
有了MAC地址之後,以太網採用廣播形式,把數據包發給該子網內全部主機,子網內每臺主機在接收到這個包之後,都會讀取首部裏的目標MAC地址,而後和本身的MAC地址進行對比,若是相同就作下一步處理,若是不一樣,就丟棄這個包。ip
網絡層:路由
發送者如何知道接收者的MAC地址?(arp協議)
發送者如何知道接收者和本身同屬一個子網?(ip協議)
若是接收者和本身不在同一個子網,數據包如何發給對方(路由協議)基礎
網絡層有ip協議、arp協議、路由協議,主要是解決如上三個問題。
我認爲該層主要是爲了獲取目標的mac地址。
ARP獲取mac地址,ARP首先會發起一個請求數據包,數據包的首部包含了目標主機的IP地址,而後這個數據包會在鏈路層進行再次包裝,生成以太網數據包,在數據包傳輸時要經過ip協議判斷目標ip和源ip是否處於同一子網,若是不在,則經過路由協議將數據包轉發給本子網的網關進行路由,最終由以太網廣播給目標ip子網內的全部主機,每一臺主機都會接收到這個數據包,並取出標頭裏的IP地址,而後和本身的IP地址進行比較,若是相同就返回本身的MAC地址,若是不一樣就丟棄該數據包。ARP接收返回消息,以此肯定目標機的MAC地址。ftp
傳輸層:表單
鏈路層主經過MAC地址明確主機的身份, 網絡層經過IP地址明確了目標主機網段,有了這兩個地址,數據包就從能夠從一個主機發送到另外一臺主機。
但實際上數據包是從一個主機的某個應用程序發出,而後由對方主機的應用程序接收。而每臺電腦都有可能同時運行着不少個應用程序,因此當數據包被髮送到主機上之後,是沒法肯定哪一個應用程序要接收這個包。
因此傳輸層傳輸層的主要工做是定義端口,標識應用程序身份,實現端口到端口的通訊,TCP協議能夠保證數據傳輸的可靠性。路由器
傳輸層有udp、tcp協議,udp協議是面向無鏈接,tcp是創建在udp的基礎上創建三次握手,確認鏈接可靠性。
主機A:我想發數據給你,能夠麼?
主機B:能夠,你何時發?
主機A:我立刻發,你接着!
應用層:
應用層常見的有http、ftp、smtp協議等,該層主要工做是定義數據格式並按照對應的格式解讀數據。
例http協議,在頭信息定義了content-type是json仍是from表單提交。
總結:
當你輸入一個網址並按下回車鍵的時候,首先,應用層協議對該請求包作了格式定義;緊接着傳輸層協議加上了雙方的端口號,確認了雙方通訊的應用程序;而後網絡協議加上了雙方的IP地址,確認了雙方的網絡位置;最後鏈路層協議加上了雙方的MAC地址,確認了雙方的物理位置,同時將數據進行分組,造成數據幀,採用廣播方式,經過傳輸介質發送給對方主機。而對於不一樣網段,該數據包首先會轉發給網關路由器,通過屢次轉發後,最終被髮送到目標主機。目標機接收到數據包後,採用對應的協議,對幀數據進行組裝,而後再經過一層一層的協議進行解析,最終被應用層的協議解析並交給服務器處理。