網絡編程介紹

1. 目標:編寫一個C/S架構的軟件
C/S: Client--------基于網絡----------Server
B/S: Browser-------基于網絡----------Server

2. 服務端需要遵循的原則:
1. 服務端與客戶端都需要有唯一的地址,但是服務端的地址必須固定/綁定
2. 對外一直提供服務,穩定運行
3. 服務端應該支持并發

3. 網路
網絡建立的目的是為數據交互(通信)
如何實現通信:
1. 建立好底層的物理連接介質
2. 有一套統一的通信標準,稱之為互聯網協議

4. 互聯網協議:就是計算機界的英語
OSI七層協議


ip+mac可以標識全世界范圍內獨一無二的一臺計算機的位置
port可以標識一臺計算機之上唯一的一個基于網絡通信的應用軟件

ip+mac+port:可以標識全世界范圍內獨一無二的一個應用軟件(基于網絡通信)


=========================================================================================
OSI七層協議:

物理層:

物理層由來:上面提到,孤立的計算機之間要想一起玩,就必須接入internet,言外之意就是計算機之間必須完成組網

物理層功能:主要是基于電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0


數據鏈路層:

數據鏈路層由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什么意思

數據鏈路層的功能:定義了電信號的分組方式

以太網協議:

早期的時候各個公司都有自己的分組方式,后來形成了統一的標準,即以太網協議ethernet

ethernet規定

  • 一組電信號構成一個數據包,叫做‘幀’
  • 每一數據幀分成:報頭head和數據data兩部分
? ? ? ?head? ? ? ? ? ? ? ? ? ? ? ?data ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

head包含:(固定18個字節)

  • 發送者/源地址,6個字節
  • 接收者/目標地址,6個字節
  • 數據類型,6個字節

data包含:(最短46字節,最長1500字節)

  • 數據包的具體內容

head長度+data長度=最短64字節,最長1518字節,超過最大限制就分片發送

mac地址:

head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具備網卡,發送端和接收端的地址便是指網卡的地址,即mac地址

mac地址:每塊網卡出廠時都被燒制上一個世界唯一的mac地址,長度為48位2進制,通常由12位16進制數表示(前六位是廠商編號,后六位是流水線號)

廣播:

有了mac地址,同一網絡內的兩臺主機就可以通信了(一臺主機通過arp協議獲取另外一臺主機的mac地址)

ethernet采用最原始的方式,廣播的方式進行通信,即計算機通信基本靠吼



網絡層:

網絡層由來:有了ethernet、mac地址、廣播的發送方式,世界上的計算機就可以彼此通信了,問題是世界范圍的互聯網是由

一個個彼此隔離的小的局域網組成的,那么如果所有的通信都采用以太網的廣播方式,那么一臺機器發送的包全世界都會收到,

這就不僅僅是效率低的問題了,這會是一種災難

上圖結論:必須找出一種方法來區分哪些計算機屬于同一廣播域,哪些不是,如果是就采用廣播的方式發送,如果不是,

就采用路由的方式(向不同廣播域/子網分發數據包),mac地址是無法區分的,它只跟廠商有關

網絡層功能:引入一套新的地址用來區分不同的廣播域/子網,這套地址即網絡地址

IP協議:

  • 規定網絡地址的協議叫ip協議,它定義的地址稱之為ip地址,廣泛采用的v4版本即ipv4,它規定網絡地址由32位2進制表示
  • 范圍0.0.0.0-255.255.255.255
  • 一個ip地址通常寫成四段十進制數,例:172.16.10.1

ip地址分成兩部分

  • 網絡部分:標識子網
  • 主機部分:標識主機

注意:單純的ip地址段只是標識了ip地址的種類,從網絡部分或主機部分都無法辨識一個ip所處的子網

例:172.16.10.1與172.16.10.2并不能確定二者處于同一子網

子網掩碼

所謂”子網掩碼”,就是表示子網絡特征的一個參數。它在形式上等同于IP地址,也是一個32位二進制數字,它的網絡部分全部為1,主機部分全部為0。比如,IP地址172.16.10.1,如果已知網絡部分是前24位,主機部分是后8位,那么子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。

?

知道”子網掩碼”,我們就能判斷,任意兩個IP地址是否處在同一個子網絡。方法是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都為1,運算結果為1,否則為0),然后比較結果是否相同,如果是的話,就表明它們在同一個子網絡中,否則就不是。

?

比如,已知IP地址172.16.10.1和172.16.10.2的子網掩碼都是255.255.255.0,請問它們是否在同一個子網絡?兩者與子網掩碼分別進行AND運算,

172.16.10.1:10101100.00010000.00001010.000000001

255255.255.255.0:11111111.11111111.11111111.00000000

AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0

?

172.16.10.2:10101100.00010000.00001010.000000010

255255.255.255.0:11111111.11111111.11111111.00000000

AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0

結果都是172.16.10.0,因此它們在同一個子網絡。

總結一下,IP協議的作用主要有兩個,一個是為每一臺計算機分配IP地址,另一個是確定哪些地址在同一個子網絡。

ip數據包

ip數據包也分為head和data部分,無須為ip包定義單獨的欄位,直接放入以太網包的data部分

?

head:長度為20到60字節

data:最長為65,515字節。

而以太網數據包的”數據”部分,最長只有1500字節。因此,如果IP數據包超過了1500字節,它就需要分割成幾個以太網數據包,分開發送了。

?

以太網頭 ??? ? ? ? ? ? ip 頭?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ip數據 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

?

?ARP協議

arp協議由來:計算機通信基本靠吼,即廣播的方式,所有上層的包到最后都要封裝上以太網頭,然后通過以太網協議發送,在談及以太網協議時候,我門了解到

通信是基于mac的廣播方式實現,計算機在發包時,獲取自身的mac是容易的,如何獲取目標主機的mac,就需要通過arp協議

arp協議功能:廣播的方式發送數據包,獲取目標主機的mac地址

?

協議工作方式:每臺主機ip都是已知的

例如:主機172.16.10.10/24訪問172.16.10.11/24

一:首先通過ip地址和子網掩碼區分出自己所處的子網

場景數據包地址
同一子網目標主機mac,目標主機ip
不同子網網關mac,目標主機ip

?

?

?

二:分析172.16.10.10/24與172.16.10.11/24處于同一網絡(如果不是同一網絡,那么下表中目標ip為172.16.10.1,通過arp獲取的是網關的mac)

?源mac目標mac源ip目標ip數據部分
發送端主機發送端macFF:FF:FF:FF:FF:FF172.16.10.10/24172.16.10.11/24數據

?

?

三:這個包會以廣播的方式在發送端所處的自網內傳輸,所有主機接收后拆開包,發現目標ip為自己的,就響應,返回自己的mac



傳輸層:

傳輸層的由來:網絡層的ip幫我們區分子網,以太網層的mac幫我們找到主機,然后大家使用的都是應用程序,你的電腦上可能同時開啟qq,暴風影音,等多個應用程序,

那么我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程序,答案就是端口,端口即應用程序與網卡關聯的編號。

傳輸層功能:建立端口到端口的通信

補充:端口范圍0-65535,0-1023為系統占用端口

tcp協議:

可靠傳輸,TCP數據包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不必再分割。

以太網頭ip 頭 ? ? ? ? ? ? ?tcp頭 ? ? ? ? ? ? ?數據 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

udp協議:

不可靠傳輸,”報頭”部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。

以太網頭ip頭 ? ? ? ? ? ? ? ??? ? udp頭 ? ? ? ? ? ? ? ? ? ? ? ? ??數據 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

tcp報文

tcp三次握手和四次揮手



應用層:

應用層由來:用戶使用的都是應用程序,均工作于應用層,互聯網是開發的,大家都可以開發自己的應用程序,數據多種多樣,必須規定好數據的組織形式?

應用層功能:規定應用程序的數據格式。

例:TCP協議可以為各種各樣的程序傳遞數據,比如Email、WWW、FTP等等。那么,必須有不同協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了”應用層”。

?



socket模塊

我們知道兩個進程如果需要進行通訊最基本的一個前提能能夠唯一的標示一個進程,在本地進程通訊中我們可以使用PID來唯一標示一個進程,但PID只在本地唯一,網絡中的兩個進程PID沖突幾率很大,這時候我們需要另辟它徑了,我們知道IP層的ip地址可以唯一標示主機,而TCP層協議和端口號可以唯一標示主機的一個進程,這樣我們可以利用ip地址+協議+端口號唯一標示網絡中的一個進程。

能夠唯一標示網絡中的進程后,它們就可以利用socket進行通信了,什么是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。

socket起源于UNIX,在Unix一切皆文件哲學的思想下,socket是一種"打開—讀/寫—關閉"模式的實現,服務器和客戶端各自維護一個"文件",在建立連接打開后,可以向自己文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。







轉載于:https://www.cnblogs.com/zhangpang/p/9580459.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279484.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279484.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279484.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Web開發] MySpace 發布開發接口

2007年風頭最盛的Web 2.0公司應該就是Facebook ,其一炮走紅的絕招就是它的開發平臺。 開發者可以為Facebook 加入各種插件,豐富Facebook 。為了對抗 Facebook , 社交網站的老大Myspace 也推出了自己開發平臺 http://developer.myspace.com/c…

css段落縮進_如何縮進Google文檔中的段落

css段落縮進Indenting paragraphs in Google Docs requires access to the ruler, which you’ll only find in the full web version. The ruler is not present in the mobile apps. 在Google文檔中縮進段落需要訪問標尺,而標尺只能在完整的網絡版本中找到。 標尺…

卡包模板

$json_data array(); $json_data[request_id] date(YmdHis).mt_rand(10000,99999); $json_data[card_type] OUT_MEMBER_CARD; $json_data[biz_no_prefix] prex; $json_data[biz_no_suffix_len] 10; $json_data[write_off_type] qrcode; #qrcode: 二維碼 dqrcode: 動態二維…

暑假個人小結

今天。。。不,是昨天,聶老大讓我們寫暑期總結 其中有這么一個 (300字啊。。。我得好好想想怎么編) 嘛,在這寫點不敢交上去的內容吧。 7月總結 我收獲了什么 很多課件 兩個qq群 slay.one被人虐 聯盟無畏先鋒的號到了20級…

php-fpm with php-5.3.2 + APC

php-fpm 現在php官方內部已經出版本了,據說以后會出現在 php core 里,如果現在安裝的話,可以svn得到最新代碼,我搶先為快。 至于緩存,我用的facebook 試用的apc 測試了一段時間還很,滿意。wget ftp://ftp.csx.cam.ac.u…

kotlin 初始化數組

為什么80%的碼農都做不了架構師&#xff1f;>>> //初始化5個元素的數組&#xff0c;每個都為"0" val a:Array<String> Array(5, {"0"}) // val a:Array<String> Array(5, {"0"}) println(a.joinToString(separator &…

Tomcat - Tomcat安裝

Tomcat官網&#xff1a;http://tomcat.apache.org/ 準備&#xff1a;JAVA環境布置完成 一、Windows平臺 1. 版本選擇 1&#xff09; 進入官網 2&#xff09; 查看版本匹配 官網說明 https://tomcat.apache.org/whichversion.html 3&#xff09; 需要查看已安裝JAVA版本請打開終…

sonos 服務器_如何在Sonos上收聽有聲讀物

sonos 服務器Audible, Amazon’s subscription audiobook service, was conspicuously absent from Sonos for the last few years. Thankfully, it’s now back. Here’s how to use it. 過去幾年&#xff0c;Sonos明顯缺少Amazon的訂閱有聲讀物服務Audible。 幸運的是&#x…

常用sed四個功能

1. 替換 文件&#xff1a;test.txt abc aaa 命令&#xff1a;sed /.*/a/d/g test.txt&#xff08;將文件中所有的a替換成d&#xff09; 結果&#xff1a; dbc ddd 2. 刪除 文件&#xff1a;test.txt abc aaa 命令&#xff1a;sed /a$/d test.txt&#xff08;將文件中所有以a結尾…

bind 0.0.0.0的作用是什么呢?

背景描述&#xff1a; 今天在看redis的內容&#xff0c;看到同事在配置文件中將bind配置為0.0.0.0進行監聽&#xff0c;不明白什么意思就查詢了下&#xff0c;在此記錄下。 解釋&#xff1a; 0.0.0.0在服務器的環境中&#xff0c;指的就是服務器上所有的ipv4地址&#xff0c;如…

約數的個數

Description mmoaay小侄子今年上初中&#xff0c;老師出了一道求約數個數的題目&#xff0c;比如8的約數有1,2,4,8共4個。 當數比較小的時候可以人工算&#xff0c;當n較大時就難了。 mmoaay嫌麻煩&#xff0c;現在讓你編個程序來算。 Input 一行一個整數。最后以0結束。 Outpu…

SQL Server Management Studio清除歷史登陸記錄

今天做滲透,登陸目標服務器的數據庫管理后發現留下了登陸的記錄,自己鼓搗了半天,終于解決 刪除C:\Documents and Settings\guest\Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell下的 mru.dat文件就可以了 本文轉sinojelly51CTO博客&#xff0c;原文鏈接&…

停止抱怨英語_停止抱怨垂直視頻

停止抱怨英語People have strong feelings about which direction video should be oriented. There are good reasons for that, but in some contexts, vertical video is completely fine and you should stop complaining about it. 人們對視頻應該定向哪個方向有著強烈的感…

Google Play/App Store/Facebook多賬號關聯問題,你會判斷嗎?

對于海外游戲開發、海外發行公司&#xff0c;尤其是有多個APP產品的公司來說&#xff0c;多賬號關聯問題是他們必然會遇到的。與亞馬遜等電商平臺直接禁止申請多家店鋪的做法不同&#xff0c;Google Play/App Store/Facebook等平臺申請多賬號的風險相對后置&#xff0c;平臺會從…

MySQL數據庫服務器優化詳細

查看MySql狀態及變量的方法&#xff1a; Mysql> show status ——顯示狀態信息&#xff08;擴展show status like XXX&#xff09; Mysql> show variables ——顯示系統變量&#xff08;擴展show variables like XXX&#xff09; Mysql> show innodb status ——顯示I…

facebook_如何清除您的Facebook搜索記錄

facebookSearch histories can tell a lot about you, and that’s especially true of Facebook’s search history. If you don’t want that sort of data left sitting around, here’s how to clear it. 搜索歷史可以告訴您很多信息&#xff0c;Facebook的搜索歷史尤其如此…

UI交互設計教程分享:提高界面交互體驗的“葵花寶典”

?本次分享的是在界面設計中最長實用也最容易被忽略的十個原則&#xff0c;就是尼爾森十大可用性設計原則&#xff0c;這是十分基礎且重要的原則。原則是死的&#xff0c;如何正確的結合到實際運用中才是關鍵。接下來我會通過對每一個原則的理解和現在移動端產品和結合進行分析…

window專業版激活

1、管理員權限進入命令行 2、安裝密鑰 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 3、設置kms服務器 slmgr /skms zh.us.to 4、查看是否激活 slmgr /ato 轉載于:https://www.cnblogs.com/Edward-Yue/p/10942884.html

csv文件用什么打開_什么是CSV文件,如何打開它?

csv文件用什么打開A Comma Separated Values (CSV) file is a plain text file that contains a list of data. These files are often used for exchanging data between different applications. For example, databases and contact managers often support CSV files. 逗號…

Python連續攀升,其他的腳本語言去哪了?

Python在TIOBE排行榜排名連續攀升&#xff0c;它的優勢掩蓋了一個嚴肅的問題&#xff1a;其他的腳本語言去哪兒了?據2017年11月的TIOBE指數顯示&#xff0c;其他語言(如Perl&#xff0c;PHP和Ruby)排名正在緩慢下滑。 不久之前&#xff0c;腳本語言風靡一時。動態類型語言不僅…