网络编程基础之C/S架构和TCP/IP协议
一、何謂C/S架構(gòu)
C指的是client(客戶端軟件),S指的是Server(服務(wù)端軟件),既然我們的的標(biāo)題是網(wǎng)絡(luò)編程基礎(chǔ),
那我們就一起來學(xué)習(xí)怎樣寫一個C/S架構(gòu)的軟件,實(shí)現(xiàn)服務(wù)端與客戶端軟件基于網(wǎng)絡(luò)的通信。
?
二、必備計算機(jī)基礎(chǔ)知識
1、眾所周知,我們開發(fā)的軟件都是應(yīng)用軟件,必須運(yùn)行在操作系統(tǒng)上,操作系統(tǒng)則運(yùn)行于硬件之上,
而應(yīng)用軟件是無法直接操作硬件的,而是調(diào)用操作系統(tǒng)的接口,由操作系統(tǒng)操縱硬件。
2、客戶端和服務(wù)端之間信息傳遞的流程
<1> 客戶端產(chǎn)生數(shù)據(jù),存放于客戶端軟件內(nèi)存中,然后調(diào)用操作系統(tǒng)的接口將數(shù)據(jù)發(fā)送給系統(tǒng)內(nèi)存;
<2> 客戶端操作系統(tǒng)收到數(shù)據(jù)后,按照客戶端軟件指定的規(guī)則(協(xié)議),調(diào)用網(wǎng)卡發(fā)送數(shù)據(jù);
<3> 通過網(wǎng)絡(luò)傳輸數(shù)據(jù);
<4> 服務(wù)端軟件調(diào)用系統(tǒng)接口,準(zhǔn)備從操作系統(tǒng)內(nèi)存中的數(shù)據(jù)拷到自己的內(nèi)存中;
<5> 服務(wù)端操作系統(tǒng)收到服務(wù)端軟件的指令后,使用與客戶端相同協(xié)議,從網(wǎng)卡接收數(shù)據(jù),然后
拷貝給服務(wù)端軟件。
如圖所示:
三、TCP/IP
1、TCP/IP協(xié)議的含義?
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ǔ)。
2、起源:
TCP/IP協(xié)議誕生于1974年,它有一個非常重要的特點(diǎn),就是開放性,即TCP/IP的規(guī)范和Internet的技術(shù)都是公開的。
目的就是使任何廠家生產(chǎn)的計算機(jī)都能相互通信,使Internet成為一個開放的系統(tǒng),這正是后來Internet得到飛速發(fā)展的重要原因。
3、TCP/IP的五層模型
用戶感知到的只是最上面一層應(yīng)用層,自上而下每層都依賴于下一層,每層都運(yùn)行特定的協(xié)議,越往上越靠近用戶,
越往下越靠近硬件。五層由底層到頂層依次是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。
<1>物理層
物理層功能:主要是基于電器特性發(fā)送高低電壓(電信號),高電壓對應(yīng)數(shù)字1,低電壓對應(yīng)數(shù)字0。通過光纜、電纜、
雙絞線和無線電波等將獨(dú)立的計算機(jī)連接起來。
<2>數(shù)據(jù)鏈路層
1、數(shù)據(jù)鏈路層的功能:定義了電信號的分組方式,因?yàn)閱渭兊碾娦盘?和1沒有任何意義,必須規(guī)定電信號多少為一組,
每組對應(yīng)什么意思,才能實(shí)現(xiàn)真正意義上的信息傳遞。
2、以太網(wǎng)協(xié)議(即 ethernet)
ethernet規(guī)定:一組電信號構(gòu)成一個數(shù)據(jù)包,叫做‘幀’;每一數(shù)據(jù)幀分成:報頭head和數(shù)據(jù)data兩部分。
head包含:18個字節(jié)。分配是發(fā)送者(源地址):6個字節(jié);接收者(目標(biāo)地址):6個字節(jié);數(shù)據(jù)類型:6個字節(jié)。
data包含:最短46個字節(jié),最長是1500個字節(jié)。存放的是數(shù)據(jù)包的具體內(nèi)容。
? 64字節(jié) <= head長度 + data長度 <=1518字節(jié) ,超過最大長度限制就分批發(fā)送。
mac地址:
head中包含的源地址和目標(biāo)地址由來:ethernet規(guī)定接入internet的設(shè)備都必須具備網(wǎng)卡,發(fā)送端和接收端
的地址便是指網(wǎng)卡的地址,即mac地址。
mac地址:每塊網(wǎng)卡出廠時都被燒制上一個世界唯一的mac地址,長度為48位2進(jìn)制,通常由12位16進(jìn)制數(shù)
表示(前六位是廠商編號,后六位是流水線號)。
廣播:有了mac地址,同一網(wǎng)絡(luò)內(nèi)的兩臺主機(jī)就可以通信了(一臺主機(jī)通過arp協(xié)議獲取另外一臺主機(jī)的mac地址)
ethernet采用最原始的方式,廣播的方式進(jìn)行通信。
<3> 網(wǎng)絡(luò)層
網(wǎng)絡(luò)層功能:引入一套新的地址用來區(qū)分不同的廣播域/子網(wǎng),避免信息傳送的混亂,這套地址即網(wǎng)絡(luò)地址。
IP協(xié)議:
1、規(guī)定網(wǎng)絡(luò)地址的協(xié)議叫ip協(xié)議,它定義的地址稱之為ip地址,廣泛采用的v4版本即ipv4,
它規(guī)定網(wǎng)絡(luò)地址由32位2進(jìn)制表示;
2、范圍0.0.0.0-255.255.255.255;
3、一個ip地址通常寫成四段十進(jìn)制數(shù),例:192.168.10.1。
子網(wǎng)掩碼: ?
含義:?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?所謂”子網(wǎng)掩碼”,就是表示子網(wǎng)絡(luò)特征的一個參數(shù)。它在形式上等同于IP地址,也是一個32位二進(jìn)制數(shù)字,它的網(wǎng)絡(luò)部分全部為1,主機(jī)部分全部為0。比如,IP地址192.168.10.1,如果已知網(wǎng)絡(luò)部分是前24位,主機(jī)部分是后8位,
那么子網(wǎng)絡(luò)掩碼就是11111111.11111111.11111111.00000000,寫成十進(jìn)制就是255.255.255.0。
作用:
子網(wǎng)掩碼是用來標(biāo)識一個IP地址的哪些位是代表網(wǎng)絡(luò)位,以及哪些位是代表主機(jī)位。子網(wǎng)掩碼不能單獨(dú)存在,它必須結(jié)合IP地址一起使用。子網(wǎng)掩碼只有一個作用,就是將某個IP地址劃分成網(wǎng)絡(luò)地址和主機(jī)地址兩部分。
? ? ? 區(qū)分網(wǎng)絡(luò)位和主機(jī)位是為了劃分子網(wǎng),就是把一個大網(wǎng)絡(luò)分成多個小網(wǎng)絡(luò)。
IP地址分類:
IP地址根據(jù)網(wǎng)絡(luò)ID的不同分為5種類型,A類地址、B類地址、C類地址、D類地址和E類地址。
注意:全零(“0.0.0.0”)地址對應(yīng)于當(dāng)前主機(jī)。全“1”的IP地址(“255.255.255.255”)是當(dāng)前子網(wǎng)的廣播地址;回環(huán)地址(127.0.0.1) 又稱為本機(jī)地址。
IP報文:
IP協(xié)議是TCP/IP協(xié)議的核心,所有的TCP,UDP,IMCP,IGCP的數(shù)據(jù)都以IP數(shù)據(jù)格式傳輸。
ARP協(xié)議:
我們已經(jīng)知道通信是基于mac的廣播方式實(shí)現(xiàn),計算機(jī)在發(fā)包時,獲取自身的mac是容易的,如何獲取目標(biāo)主機(jī)的mac,就需要通過arp協(xié)議。
ARP協(xié)議功能:廣播的方式發(fā)送數(shù)據(jù)包,獲取目標(biāo)主機(jī)的mac地址。
協(xié)議工作方式:每臺主機(jī)ip都是已知的。
協(xié)議工作流程:以主機(jī)192.168.1.10/24 訪問 192.168.1.11/24(/24代表這個二進(jìn)制掩碼的前24位是1,后8位是0 換算成10進(jìn)制數(shù)字就是255.255.255.0)
一、首先通過ip地址和子網(wǎng)掩碼區(qū)分自己所處的子網(wǎng)
二、分析192.168.1.10/24與192.168.1.11/24處于同一網(wǎng)絡(luò)(如果不是同一網(wǎng)絡(luò),那么目標(biāo)ip為192.168.1.11/24,通過arp獲取的是網(wǎng)關(guān)的mac)。
三、這個包會以廣播的方式在發(fā)送端所處的子網(wǎng)內(nèi)傳輸,所有主機(jī)接收后拆開包,發(fā)現(xiàn)目標(biāo)ip為自己的,就響應(yīng),返回自己的mac。
ICMP:IP協(xié)議并不是一個可靠的協(xié)議,它不保證數(shù)據(jù)被送達(dá),那么,自然的,保證數(shù)據(jù)送達(dá)的工作應(yīng)該由其他的模塊來完成。其中一個重要的模塊就是ICMP(網(wǎng)絡(luò)控制報文)協(xié)議。
當(dāng)傳送IP數(shù)據(jù)包發(fā)生錯誤--比如主機(jī)不可達(dá),路由不可達(dá)等等,ICMP協(xié)議將會把錯誤信息封包,然后傳送回給主機(jī)。給主機(jī)一個處理錯誤的機(jī)會.
?
所以我們一般主要用ICMP協(xié)議檢測網(wǎng)絡(luò)是否通暢,基于ICMP協(xié)議的工具主要有ping 和traceroute。
ping:利用ICMP協(xié)議包來偵測另一個主機(jī)是否可達(dá)。ping程序來計算間隔時間,并計算有多少個包被送達(dá)。用戶通過丟包率就可以判斷網(wǎng)絡(luò)大致的情況。
traceroute:用來查看從當(dāng)前主機(jī)到某地址一共經(jīng)過多少跳路由。
<4> 傳輸層
我們通過ip和mac找到了一臺特定的主機(jī),如何標(biāo)識這臺主機(jī)上的應(yīng)用程序呢?答案就是端口,端口即應(yīng)用程序與網(wǎng)卡關(guān)聯(lián)的編號。
傳輸層功能:建立端口到端口的通信。
注意:端口范圍0-65535,0-1023為系統(tǒng)占用端口
傳輸層協(xié)議包括兩種:TCP和UDP,如下圖所示:?
TCP協(xié)議:是一種可靠傳輸,TCP數(shù)據(jù)包沒有長度限制,理論上可以無限長,但是為了保證網(wǎng)絡(luò)的效率,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度,以確保單個TCP數(shù)據(jù)包不必再分割。
為何TCP協(xié)議可靠,因?yàn)橹灰獩]得到確認(rèn),就重新發(fā)送數(shù)據(jù)報,直到得到對方的確認(rèn)為止。
UDP協(xié)議:是不可靠的傳輸,“報頭”部分為8字節(jié),總長度不超過65535字節(jié),可以放進(jìn)一個IP數(shù)據(jù)包。
TCP協(xié)議和UDP協(xié)議的比較:
TCP協(xié)議雖然安全性高,但網(wǎng)絡(luò)開銷大,而UDP協(xié)議雖然不如TCP可靠,但網(wǎng)絡(luò)開銷小,在如今這個網(wǎng)絡(luò)安全已經(jīng)相對較高
的情況下,為保證傳輸效率,UDP協(xié)議還是一種不錯的選擇。
以上內(nèi)容摘錄整理自https://www.luffycity.com/python-book/di-6-zhang-wang-luo-bian-7a0b-socket-kai-fa/62.html
?
轉(zhuǎn)載于:https://www.cnblogs.com/schut/p/8661297.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的网络编程基础之C/S架构和TCP/IP协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.boost遍历数组容器
- 下一篇: tomcat8源码分析-Connecto