網(wǎng)絡(luò)編程筆記
網(wǎng)絡(luò)編程從大的方面就是說(shuō)對(duì)信息的發(fā)送接收。
通過(guò)操作相應(yīng)API調(diào)度計(jì)算機(jī)資源硬件,并且利用管道(網(wǎng)線(xiàn))進(jìn)行數(shù)據(jù)交互的過(guò)程。
更為具體的涉及:網(wǎng)絡(luò)模型、套接字、數(shù)據(jù)包
基礎(chǔ)層:物理層(physical)、數(shù)據(jù)鏈路層(Datalink)、網(wǎng)絡(luò)層(network).。
傳輸層(Transport):TCP-UDP協(xié)議層、Socket。
高級(jí)層::會(huì)話(huà)層(Session)、表示層(Presentation)、應(yīng)用層(Application)
Socket與TCP、UDP?
?Socket: 簡(jiǎn)單來(lái)說(shuō)是ip地址與端口的結(jié)合協(xié)議(RFC 793).
? ? ? ? ? ? ? 一種地址與端口的結(jié)合描述協(xié)議。
? ? ? ? ? ? ?TCP/IP協(xié)議的相關(guān)API的總稱(chēng);是網(wǎng)絡(luò)API的集合實(shí)現(xiàn).
? ? ? ? ? ? ? 涵蓋了Stream socket /Datagram Socket?
?socket 的組成與作用:
? ? ? ? ? ? ? 在網(wǎng)絡(luò)傳輸中用于唯一標(biāo)識(shí)兩個(gè)端點(diǎn)的鏈接。
? ? ? ? ? ? ? 端點(diǎn):包括(ip+port)
? ? ? ? ? ? ? 4個(gè)要素:客戶(hù)端的地址、客戶(hù)端的端口、服務(wù)器的地址、服務(wù)器端口。?
6. Socket的傳輸原理
Socket之TCP:
? ? ? ? ?tcp是面向連接的通訊協(xié)議。
? ? ? ? ?通過(guò)三次握手建立連接,通訊完成時(shí)要拆除連接。
? ? ? ? ?由于TCP是面向連接的,所以只能用于端到端的通信。
Socket之UDP:
? ? ? ? UDP是面向無(wú)連接進(jìn)行通訊的。
? ? ? ? UDP數(shù)據(jù)包括目的端口號(hào)和源端口號(hào)信息。
? ? ? ? 由于通訊時(shí)是不需要連接,所以可以是實(shí)現(xiàn)廣播發(fā)送,并不局限于端到端。 java.net.Socket
Socket(套接字)封裝了TCP協(xié)議的通訊細(xì)節(jié),是的我們使用它可以與服務(wù)端建立網(wǎng)絡(luò)鏈接,并通過(guò) 它獲取兩個(gè)流(一個(gè)輸入一個(gè)輸出),然后使用這兩個(gè)流的讀寫(xiě)操作完成與服務(wù)端的數(shù)據(jù)交互
java.net.ServerSocket
ServerSocket運(yùn)行在服務(wù)端,作用有兩個(gè):
1:向系統(tǒng)申請(qǐng)服務(wù)端口,客戶(hù)端的Socket就是通過(guò)這個(gè)端口與服務(wù)端建立連接的。
2:監(jiān)聽(tīng)服務(wù)端口,一旦一個(gè)客戶(hù)端通過(guò)該端口建立連接則會(huì)自動(dòng)創(chuàng)建一個(gè)Socket,并通過(guò)該Socket與客戶(hù)端進(jìn)行數(shù)據(jù)交互。
7.Client-Server Application
?TCP/IP協(xié)議中,兩個(gè)進(jìn)程間通信的主要模式為CS模型?
?主要的目的:協(xié)調(diào)網(wǎng)絡(luò)中計(jì)算機(jī)資源、服務(wù)模式、進(jìn)程間數(shù)據(jù)共享
?常見(jiàn)的FTP、SMTP、HTTP
8.報(bào)文段
? 報(bào)文段是指TCP/IP協(xié)議網(wǎng)絡(luò)傳輸過(guò)程中,起著路由導(dǎo)航作用。
? 可以查詢(xún)各個(gè)網(wǎng)絡(luò)路由網(wǎng)段、IP地址、交換協(xié)議等ip數(shù)據(jù)包。
? 報(bào)文段充當(dāng)整個(gè)TCP/IP協(xié)議數(shù)據(jù)包的導(dǎo)航路由功能。
? 報(bào)文在傳輸過(guò)程中會(huì)不斷的封裝成分組、包、幀來(lái)傳輸。
? 封裝的方式就是添加一些控制信息組成的首部,即報(bào)文頭。
9.傳輸協(xié)議
? ?一種約定,約束
? ?約定大于配置,在網(wǎng)絡(luò)傳輸中依然實(shí)用;網(wǎng)絡(luò)的傳輸是健壯的穩(wěn)定的,得益于基礎(chǔ)的協(xié)議構(gòu)成。計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)
網(wǎng)絡(luò)層次結(jié)構(gòu)模型 與 各層協(xié)議 的集合 個(gè)人理解:網(wǎng)絡(luò)的物理結(jié)構(gòu)+邏輯結(jié)構(gòu) & 使用約定
網(wǎng)絡(luò)協(xié)議:使用約定 若不按規(guī)定使用,容易導(dǎo)致混亂
語(yǔ)法:用戶(hù)數(shù)據(jù)與控制信息的結(jié)構(gòu)與形式 怎么說(shuō)
語(yǔ)義:控制信息、動(dòng)作、響應(yīng)的類(lèi)型 說(shuō)的是什么
時(shí)序:對(duì)事件實(shí)現(xiàn)順序的詳細(xì)說(shuō)明 什么時(shí)候說(shuō)
分層思想
連接過(guò)程過(guò)于復(fù)雜,按照不同的抽象層次,實(shí)現(xiàn)網(wǎng)絡(luò),高層使用低層服務(wù)時(shí),無(wú)需考慮具體實(shí)現(xiàn) 類(lèi)比編程時(shí)用現(xiàn)有的庫(kù)
兩種模型
OSI參考模型TCP/IP參考模型應(yīng)用層應(yīng)用層表示層應(yīng)用層對(duì)話(huà)層應(yīng)用層傳輸層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)層物理鏈路層物理鏈路層物理層物理層
TCP/IP網(wǎng)絡(luò)參考模型的5個(gè)層次
應(yīng)用層:網(wǎng)絡(luò)層應(yīng)用程序及其應(yīng)用層協(xié)議存留的地方 對(duì)等體:消息 最高抽象層,只能看到交互的雙方及交互協(xié)議 個(gè)人認(rèn)為可以看做人與人之間按照約定方式進(jìn)行交流
HTTP協(xié)議:超文本傳輸協(xié)議(用于實(shí)現(xiàn)Web文檔的請(qǐng)求和轉(zhuǎn)發(fā))
SMTP協(xié)議:簡(jiǎn)單電子郵件傳輸協(xié)議
FTP協(xié)議:文件傳輸協(xié)議
Telnet協(xié)議:網(wǎng)絡(luò)遠(yuǎn)程訪(fǎng)問(wèn)協(xié)議
傳輸層:提供客戶(hù)端和服務(wù)器之間傳輸應(yīng)用層報(bào)文的服務(wù) 對(duì)等體:段或用戶(hù)數(shù)據(jù)報(bào) 次高抽象層,為交互雙方提供信息傳輸服務(wù) 個(gè)人認(rèn)為可以看做為人與人之間交流提供途徑,如“寫(xiě)信”
TCP:面向連接的服務(wù) 管生又管養(yǎng)
UDP:無(wú)連接服務(wù) 管生不管養(yǎng)
網(wǎng)絡(luò)層:按照運(yùn)輸層協(xié)議,提供主機(jī)之間傳遞數(shù)據(jù)報(bào)的服務(wù) 對(duì)等體:數(shù)據(jù)包 個(gè)人認(rèn)為可以看做實(shí)現(xiàn)了信件在省份之間的收發(fā)服務(wù)
數(shù)據(jù)鏈路層 對(duì)等體:幀 個(gè)人認(rèn)為可以看做實(shí)現(xiàn)了信件在城市之間的收發(fā)服務(wù)
物理層 對(duì)等體:位 個(gè)人認(rèn)為可以看做實(shí)現(xiàn)了信件在具體郵局之間的收發(fā)服務(wù)
TCP/IP的一些基本概念
IP地址:連接到TCP/IP網(wǎng)絡(luò)上的每臺(tái)設(shè)備的唯一地址標(biāo)識(shí)
端口(Port):每臺(tái)設(shè)備中每個(gè)應(yīng)用程序的唯一標(biāo)識(shí)
套接字(Socket):通信端點(diǎn),由IP地址+端口號(hào)組成
傳輸控制協(xié)議(TCP)
面向連接的保證可靠傳輸?shù)膮f(xié)議
收發(fā)雙方的一對(duì)socket建立連接后進(jìn)行雙向數(shù)據(jù)傳輸、
用戶(hù)數(shù)據(jù)報(bào)協(xié)議(UDP)
無(wú)連接傳輸協(xié)議,無(wú)序,不一定安全,但簡(jiǎn)單效率高
將要傳輸目的地定義成數(shù)據(jù)報(bào)(Datagram) 在數(shù)據(jù)報(bào)中指明要到達(dá)的端點(diǎn)(Socket) 發(fā)送數(shù)據(jù)報(bào)
域名
服務(wù)器地址的別名
Java網(wǎng)絡(luò)編程
通過(guò)流模式實(shí)現(xiàn)網(wǎng)絡(luò)交互,一個(gè)接口同時(shí)擁有輸入流和輸出流 一個(gè)進(jìn)程向端口輸出流寫(xiě)數(shù)據(jù),另一個(gè)進(jìn)程在接口的輸入流上讀數(shù)據(jù)即可
Java提供的網(wǎng)絡(luò)編程類(lèi)
簡(jiǎn)記方法:
帶URL的為面向應(yīng)用層的類(lèi)
帶Socket的為面向運(yùn)輸層中TCP協(xié)議相關(guān)的類(lèi)
帶Datagram的為面向運(yùn)輸層中UDP協(xié)議相關(guān)的類(lèi)
帶Exception的為各種異常
領(lǐng)域類(lèi)名面向應(yīng)用層的類(lèi)URL URLConnection面向運(yùn)輸層中與TCP協(xié)議相關(guān)的類(lèi)Socket ServerSocket面向運(yùn)輸層中與UDP協(xié)議相關(guān)的類(lèi)DatagramPakcet DatagramSocket MulticastSocket指向網(wǎng)絡(luò)層的類(lèi)InetAddress可能產(chǎn)生的異常BindException ConnectException MalformedURLException NoRouteToHostException ProtocolException SocketException UnknownHostException UnknownServiceException?