網絡編程;C/S架構,TCP/IP介紹
什麽是c/s架構?
C指的是client(客戶端軟件),S指的是Server(服務端軟件)
應用軟件如何運行?
客戶端軟件想要基於網絡發送一條消息給服務端軟件,流程是:
1、客戶端軟件產生數據,存放於客戶端軟件的內存中,然後調用接口將自己內存中的數據發送/拷貝給操作系統內存
2、客戶端操作系統收到數據後,按照客戶端軟件指定的規則(即協議)、調用網卡發送數據
3、網絡傳輸數據
4、服務端軟件調用系統接口,想要將數據從操作系統內存拷貝到自己的內存中
5、服務端操作系統收到4的指令後,使用與客戶端相同的規則(即協議)從網卡接收到數據,然後拷貝給服務端軟件
什麽是TCP/IP?
Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協議/因特網互聯協議,又名網絡通訊協議,是Internet最基本的協議、Internet國際互聯網絡的基礎
OSI七層模型:
OSI/RM模型(Open System Interconnection / Reference Model)的設計目的是成為一個所有計算機廠商都能實現的開放網絡模型,來克服使用眾多私有網絡模型所帶來的困難和低效性。
物理層功能:主要是基於電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0
數據鏈路層由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什麽意思
數據鏈路層的功能:定義了電信號的分組方式
以太網協議:
早期的時候各個公司都有自己的分組方式,後來形成了統一的標準,即以太網協議ethernet
ethernet規定
- 一組電信號構成一個數據包,叫做‘幀’
- 每一數據幀分成:報頭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進制數表示(前六位是廠商編號,後六位是流水線號)
網絡層:
網絡層由來:有了ethernet、mac地址、廣播的發送方式,世界上的計算機就可以彼此通信了,問題是世界範圍的互聯網是由
一個個彼此隔離的小的局域網組成的,那麽如果所有的通信都采用以太網的廣播方式,那麽一臺機器發送的包全世界都會收到,
這就不僅僅是效率低的問題了,這會是一種災難
必須找出一種方法來區分哪些計算機屬於同一廣播域,哪些不是,如果是就采用廣播的方式發送,如果不是,
就采用路由的方式(向不同廣播域/子網分發數據包),mac地址是無法區分的,它只跟廠商有關
網絡層功能:引入一套新的地址用來區分不同的廣播域/子網,這套地址即網絡地址
必須找出一種方法來區分哪些計算機屬於同一廣播域,哪些不是,如果是就采用廣播的方式發送,如果不是,
就采用路由的方式(向不同廣播域/子網分發數據包),mac地址是無法區分的,它只跟廠商有關
網絡層功能:引入一套新的地址用來區分不同的廣播域/子網,這套地址即網絡地址
區分網絡位和主機位是為了劃分子網,就是把一個大網絡分成多個小網絡,為什麽要分子網呢?
- 廣播風暴:6萬臺主機在一個網段裏,通信基本靠吼,任何一個人要吼一嗓子,6萬多個人必須被動聽著,一會你的網絡就癱瘓啦。
- 地址浪費:運營商在公網上有很多級聯的路由器,有時候2個路由器之間只會用掉幾個IP,如果不進行子網劃分,那同網段的其它主機也就都不能用了。舉例兩個級聯路由器的接口ip分別為222.34.24.12/24,222.34.24.13/24, 此可承載255個主機的網段只用了2個IP,那其它的就全浪費了,因為不能再分配給別人。
劃分子網本質上就是借主機位到給網絡位,每借一位主機位,這個網段的可分配主機就會越少,比如192.168.1.0/24可用主機255個,借一位變成192.168.1.0/25,那可用主機就從255-128=127個了(從最大的值開始借),再借一位192.168.1.0/26,那可用主機數就變成了255-(128+64)=63個啦
TTL是 Time To Live的縮寫,該字段指定IP包被路由器丟棄之前允許通過的最大網段數量。TTL是IPv4包頭的一個8 bit字段。
查看本機arp表的命令
ICMP
一般主要用ICMP協議檢測網絡是否通暢,基於ICMP協議的工具主要有ping和traceroute(win系統是tracert)
ping 利用ICMP協議包來偵測另一個主機是否可達。原理是用類型碼為0的ICMP發請 求,受到請求的主機則用類型碼為8的ICMP回應。ping程序來計算間隔時間,並計算有多少個包被送達。用戶就可以判斷網絡大致的情況。我們可以看到, ping給出來了傳送的時間和TTL的數據。
traceroute(win系統用tracert)
用來查看從當前主機到某地址一共經過多少跳路由
傳輸層
傳輸層的由來:網絡層的ip幫我們區分子網,以太網層的mac幫我們找到主機,然後大家使用的都是應用程序,你的電腦上可能同時開啟qq,暴風影音,迅雷等多個應用程序,
那麽我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程序呢?答案就是端口,端口即應用程序與網卡關聯的編號。
傳輸層功能:建立端口到端口的通信
補充:端口範圍0-65535,0-1023為系統占用端口
傳輸層有兩種協議,TCP和UDP,見下圖:
tcp協議
可靠傳輸,TCP數據包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不必再分割。
最可靠的方式就是只要不得到確認,就重新發送數據報,直到得到對方的確認為止。為什麽tcp是可靠的數據傳輸呢?
tcp報文
tcp的3次握手和4四揮手
udp協議
不可靠傳輸,”報頭”部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。
TCP協議雖然安全性很高,但是網絡開銷大,而UDP協議雖然沒有提供安全機制,但是網絡開銷小,在現在這個網絡安全已經相對較高的情況下,為了保證傳輸的速率,我們一般還是會優先考慮UDP協議!
網絡編程;C/S架構,TCP/IP介紹