• 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
    • 它一旦把應用程序發給網路層的數據發送出去,就不保留數據備份
    • UDP在IP數據報的頭部僅僅加入了復用和數據校驗(欄位)
    • 發送端生產數據,接收端從網路中抓取數據
    • 結構簡單、無校驗、速度快、容易丟包、可廣播
    • DNS、TFTP、SNMP
    • 視頻、音頻、普通數據(無關緊要數據)

    • 英語:User Datagram Protocol,縮寫為UDP
    • 一種用戶數據報協議,又稱用戶數據報文協議
    • 是一個簡單的面向數據報的傳輸層協議,正式規範為RFC 768
    • 用戶數據協議、非連接協議
    • 不可靠
  • UDP包最大長度
    • 16位->2位元組存儲長度信息
    • 2^16-1=64K-1=65536-1=65535
    • 自身協議佔用:32+32位=64位=8位元組
    • 65535-8=65507 byte

UDP Api

  • DatagramSocket
    • 前面3個參數指定buf的使用區間
    • 後面2個參數指定目標機器地址與埠(僅僅在發送時有效)
    • 用於接收與發送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)
    • 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輸入流讀取數據

作者:俠客島的含笑

鏈接:imooc.com/article/26768

來源:慕課網本文首次發佈於慕課網 ,轉載請註明出處,謝謝合作

推薦閱讀:

接手別人的代碼,死的心有嗎?

普通的程序員和大神級的程序員有什麼區別?

網上黑程序員的現實依據是什麼?程序員真的那麼悲慘嗎?

有哪些視頻堪稱有毒?

暴露真實IP真的沒關係嗎?

有哪些程序員特有的習慣?

月薪3萬的程序員都避開了哪些坑?

和程序猿談戀愛是一種怎樣的體驗?


推薦閱讀:
相关文章