網(wǎng)絡(luò)編程概述
計(jì)算機(jī)網(wǎng)絡(luò)
指將地理位置不同的具有獨(dú)立功能的多臺(tái)計(jì)算機(jī)及其外部設(shè)備,通過(guò)通信線路連接起來(lái),在網(wǎng)絡(luò)操作系統(tǒng),網(wǎng)絡(luò)管理軟件及網(wǎng)絡(luò)通信協(xié)議的管理和協(xié)調(diào)下,實(shí)現(xiàn)資源共享和信息傳遞的計(jì)算機(jī)系統(tǒng).
網(wǎng)絡(luò)編程
就是用來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)互連的不同計(jì)算機(jī)上運(yùn)行的程序間可以進(jìn)行數(shù)據(jù)交換.
網(wǎng)絡(luò)模型
OSI參考模型
開(kāi)放式通信系統(tǒng)互聯(lián)參考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model),是國(guó)際標(biāo)準(zhǔn)化組織(ISO)提出的一個(gè)試圖使各種計(jì)算機(jī)在世界范圍內(nèi)連為網(wǎng)絡(luò)的標(biāo)準(zhǔn)框架,簡(jiǎn)稱OSI.
網(wǎng)絡(luò)模型七層概述
TCP/IP參考模型
TCP/IP(又稱TCP/IP協(xié)議簇)是一組用于實(shí)現(xiàn)網(wǎng)絡(luò)互連的通信協(xié)議,其名稱來(lái)源該協(xié)議簇中兩個(gè)重要的協(xié)議(IP協(xié)議和TCP協(xié)議)
該模型的流層圖為上圖左邊是七層但這是在理論基礎(chǔ)上,在實(shí)際運(yùn)行中是右圖四層
兩種模型協(xié)議對(duì)照表
網(wǎng)絡(luò)通信要素
IP地址
* 網(wǎng)絡(luò)上主機(jī)設(shè)備的唯一標(biāo)識(shí).
* IP地址 = 網(wǎng)絡(luò)號(hào)碼+主機(jī)地址.
* host的標(biāo)識(shí)
-ipv4:32位地址,以點(diǎn)分十進(jìn)制表示 例如:192.168.0.1.
-ipv6:128位地址,以:分隔8個(gè)16進(jìn)制數(shù) 例如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
-本地回環(huán)地址
-127.0.0.1,主機(jī)名localhost.
-缺點(diǎn):
- 不容易記憶
- IP地址對(duì)應(yīng)一個(gè)名字,叫域名.
- 域名系統(tǒng)叫DNS,IP和域名之間映射的數(shù)據(jù)庫(kù)
- ip告罄
- ipv6解決這個(gè)問(wèn)題.
端口號(hào)(定位程序)
- 用于標(biāo)示進(jìn)程的邏輯地址,不用進(jìn)程的標(biāo)識(shí).
- 每個(gè)Host與網(wǎng)絡(luò)數(shù)據(jù)交流的出口.
- 用于標(biāo)記進(jìn)程的邏輯地址,不同進(jìn)程的標(biāo)識(shí).
- 有效端口:0~65535 系統(tǒng)保留端口:0~1024
傳輸協(xié)議(用什么樣的方法進(jìn)行交互)
- 通訊的規(guī)則.
- 網(wǎng)絡(luò)通訊的規(guī)則
- 尋址
- 建立連接
- 釋放連接
- 流量控制和緩沖區(qū)管理
- 多路復(fù)用
- 崩潰恢復(fù)
- 常見(jiàn)傳輸協(xié)議
- TCP
- UDP
- FTP
數(shù)據(jù)包
- 單個(gè)消息被劃分為多個(gè)數(shù)據(jù)塊,這些數(shù)據(jù)塊成為包,它包括發(fā)送者和接收者的地址信息.
常見(jiàn)網(wǎng)絡(luò)協(xié)議
TCP協(xié)議
- TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的.可靠的基于字節(jié)流的傳輸層通信協(xié)議.
TCP協(xié)議的流程: - 建立連接,形成數(shù)據(jù)傳輸?shù)耐ǖ?
- 在連接中進(jìn)行大數(shù)據(jù)傳輸
- 通過(guò)三次握手完成連接,是可靠協(xié)議,安全送達(dá).
- 必須建立連接,效率會(huì)稍低.
![圖片.png](http://upload-images.jianshu.io/upload_images/3722442-
ce8c6562bd908abf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
UDP協(xié)議
- UDP(User Datagram Protocol )一種無(wú)連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)
UDP協(xié)議的流程圖
- 將數(shù)據(jù)及源和目的封裝到數(shù)據(jù)包中
- 每個(gè)數(shù)據(jù)包的大小限制在64K內(nèi)
- 因無(wú)連接,是不可靠協(xié)議
- 不需要建立連接,速度快
TCP/UDP的區(qū)別
HTTP協(xié)議
- HTTP是基于TCP/IP協(xié)議的應(yīng)用層超文本傳輸協(xié)議,是同于從www服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議,由于其簡(jiǎn)捷 快速的方式,使用于分布式超媒體信息系統(tǒng).
HTTP協(xié)議流程圖 - 不涉及數(shù)據(jù)包哦(packet)傳輸,主要規(guī)定了客戶端和服務(wù)器之間的通信格式,默認(rèn)使用80端口.
- HTTP采用了請(qǐng)求/相應(yīng)模式.
- 請(qǐng)求有三部分組成:請(qǐng)求頭 請(qǐng)求行 請(qǐng)求體.
- 響應(yīng)三個(gè)部分組成: 響應(yīng)頭 響應(yīng)行 響應(yīng)體.
http://www.cnblogs.com/roverliang/p/5176456.html
http://www.cnblogs.com/ranyonsue/p/5984001.html
想要了解更多的關(guān)于HTTP協(xié)議的內(nèi)容看看上面的博客 個(gè)人覺(jué)得寫得挺好.
File協(xié)議: http://blog.csdn.net/woxueliuyun/article/details/4165610
Ras協(xié)議http://blog.csdn.net/laughing2333/article/details/52292481
cookie和sessionhttp://blog.csdn.net/u012385190/article/details/51957749
想要了解上述內(nèi)容可以看看這些博客.
Socket
概述
- Socket中文簡(jiǎn)稱"套接字",是一種雙向網(wǎng)絡(luò)通信方式,用于描述IP地址和端口,是一個(gè)通信鏈的句柄,可以用來(lái)實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信.
原理機(jī)制
- 通信的兩端都有Socket.
- 網(wǎng)絡(luò)通信其實(shí)就是Socket間的通信.
-
數(shù)據(jù)在兩個(gè)Socket間通過(guò)IO流傳輸.
下圖是java中Socket編程
服務(wù)端
package inter;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服務(wù)端
public class Server {
public static void main(String[] args)throws Exception {
//創(chuàng)建服務(wù)器ServerSocket
ServerSocket server = new ServerSocket(8080);
//接受到客戶端Socket
System.out.println("服務(wù)器等待接受中.....");
Socket socket = server.accept();
System.out.println("服務(wù)器接受到客戶端請(qǐng)求...");
//接受客戶端發(fā)送消息
InputStream in = socket.getInputStream();
byte[] by = new byte[1024];
int length = in.read(by);
String content = new String(by, 0,length);
System.out.println("客戶端發(fā)送內(nèi)容:"+content);
//給客戶端回復(fù)
OutputStream stream = socket.getOutputStream();
stream.write("沒(méi)吃呢".getBytes());
}
}
客戶端
package inter;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
import javax.xml.ws.handler.MessageContext.Scope;
//客戶端
public class Client {
public static void main(String[] args) throws Exception{
Socket socket = new Socket("localhost", 8080);
//獲取socket發(fā)送數(shù)據(jù)的流
OutputStream stream = socket.getOutputStream();
stream.write("你吃飯了嗎".getBytes());
//獲取服務(wù)器返回的數(shù)據(jù)
InputStream in = socket.getInputStream();
byte[] by = new byte[1024];
int length = in.read(by);
String content = new String(by, 0,length);
System.out.println("服務(wù)器返回內(nèi)容:"+content);
}
}
上面的代碼是最簡(jiǎn)單的Socket編程,要理解其中的原理.
在網(wǎng)絡(luò)通信中有很多理論,我們一定要搞明白他們之間的區(qū)別與聯(lián)系,作為計(jì)算機(jī)人士這些問(wèn)題都不懂就打臉了.