局域網中一次HTTP通信內部過程


1. 本地環境介紹

1.1網絡連接信息

  本地使用Vmware搭建了多台虛擬機,對於PC而言,相當於多了一塊網卡,這塊網卡只能和內部通信(虛擬機)

  每塊網卡都有自己的ip地址。

  

 

1.2 windows下ip地址

C:\WINDOWS\system32>ipconfig /all

Windows IP 配置

主機名 . . . . . . . . . . . . . : gc
主 DNS 后綴 . . . . . . . . . . . :
節點類型 . . . . . . . . . . . . : 混合
IP 路由已啟用 . . . . . . . . . . : 否
WINS 代理已啟用 . . . . . . . . . : 否

以太網適配器 以太網:

連接特定的 DNS 后綴 . . . . . . . :
物理地址. . . . . . . . . . . . . : 00-E0-70-03-41-F4
DHCP 已啟用 . . . . . . . . . . . : 是
自動配置已啟用. . . . . . . . . . : 是
IPv4 地址 . . . . . . . . . . . . : 192.168.0.109(首選)
子網掩碼 . . . . . . . . . . . . : 255.255.255.0
默認網關. . . . . . . . . . . . . : 192.168.0.1
DHCP 服務器 . . . . . . . . . . . : 192.168.0.1
DNS 服務器 . . . . . . . . . . . : 202.101.172.48,202.101.172.47

以太網適配器 VMware Network Adapter VMnet8:

描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8
物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-08
DHCP 已啟用 . . . . . . . . . . . : 是
自動配置已啟用. . . . . . . . . . : 是
IPv4 地址 . . . . . . . . . . . . : 192.168.134.1(首選)
子網掩碼 . . . . . . . . . . . . : 255.255.255.0
默認網關. . . . . . . . . . . . . :
DHCP 服務器 . . . . . . . . . . . : 192.168.134.254
主 WINS 服務器 . . . . . . . . . : 192.168.134.2
TCPIP 上的 NetBIOS . . . . . . . : 已啟用

 1.3linux下ip地址

  IP地址:192.168.134.128

  mac: 00:0c:29:a1:11:93

  默認網關: 192.168.134.2

  

1.4 WINS服務器和DNS服務器的區別

  WINS服務器使用的是IP地址和計算機名稱的映射,DNS實現的是IP地址和域名的映射

  WINS服務器的作用范圍是某個內部網絡,DNS服務器的作用范圍是整個互聯網

  如上圖,虛擬機linux 192.168.134.128的默認網關為wins虛擬機網卡上配置的WINS服務器ip地址 192.168.134.2.

2. HTTP請求過程

2.1. ARP尋址

  操作:先清除之前學到的arp信息,然后發起http請求(linux上安裝了httpd服務器,所以可以直接訪問80端口)

  

  

  

  查看本地學到新的arp信息,mac同上(即為linux服務器192.168.134.128的mac地址)。

  抓包分析如下:(看前兩行即可)

·    1.pc發送廣播請求,請求192.168.134.128的mac地址,報文信息:物理層的mac地址為 ff:ff:ff:ff:ff:ff(表示廣播), 網絡層的ip地址為192.168.134.128,mac為0(此時不知道目的mac)

     2.192.168.134.128那台linux服務器收到arp請求后判斷請求的是自己的arp信息,於是發送單播應答給pc(192.168.134.1). 於是pc學到了mac地址,開始進行tcp請求。

    備注:如果其它的linux開啟了arp代答功能,則可能會發送arp應答(如果它直到192.168.134.128這台服務器的mac地址的話)

    

2.2. TCP三次握手

  http請求底層使用的是tcp連接,所以需要先發起tcp請求,下面抓包為tcp三次握手過程

  1.客戶端192.168.134.1向服務端192.168.134.128發送SYN請求,序列化Seq為0

  2.服務端向客戶端發送SYN請求,ACK為對SYN請求的應答,Seq=0,Ack=1 (Seq為本端發送數據的序列號,根據發送數據長度遞增,起始為0,Ack為應答序列號,值為對端Seq+1)

  3.客戶端向服務端發送ACK,三次握手成功。

  后面可以基於這條tcp連接發送數據了

  

  理論圖片如下:

    

 

 

2.3 HTTP通信

  通過google開發者工具(F12)可以看到請求內容和應答內容:

    

 

  抓包內容如下(對應的data就是上圖中的http請求頭信息和應答信息):

    

 

2.4 TCP4次揮手

  http通信之后,過一段時間(連接超時,如上圖為httpkeep-alive time為5秒)后tcp連接關閉,需要進行四次揮手。下面是抓包數據:

    1.客戶端向服務端發送FIN請求

    2.服務端恢復了ACK,作為對FIN的應答(表示收到關閉連接的請求,應答之后對端處於終止等待狀態,可以接受數據不能發送數據)

    3.服務端發送FIN請求,表示服務端也關閉連接(服務端收到對端關閉請求之后可能上層需要做一些處理,在本端也關閉之前,仍然可以向客戶端發送數據)

    4.客戶端收到服務端關閉連接請求FIN, 發送應答給服務端,四次揮手結束。(實際上這時還有個TIME_WAIT等待狀態,linux是等待一分鍾,可配置,這時的端口是可復用的)

    備注:上述2,3兩步是用一個tcp包傳輸過來的,因為服務端連接也處於空閑狀態,所以收到關閉請求后自己也就隨之關閉了。

    

 

  理論圖片如下:

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM