Http、TCP/IP、UDP 協議棧

所謂協議就是大家一起遵守的規範格式,不應單獨的去理解一章節的知識點,如把一章一章串成知識流和故事,人習慣和依賴以故事的形式記憶,有人能記住π小數位的幾百位 是因爲他把0到9具體化成10個人 串成他們故事流來記的。


網絡流由下往上分爲:

物理層 

數據鏈路層           硬件驅動、NIC

網絡層                  IP協議

傳輸層                 TCP(傳輸控制協議)、UDP(用戶數據報協議)

會話層

應用層和表現層     HTTP協議,FTP(文件傳送協議),DNS(域名系統)


一、生成HTTP請求消息

   1.  從在瀏覽器輸入網址開始。網址,準確來算是URL(Uniform Resource Locator 統一資源定位符),如以http://  ftp:  file : 開頭

    瀏覽器第一步做的是對URL進行解析,從而生成發送給Web服務器

    URL拆分

   ftp://   +  user:passowrd  +  @ftp.shenbnnc.com:+  21  +/dir/test.html   用戶名(可省略)+密碼(可省略)+FTP服務器+端口號(可省略)+文件的路徑

  http://  +  user:passowrd  +  @ www.cmbc.com.cn:+8080+ /site/index.html  用戶名(可省略)+密碼(可省略)+Web服務器+端口號(可省略)+文件的路徑

2.對URL進行解析之後,瀏覽器確定了We服務器和文件名,接下來就是跟進這些信息生成HTTP請求消息

 請求消息=                   方法                     +           URI(統一資源標識符)

                           “進行什麼樣的操作”      +           “對什麼”

  (a)請求消息

GET /Sample.htm  HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: www.google.cn
Connection: Keep-Alive
第一行爲請求行 來說明資源
第二部分爲消息頭 用於表示請求的附加信息 
第三部分爲消息體 可爲空,包含客戶端向服務器發送的數據,如POST方法提交表單數據

(b)響應消息


HTTP/1.1 200 OK
Date: Mon, 24 Seven 2017 05:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

第一行狀態行 1XX 告知請求進度,2XX 成功, 3XX 需進一步操作 , 4XX  資源不存在, 5XX 服務器錯誤 

還有就是消息頭,和消息體及服務器向客戶端發送的數據



3.生成HTTP消息之後,接下來需要委託操作系統講消息發送給Web服務器,瀏覽器本身不具備講消息發送網絡的功能。

  在委託操作系統發消息是,必須提供IP地址而不是域名,因此得向DNS服務器查詢Web服務器的IP地址,及調用Socket一個程序組件

。同樣發送數據也得需要Socket多個程序組件,大致分爲4個階段:

   a)創建套接字         創建

  b)講管道連接到服務器端的套接字上     連接

  c)收發數據            通信

  d)斷開管道並刪除套接字     斷開

<描述符> =socket(<ipv4>,<流模式>,...)
conent(<描述符>,<服務器的IP地址和端口號>);
write(<描述符>,<發送數據>,<數據長度>);
<數據長度>=read<<描述符>,<接收緩衝區>
colse.(<描述符>);
..



下班   待待待..............................

  




 


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