當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 網(wǎng)絡(luò)編程
一、網(wǎng)絡(luò)編程的實(shí)質(zhì)
應(yīng)用開發(fā)中大多都會(huì)涉及到網(wǎng)絡(luò)功能,網(wǎng)絡(luò)編程是Linux應(yīng)用開發(fā)中非常核心的技術(shù)之一。
網(wǎng)絡(luò)編程的目的是直接或間接地通過網(wǎng)絡(luò)協(xié)議與其他計(jì)算機(jī)進(jìn)行通訊。
作為應(yīng)用開發(fā)程序員,我們開發(fā)的軟件都是應(yīng)用軟件,而應(yīng)用軟件必須運(yùn)行于操作系統(tǒng)之上,操作系統(tǒng)則運(yùn)行于硬件之上,應(yīng)用軟件是無法直接操作硬件的,應(yīng)用軟件對(duì)硬件的操作必須調(diào)用操作系統(tǒng)的接口,由操作系統(tǒng)操控硬件。
網(wǎng)絡(luò)編程的實(shí)質(zhì):
1.通過操作相應(yīng) API 調(diào)度計(jì)算機(jī)硬件資源,并利用傳輸管道(網(wǎng)線)進(jìn)行數(shù)據(jù)交換的過程。
2.網(wǎng)絡(luò)編程編寫的是傳輸層面代碼,再往下就是操作系統(tǒng)提供的功能,我們?cè)趥鬏攲泳帉?TCP 或 UDP 代碼,會(huì)調(diào)用下層的接口,而這些接口是操作系統(tǒng)提供的。
二、什么是網(wǎng)絡(luò)
計(jì)算機(jī)之間的通信要有:
1.物理鏈接介質(zhì):網(wǎng)線,交換機(jī),路由器等網(wǎng)絡(luò)設(shè)備。
2.互聯(lián)網(wǎng)協(xié)議:客戶端按照協(xié)議規(guī)定的格式組織數(shù)據(jù)發(fā)送,服務(wù)端 按照相同的協(xié)議解析出來。
按照功能不同,人們將互聯(lián)網(wǎng)協(xié)議分為按照功能不同,人們將互聯(lián)網(wǎng)協(xié)議分為 OSI七層或TCP/IP五層或TCP/IP四層
TCP/IP協(xié)議:Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議、Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。
OSI七層協(xié)議:為了解決網(wǎng)絡(luò)通信中這樣不互通的問題,國際標(biāo)準(zhǔn)化組織ISO于1977年成立了一個(gè)委員會(huì),在現(xiàn)有網(wǎng)絡(luò)的基礎(chǔ)上,提出了不基于具體機(jī)型、操作系統(tǒng)或公司的網(wǎng)絡(luò)體系結(jié)構(gòu),稱為開放系統(tǒng)互聯(lián)模型。
三、socket
我們經(jīng)常把socket翻譯為套接字,socket是在應(yīng)用層和傳輸層之間的一個(gè)抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡單的接口供應(yīng)用層調(diào)用已實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。
四、網(wǎng)絡(luò)通信要素
網(wǎng)絡(luò)通信實(shí)現(xiàn)要素:協(xié)議、本地地址、本地端口、遠(yuǎn)程地址、遠(yuǎn)程端口。
1.socket之傳輸協(xié)議
TCP協(xié)議與UDP協(xié)議是負(fù)責(zé)數(shù)據(jù)封裝與打包的協(xié)議,它們都是傳輸層協(xié)議。
(1)tcp協(xié)議
TCP 是面向連接的通信協(xié)議;
通過 3 次握手建立連接,通訊完成時(shí)要拆除連接;
由于 TCP 是面向連接的,所以只能用于端到端的通訊,在和一端通訊的同時(shí),不能和其他端通訊;
(2)udp協(xié)議
UDP 是面向無連接的通訊協(xié)議;
UDP 數(shù)據(jù)包括目的端口號(hào)和源端口號(hào)信息;
由于通訊不需要連接,所以可以實(shí)現(xiàn)廣播發(fā)送,并不局限于端到端;
2.IP
在Internet上IP地址和主機(jī)名是一一對(duì)應(yīng)的,通過域名解析可以由主機(jī)名得到機(jī)器的IP,由于機(jī)器名更接近自然語言,容易記憶,所以使用比IP地址廣泛,但是對(duì)機(jī)器而言只有IP地址才是有效的標(biāo)識(shí)符。
3.端口號(hào)(portnumber):網(wǎng)絡(luò)通信時(shí)同一機(jī)器上的不同進(jìn)程的標(biāo)識(shí)。
如:80,21,23,25,其中1~1024為系統(tǒng)保留的端口號(hào)
五、網(wǎng)絡(luò)編程模型
目前較為流行的網(wǎng)絡(luò)編程模型是客戶機(jī)/服務(wù)器(C/S)結(jié)構(gòu),C指的是client(客戶端軟件),S指的是Server(服務(wù)器軟件)。
以使用TCP協(xié)議通訊的socket為例,其交互流程如下: