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