一個網絡請求/響應發生時,都經過哪些?瀏覽器輸入查詢,服務器響應結果,是如何進行的?TCP/IP 分層協議,端口號作用

 

 

在網絡上,通信的雙方通常都是要經過多臺計算機或者網絡設備中轉才能連接到對方。而在進行中轉時,會利用下一站中轉設備的MAC地址來搜索下一個中轉目標,這時我們就是靠ARP協議來進行處理。

兩張圖,完美解析:

數據來源:OSI七層與TCP/IP五層網絡架構,個人理解,通過一個http請求的全過程,分析在協議棧中的流轉過程

數據來源:OSI七層與TCP/IP五層網絡架構詳解

具體交互關係:待更新。

 

三次握手:爲什麼還需要第三次握手呢?

      第三次握手主要是防止已經失效的連接請求又傳送到服務器端造成錯誤

四次揮手:爲什麼要四次揮手呢?

      因爲數據的傳輸是全雙工的,即數據的傳輸是雙向的。當瀏覽器停止給服務器發送數據時,服務器有可能還在給瀏覽器發送數據。所以,先發送ACK,表示我已經收到請求。服務器需要等自己的數據傳輸完成後,再告訴瀏覽器,發送FIN請求。

端口號是什麼?有什麼用呢

當一臺電腦啓動了一個可以讓遠程其他電腦訪問的程序,那麼它就要開啓至少一個端口號來讓外界訪問。我們可以把沒有開啓端口號的電腦看作是一個密封的房間,密封的房間當然不可能接受外界的訪問,所以當系統開啓了一個可以讓外界訪問的程序後它自然需要在房間上開一個窗口來接受來自外界的訪問,這個窗口就是端口。


那麼爲什麼要給端口編號來區分它們呢,既然一個程序開了一個端口,那麼不是外部信息都可以通過這個開啓的端口來訪問了嗎?答案是不可以。爲什麼呢?因爲數據是用端口號來通知傳輸層協議送給哪個軟件來處理的,數據是沒有智慧的,如果很多的程序共用一個端口來接受數據的話,那麼當外界的一個數據包送來後傳輸層就不知道該送給哪一個軟件來處理,這樣勢必將導致混亂。

當服務器接收到請求後:看下nginx.conf的配置

server {
    listen       80; #監聽80端口,接收http請求
    server_name  www.example.com; #就是網站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 準備存放代碼工程的路徑
    #路由到網站根目錄www.example.com時候的處理
    location / {
        index index.php; #跳轉到www.example.com/index.php
        autoindex on;
    }   
 
    #當請求網站下php文件的時候,反向代理到php-fpm
    location ~ \.php$ {        
        include /usr/local/etc/nginx/fastcgi.conf; #加載nginx的fastcgi模塊
        fastcgi_intercept_errors on;
        fastcgi_pass   127.0.0.1:9000; #nginx fastcgi進程監聽的IP地址和端口
    }
}
www.example.com        |
      |
    Nginx        |
      |路由到www.example.com/index.php        |
      |加載nginx的fast-cgi模塊        |
      |fast-cgi監聽127.0.0.1:9000地址        |
      |www.example.com/index.php請求到達127.0.0.1:9000
      |
      |
   等待處理...

 

當請求一個www.example.com具體流程如上。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章