7層網(wǎng)絡(luò)模型-OSI
- 基礎(chǔ)層:物理層(Physical)、數(shù)據(jù)鏈路層(Datalink)、網(wǎng)絡(luò)層(Network)
- 傳輸層(Transport):TCP-UDP協(xié)議層、Socket
- 高級層:會話層(Session)、表示層(Presentation)、應(yīng)用層(Application)
Socket
- 簡單來說是IP地址與端口的結(jié)合協(xié)議(RFC793)
- 一種地址與端口的結(jié)合描述協(xié)議
- TCP/IP協(xié)議的相關(guān)API的總稱;是網(wǎng)絡(luò)Api的集合實(shí)現(xiàn)
- 涵蓋了:Stream Socket/Datagram Socket
- 作用:
- 在網(wǎng)絡(luò)傳輸中用于唯一標(biāo)示兩個端點(diǎn)之間的鏈接
- 端點(diǎn):包括(IP Port)
- 4個要素:客戶端地址、客戶端端口、服務(wù)器地址、服務(wù)器端口
- TCP
- TCP是面向連接的通信協(xié)議
- 通過三次握手建立連接,通訊完成時要拆除連接
- 由于TCP是面向連接的所以只能用于端到端的通訊
- UDP
- UDP是面向無連接的通訊協(xié)議
- UDP數(shù)據(jù)包括目的端口號和源端口號信息
- 由于通訊不需要連接,所以可以實(shí)現(xiàn)廣播發(fā)送,并不局限于端到端
- TCP/IP協(xié)議中,兩個進(jìn)程間通信的主要模式為:CS模型
- 主要目的:協(xié)同網(wǎng)絡(luò)中的計算機(jī)資源、服務(wù)模式、進(jìn)程間數(shù)據(jù)共享
- 常見的:FTP、SMTP、HTTP
Demo(略)
- 構(gòu)建TCP客戶端、服務(wù)端
- 客戶端發(fā)送數(shù)據(jù)
- 服務(wù)器讀取數(shù)據(jù)并打印
報文、協(xié)議、Mac地址
報文
報文段是指TCP/IP協(xié)議網(wǎng)絡(luò)傳輸過程中,起著路由導(dǎo)航作用- 用以查詢各個網(wǎng)絡(luò)路由網(wǎng)段、IP地址、交換協(xié)議等IP數(shù)據(jù)包
- 報文段充當(dāng)整個TCP/IP協(xié)議數(shù)據(jù)包的導(dǎo)航路由功能
- 報文在傳輸過程中會不斷地封裝成分組、包、幀來傳輸
- 封裝方式就是添加一些控制信息組成的首部,即報文頭
傳輸協(xié)議
協(xié)議顧名思義,一種規(guī)定,約束- 約定大于配置,在網(wǎng)絡(luò)傳輸中依然適用;網(wǎng)絡(luò)的傳輸流程是健壯的穩(wěn)定的,得益于基礎(chǔ)的協(xié)議構(gòu)成
- 簡單來說:A->B的傳輸數(shù)據(jù),B能識別,反之B->A的傳輸數(shù)據(jù)A也能識別,這就是協(xié)議
Mac地址
Media Access Control或者M(jìn)edium Access Control- 意譯為媒體訪問控制,或稱為物理地址、硬件地址
- 用來定義
網(wǎng)絡(luò)設(shè)備的位置
- 形如:44-45-53-54-00-00;與身份證類似
IP,端口,遠(yuǎn)程服務(wù)器
- 互聯(lián)網(wǎng)協(xié)議地址(英語:Internet Protocol Address,又譯為網(wǎng)際協(xié)議地址),縮寫為IP地址(英語:IPAddress)
- 是分配給網(wǎng)絡(luò)上使用網(wǎng)際協(xié)議(英語:Internet Protocol,IP)的設(shè)備的數(shù)字標(biāo)簽
- 常見的IP地址分為IPV4與IPv6兩大類
- IP地址由32位二進(jìn)制數(shù)組成,常以XXX.XXX.XXX.XXX形式表現(xiàn),每組XXX代表小于或等于255的10進(jìn)制數(shù)
- 如:208.80.152.2
- 分為A、B、C、D、E五大類,其中E類屬于特殊保留地址
- IPV4
- 總數(shù)量:4,294,967,296個(即232):42億個;最終于2011年2月3日用盡
- 如果主機(jī)號是全1,那么這個地址為直接廣播地址
- IP地址“255.255.255.255'為受限廣播地址
- IPV6
- 總共有128位長,IPV6地址的表達(dá)形式,一般采用32個十六進(jìn)制數(shù)。也可以想象為1632個
- 由兩個邏輯部分組成:一個64位的網(wǎng)絡(luò)前綴和一個64位的主機(jī)地址,主機(jī)地址通常根據(jù)物理地址自動生成,叫做EUI-64(或者64-位擴(kuò)展唯一標(biāo)識)
- 2001:0db8:85a3:0000:1319:8a2e:0370:7344
- IPv4轉(zhuǎn)換為IPv6一定可行,IPv6轉(zhuǎn)換為IPv4不一定可行
端口
如果把IP地址比作一間房子,端口就是出入這間房子的門或者窗戶- 在不同門窗戶后有不同的人,房子中的用戶與外界交流的出口
- 外界鴿子(信息)飛到不同窗戶也就是給不同的人傳遞信息
- 0到1023號端口以及1024到49151號端口都是特殊端口
- 計算機(jī)之間依照互聯(lián)網(wǎng)傳輸層TCP/IP協(xié)議的協(xié)議通信,不同的協(xié)議都對應(yīng)不同的端口
- 49152到65535號端口屬于“動態(tài)端口”范圍,沒有端口可以被正式地注冊占用
UDP
英語:User Datagram Protocol,縮寫為UDP- 一種用戶數(shù)據(jù)報協(xié)議,又稱用戶數(shù)據(jù)報文協(xié)議
- 是一個簡單的面向數(shù)據(jù)報的傳輸層協(xié)議,正式規(guī)范為RFC 768
- 用戶數(shù)據(jù)協(xié)議、非連接協(xié)議
不可靠
它一旦把應(yīng)用程序發(fā)給網(wǎng)絡(luò)層的數(shù)據(jù)發(fā)送出去,就不保留數(shù)據(jù)備份- UDP在IP數(shù)據(jù)報的頭部僅僅加入了復(fù)用和數(shù)據(jù)校驗(yàn)(字段)
- 發(fā)送端生產(chǎn)數(shù)據(jù),接收端從網(wǎng)絡(luò)中抓取數(shù)據(jù)
- 結(jié)構(gòu)簡單、無校驗(yàn)、速度快、容易丟包、可廣播
- DNS、TFTP、SNMP
- 視頻、音頻、普通數(shù)據(jù)(無關(guān)緊要數(shù)據(jù))
UDP包最大長度
16位->2字節(jié)存儲長度信息- 2^16-1=64K-1=65536-1=65535
- 自身協(xié)議占用:32 32位=64位=8字節(jié)
65535-8=65507 byte
UDP Api
- DatagramSocket
- 用于接收與發(fā)送UDP的類
- 負(fù)責(zé)發(fā)送某一個UDP包,或者接收UDP包
- 不同于TCP,UDP并沒有合并到Socket APl中
- 沒有服務(wù)器端和客戶端
- DatagramSocket)創(chuàng)建簡單實(shí)例,不指定端口與IP
- DatagramSocket(int port)創(chuàng)建監(jiān)聽固定端口的實(shí)例(接收數(shù)據(jù)的端口)
- DatagramSocket(int port,InetAddress localAddr)創(chuàng)建固定端口指定lP的實(shí)例(當(dāng)計算機(jī)有多個IP地址存在時)
- receive(DatagramPacket d):接收
- send(DatagramPacket d):發(fā)送
- setSoTimeout(int timeout):設(shè)置超時,毫秒
- close() 關(guān)閉,釋放資源
- DatagramPacket(bytel] bufint offset,int length,InetAddress address,int port)
- 前面3個參數(shù)指定buf的使用區(qū)間
- 后面2個參數(shù)指定目標(biāo)機(jī)器地址與端口(僅僅在發(fā)送時有效)
- SocketAddress相當(dāng)于InetAddress Port
- setData(bytel[] bufint ofset,int length)
- setData(bytel[l buf)
- setLength(int length)
- getData()、getOffset()、getLength()
- setAddress(InetAddress iaddr)、setPort(int iport) 發(fā)送時有效,接收時set操作是由系統(tǒng)完成的
- getAddress()、getPort()
- setSocketAddress(SocketAddress address)
- getSocketAddress()
UDP單播、廣播、多播
- 高頻次廣播有可能導(dǎo)致局域網(wǎng)或者某段網(wǎng)絡(luò)的信息帶寬被占滿
IP地址類別
廣播地址
255.255.255.255為受限廣播地址- C網(wǎng)廣播地址一般為:XXX.XXX.XXX.255(192.168.1.255)
- D類IP地址為多播預(yù)留
- ipv4的地址本來就是用32位來表示的,分成4個8位來書寫, 所以ipv4和地址是可以和32位unsigned int
- 廣播地址運(yùn)算
- IP:192.168.124.7
- 子網(wǎng)掩碼:255.255.255.0
- 網(wǎng)絡(luò)地址:192.168.124.0
- 廣播地址:192.168.124.255
- 例子二
- IP:192.168.124.7
- 子網(wǎng)掩碼:255.255.255.192
- 網(wǎng)絡(luò)地址:192.168.124.0
- 廣播地址:192.168.124.63
- 255.255.255.192->11111111.11111111.11111111.11000000
- 可劃分網(wǎng)段:2/2=4個
- 0~63、64~127、128~191、192~255
- 192.168.124.63
廣播通信問題
- 主機(jī)一:192.168.124.7,子網(wǎng)掩碼:255.255.255.192
- 主機(jī)二:192.168.124.100,子網(wǎng)掩碼:255.255.255.192
- 主機(jī)一廣播地址:192.168.124.63
- 主機(jī)二廣播地址:192.168.124.127
- 因?yàn)閮蓚€主機(jī)的廣播地址不同,所以互相收不到對方的消息
局域網(wǎng)搜索Demo(略)
- UDP接收消息并回送功能實(shí)現(xiàn)
- UDP局域網(wǎng)廣播發(fā)送實(shí)現(xiàn)
- UDP局域網(wǎng)回送消息實(shí)現(xiàn)
TCP(Transmission Control Protocol)
- TCP是傳輸控制協(xié)議;是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC793定義
- 與UDP一樣完成第四層傳輸層所指定的功能與職責(zé)
- 三次握手、四次揮手
- 具有校驗(yàn)機(jī)制、可靠、數(shù)據(jù)傳輸穩(wěn)定
- 作用
- 聊天消息傳輸、推送
- 單人語音、視頻聊天等
- 幾乎UDP能做的都能做,但需要考慮復(fù)雜性、性能問題
- 限制:無法進(jìn)行廣播,多播等操作
TDP Api
- socket():創(chuàng)建一個Socket
- bind):綁定一個Socket到一個本地地址和端口上
- connect():發(fā)起連接,連接到遠(yuǎn)程套接字
- accept():接受一個新的連接,阻塞等待
- write():把數(shù)據(jù)寫入到Socket輸出流
- read():從Socket輸入流讀取數(shù)據(jù)