網絡協議

一:網絡分層

  爲什麼要對網絡進行分層?

  雙方通信時共同遵循規範,由於這個過程非常複雜,所以對各個部分進行分層. 各分層有對應的協議,各司其職. 本層的改變不影響全局的改變.每一個層次只需利用提供的接口向上輸出.

  wKioL1WJUPay_A0AAAD5Y6n0v60992.jpg

網絡層: IPV4 , IPV6 

傳輸層: TCP/UDP  傳輸控制, 提供16爲的端口號.


二: 傳輸層

  1)端口號

  縱所周知,服務器端的端口號往往是被動打開,也被稱爲監聽端,服務器端.

端口號(0-1023)  任何其他進程不能使用,永久分配給某應用程序使用. 是有INAN分配. 

從1024-41951 叫註冊端口. 非常流行的服務會佔用某個服務端口.如mysql 默認佔用的是3306端口.

從41952-  臨時使用動態端口,或者私有端口.這個端口範圍是可以通過調節內核參數 來實現.

   

cat /proc/sys/net/ipv4/ip_local_port_range:
32768   61000
此處有兩個端口,表示可以作爲臨時端口的起始數字和結束數字.對於遇到大量的需要佔用臨時接口的應用程序需要調整此接口.

  2)TCP :傳輸控制協議

目前互聯網95%都是tcp傳輸控制協議   ;  sctp爲tcp的升級版.

TCP的層次功能.
  1)連接的建立:
  2)數據打包成段:  IP 打包成段最大的數據報文是65535   ,  老的路由器器只有1550以下.
  3)校驗和: 檢查數據報文發送過程中是否出現了錯誤.
  4)確認:   報文確認.
  5)超時機制:
  6)排序機制:  爲了接收方可以確認和連接數據.
  7)流量控制:  要有一個緩衝區發送緩存和接受緩存. 滑動窗口算法,
  8)擁塞算法:  慢啓動,從少到多進行發送.

 3)TCP 的有限狀態機

wKioL1WJWzSTtidKAAMMgXZKNAQ061.jpg

三次握手,四次斷開.

wKioL1WJU52Cvd5iAAFMBInJfns521.jpg


第一次握手:建立連接時,主機A發送SYN包(syn=m)到服務器,並進入SYN_SEND狀態,等待主機B確認
第二次握手:主機B收到SYN包,必須確認主機A的SYN(ACK=m+1),同時自己也發送一個SYN包(SYN=n),即SYN+ACK包,此時主機B進入SYN_RECV狀態
第三次握手:主機A收到主機B的SYN+ACK包,向主機B發送確認包ACK(ACK=n+1),此包發送完畢,主機A和主機B進入ESTABLISHED狀態,完成三次握手


當主機A完成數據傳輸後,將控制位FIN置1,提出停止TCP連接的請求
主機B收到FIN後對其作出響應,確認這一方向上的TCP連接將關閉,將ACK置1
由主機B端再提出反方向的關閉請求,將FIN置1
主機A對主機B的請求進行確認,將ACK置1,雙方向的關閉結束


三:套接字

  套接字從本質上講是一個設備.   ip+端口   綁定在某個服務上.

四:socket

  主要用於不同主機間的進程間通信.

   

domain(識別sockt的方法)
    unix domain  同一主機不同進程間同信一種方式.
    IPV4 domain  藉助IPV4 實現不同主機間進程通信.
    IPV6 domain


兩臺主機通信過程.

 進程註冊套接字

 發送端主機內核-->發送緩衝區-->接收緩衝區-->接收端主機內核.

 接收到內容要進行IO操作, 往往IO操作比較慢,需要緩衝區.




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