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輸入流讀取資料