1. 程式人生 > >Socket入門之前的知識點

Socket入門之前的知識點

  Socket難點

  資料粘包

  心跳維持

  資料丟包

  效能問題

  7層網路模型-OSI

  基礎層:物理層(Physical)、資料鏈路層(Datalink)、網路層(Network)

  傳輸層(Transport):TCP-UDP協議層、Socket

  高階層:會話層(Session)、表示層(Presentation)、應用層(Application)

  

圖片描述

 

  

圖片描述

 

  Socket

  簡單來說是IP地址與埠的結合協議(RFC793)

  一種地址與埠的結合描述協議

  TCP/IP協議的相關API的總稱;是網路Api的集合實現

  涵蓋了:Stream Socket/Datagram Socket

  作用:

  在網路傳輸中用於唯一標示兩個端點之間的連結

  端點:包括(IP+Port)

  4個要素:客戶端地址、客戶端埠、伺服器地址、伺服器埠

  TCP

  TCP是面向連線的通訊協議

  通過三次握手建立連線,通訊完成時要拆除連線

  由於TCP是面向連線的所以只能用於端到端的通訊

  UDP

  UDP是面向無連線的通訊協議

  UDP資料包括目的埠號和源埠號資訊

  由於通訊不需要連線,所以可以實現廣播發送,並不侷限於端到端

  TCP/IP協議中,兩個程序間通訊的主要模式為:CS模型

  主要目的:協同網路中的計算機資源、服務模式、程序間資料共享

  常見的:FTP、SMTP、HTTP

  Demo(略)

  構建TCP客戶端、服務端

  客戶端傳送資料

  伺服器讀取資料並列印

  報文、協議、Mac地址

  報文

  報文段是指TCP/IP協議網路傳輸過程中,起著路由導航作用

  用以查詢各個網路路由網段、IP地址、交換協議等IP資料包

  報文段充當整個TCP/IP協議資料包的導航路由功能

  報文在傳輸過程中會不斷地封裝成分組、包、幀來傳輸

  封裝方式就是新增一些控制資訊組成的首部,即報文頭

  傳輸協議

  協議顧名思義,一種規定,約束

  約定大於配置,在網路傳輸中依然適用;網路的傳輸流程是健壯的穩定的,得益於基礎的協議構成

  簡單來說:A-B的傳輸資料,B能識別,反之B-A的傳輸資料A也能識別,這就是協議

  Mac地址

  Media Access Control或者Medium Access Control

  意譯為媒體訪問控制,或稱為實體地址、硬體地址

  用來定義網路裝置的位置

  形如:44-45-53-54-00-00;與身份證類似

  IP,埠,遠端伺服器

  網際網路協議地址(英語:Internet Protocol Address,又譯為網際協議地址),縮寫為IP地址(英語:IPAddress)

  是分配給網路上使用網際協議(英語:Internet Protocol,IP)的裝置的數字標籤

  常見的IP地址分為IPV4與IPv6兩大類

  IP地址由32位二進位制陣列成,常以XXX.XXX.XXX.XXX形式表現,每組XXX代表小於或等於255的10進位制數

  如:208.80.152.2

  分為A、B、C、D、E五大類,其中E類屬於特殊保留地址

  IPV4

  總數量:4,294,967,296個(即232):42億個;最終於2011年2月3日用盡

  如果主機號是全1,那麼這個地址為直接廣播地址

  IP地址“255.255.255.255為受限廣播地址

  IPV6

  總共有128位長,IPV6地址的表達形式,一般採用32個十六進位制數。也可以想象為1632個

  由兩個邏輯部分組成:一個64位的網路字首和一個64位的主機地址,主機地址通常根據實體地址自動生成,叫做EUI-64(或者64-位擴充套件唯一標識)

  2001:0db8:85a3:0000:1319:8a2e:0370:7344

  IPv4轉換為IPv6一定可行,IPv6轉換為IPv4不一定可行

  埠

  如果把IP地址比作一間房子,埠就是出入這間房子的門或者窗戶

  在不同門窗戶後有不同的人,房子中的使用者與外界交流的出口

  外界鴿子(資訊)飛到不同窗戶也就是給不同的人傳遞資訊

  0到1023號埠以及1024到49151號埠都是特殊埠

  

圖片描述

 

  計算機之間依照網際網路傳輸層TCP/IP協議的協議通訊,不同的協議都對應不同的埠

  49152到65535號埠屬於“動態埠”範圍,沒有埠可以被正式地註冊佔用

  

 

  

 

  UDP

  英語:User Datagram Protocol,縮寫為UDP

  一種使用者資料報協議,又稱使用者資料報文協議

  是一個簡單的面向資料報的傳輸層協議,正式規範為RFC 768

  使用者資料協議、非連線協議

  不可靠

  它一旦把應用程式發給網路層的資料傳送出去,就不保留資料備份

  UDP在IP資料報的頭部僅僅加入了複用和資料校驗(欄位)

  傳送端生產資料,接收端從網路中抓取資料

  結構簡單、無校驗、速度快、容易丟包、可廣播

  DNS、TFTP、SNMP

  視訊、音訊、普通資料(無關緊要資料)

  

  UDP包最大長度

  16位-2位元組儲存長度資訊

  2^16-1=64K-1=65536-1=65535

  自身協議佔用:32+32位=64位=8位元組

  65535-8=65507 byte

  UDP Api

  DatagramSocket

  用於接收與傳送UDP的類

  負責傳送某一個UDP包,或者接收UDP包

  不同於TCP,UDP並沒有合併到Socket APl中

  沒有伺服器端和客戶端

  DatagramSocket)建立簡單例項,不指定埠與IP

  DatagramSocket(int port)建立監聽固定埠的例項(接收資料的埠)

  DatagramSocket(int port,InetAddress localAddr)建立固定埠指定lP的例項(當計算機有多個IP地址存在時)

  receive(DatagramPacket d):接收

  send(DatagramPacket d):傳送

  setSoTimeout(int timeout):設定超時,毫秒

  close() 關閉,釋放資源

  DatagramPacket(bytel] bufint offset,int length,InetAddress address,int port)

  前面3個引數指定buf的使用區間

  後面2個引數指定目標機器地址與埠(僅僅在傳送時有效)

  SocketAddress相當於InetAddress+Port

  setData(bytel[] bufint ofset,int length)

  setData(bytel[l buf)

  setLength(int length)

  getData()、getOffset()、getLength()

  setAddress(InetAddress iaddr)、setPort(int iport) 傳送時有效,接收時set操作是由系統完成的

  getAddress()、getPort()

  setSocketAddress(SocketAddress address)

  getSocketAddress()

  UDP單播、廣播、多播

  高頻次廣播有可能導致區域網或者某段網路的資訊頻寬被佔滿

  

 

  IP地址類別

  

 

  廣播地址

  255.255.255.255為受限廣播地址

  C網廣播地址一般為:XXX.XXX.XXX.255(192.168.1.255)

  D類IP地址為多播預留

  

 

  ipv4的地址本來就是用32位來表示的,分成4個8位來書寫, 所以ipv4和地址是可以和32位unsigned int

  廣播地址運算

  IP:192.168.124.7

  子網掩碼:255.255.255.0

  網路地址:192.168.124.0

  廣播地址:192.168.124.255

  例子二

  IP:192.168.124.7

  子網掩碼:255.255.255.192

  網路地址:192.168.124.0

  廣播地址:192.168.124.63

  255.255.255.192-11111111.11111111.11111111.11000000

  可劃分網段:2/2=4個

  0~63、64~127、128~191、192~255

  192.168.124.63

  廣播通訊問題

  主機一:192.168.124.7,子網掩碼:255.255.255.192

  主機二:192.168.124.100,子網掩碼:255.255.255.192

  主機一廣播地址:192.168.124.63

  主機二廣播地址:192.168.124.127

  因為兩個主機的廣播地址不同,所以互相收不到對方的訊息

  區域網搜尋Demo(略)

  UDP接收訊息並回送功能實現

  UDP區域網廣播發送實現

  UDP區域網回送訊息實現

  TCP(Transmission Control Protocol)

  TCP是傳輸控制協議;是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC793定義

  與UDP一樣完成第四層傳輸層所指定的功能與職責

  三次握手、四次揮手

  具有校驗機制、可靠、資料傳輸穩定

  

 

  作用

  聊天訊息傳輸、推送

  單人語音、視訊聊天等

  幾乎UDP能做的都能做,但需要考慮複雜性、效能問題

  限制:無法進行廣播,多播等操作

  TDP Api

  socket():建立一個Socket

  bind):繫結一個Socket到一個本地地址和埠上

  connect():發起連線,連線到遠端套接字

  accept():接受一個新的連線,阻塞等待

  write():把資料寫入到Socket輸出流

  read():從Socket輸入流讀取資料