本文內容借鑒這篇博客:https://blog.csdn.net/agzhchren/article/details/79173491
但是這篇博客也是該博主轉載的,文章具體出處我沒有找到,如果有人知道文章具體出處,請在評論區告訴我,我好標明出處。
話說國際標准化組織ISO搞了個《OSI七層網絡模型》,但是因為實在太過復雜與繁瑣,基本上沒人執行它,但是又有一個五層模型和四層模型卻比較常見,尤其是四層模型。
作為一個程序員,了解四層模型是十分有比較的,但是大學《計算機網絡》這門課沒有好好學,所以在這里重新記一下。
TCP/IP是一個協議簇,由許多協議組成。 而HTTP(超文本傳輸協議)屬於TCP/IP協議簇。
七層、四層模型及其協議:
作為一個程序員,我們來說說TCP/IP四層概念模型:
應用層:
應用層決定了在向用戶提供應用服務時通信的活動,TCP/IP協議簇中有各類通用的應用服務。如FTP(文件傳輸協議)、DNS(域名解析協議),
當然還有HTTP(超文本傳輸協議)。
傳輸層:
傳輸層相對於上層的應用層,提供處於網絡連接中的兩台計算機之間的數據傳輸,傳輸層有兩個性質不同的協議:TCP(傳輸控制協議)、UDP(用戶數據報協議)
網際層:
網際層用來處理在網絡上流動的數據包,數據包是網絡傳輸的最小單位。該層規定了根據怎樣的傳輸路線來到達對方的計算機,並把數據包傳送給對方。
與對方計算機通過多台計算機或網絡設備進行傳輸時,網際層負責的就是在眾多的選項內選擇一條傳輸路線。網際層上的協議有:
IP(網際協議)、ARP(地址解析協議)、RARP(逆地址解析協議)等。
網絡接口層:
網絡接口層用來處理連接網絡的硬件部分,包括控制操作系統、硬件的設備驅動、NIC(網絡適配器,即網卡)、及光纖等物理可見部分。
那么TCP/IP具體如何來通信呢?
利用TCP/IP協議族進行網絡通信時,會通過分層順序與對方進行通信。發送端從應用層往下走,接收端則往應用層往上走。我們用HTTP舉例來說明,首先作為發送端的客戶端在應用層(HTTP協議)發出一個想看某個Web頁面的HTTP請求。接着,為了傳輸方便,在傳輸層(TCP協議)把從應用層處收到的數據(HTTP請求報文)進行分割,並在各個報文上打上標記序號及端口號后轉發給網絡層。在網絡層(IP協議),增加作為通信目的地的MAC地址后轉發給鏈路層。這樣一來,發往網絡的通信請求就准備齊全了。接收端的服務器在鏈路層接收到數據,按序往上層發送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端發送過來的HTTP請求。
並且發送端在層與層之間傳輸時,每經過一層都會被打上該層所獨有的頭部信息,反之,接收端在層與層傳輸數據時,每經過一層時會把對應的首部消去。這種把數據信息包裝起來的做法稱為封裝(encapsulate)。
IP(網際協議):負責傳輸的協議。
IP協議的主要任務就是將各種數據包傳給對方,但是想要確保把數據包傳遞給對方,需要滿足一些條件,其中最重要的兩個就是需要知曉目標機的IP地址與MAC地址。
IP地址指明了節點被分配到的地址,MAC地址是指網卡所屬的固定地址。IP地址可以和MAC地址進行配對。IP地址可變換,但MAC地址基本上不會更改。
IP間的通信依賴MAC地址。在網絡上,通信的雙方在同一局域網(LAN)內的情況是很少的,通常是經過多台計算機和網絡設備中轉才能連接到對方。而在進行中轉時,
會利用下一站中轉設備的MAC地址來搜索 下一個中轉目標。這時,會采用ARP協議(Address Resolution Protocol)。ARP 是一種用以解析地址的協議,
根據通信方的IP地址就可以反查出對應的MAC地址。
確保可靠性的TCP協議:
按層次分,TCP位於傳輸層,提供可靠的字節流服務。所謂的字節流服務(Byte Stream Service)是指,為了方便傳輸,將大塊數據分割成以報文段(segment)為單位的數據包進行管理。
而可靠的傳輸服務是指,能夠把數據准確可靠地傳給對方。一言以蔽之,TCP協議為了更容易傳送大數據才把數據分割,而且TCP協議能夠確認數據最終是否送達到對方。
確保數據能到達目標。為了准確無誤地將數據送達目標處,TCP協議采用了三次握手(three-way handshaking)策略。用TCP協議把數據包送出去后,TCP不會對傳送后的情況置之不理,
它一定會向對方確認是否成功送達。握手過程中使用了TCP的標志(flag) ——SYN(synchronize) 和ACK(acknowledgement)。發送端首先發送一個帶SYN標志的數據包給對方。
接收端收到后,回傳一個帶有SYN/ACK標志的數據包以示傳達確認信息。最后,發送端再回傳一個帶ACK標志的數據包,代表握手結束。
若在握手過程中某個階段莫名中斷,TCP協議會再次以相同的順序發送相同的數據包。除了上述三次握手,TCP協議還有其他各種手段來保證通信的可靠性。
負責域名解析的DNS服務:
DNS(Domain Name System)服務是和HTTP協議一樣位於應用層的協議。它提供域名到IP地址之間的解析服務。計算機既可以被賦予IP地址,也可以被賦予主機名和域名。
比如www.baidu.com。因為域名更加直觀,所以用戶通常使用主機名或域名來訪問對方的計算機,而不是直接通過IP地址訪問。但要讓計算機去理解名稱,相對而言就變得困難了。
因為計算機更擅長處理一長串數字。為了解決上述的問題,DNS服務應運而生。DNS協議提供通過域名查找IP地址,或逆向從IP地址反查域名的服務。
HTTP協議與其他TCP/IP協議是如何協作的:
想了解更多Python關於爬蟲、數據分析的內容,歡迎大家關注我的微信公眾號:悟道Python