天天看點

C++socket網絡程式設計(跨平台)實戰HTTP伺服器(一)

        網絡程式設計

Socket是跨平台的在Window和Linux基本通用,無論是,java php都是需要網絡的,網絡程式設計是每個程式員都需要掌握的,他并不複雜。複雜的地方是對整個協定的了解,還有網絡通信的了解。

這個部落格是對整個網絡程式設計中最,學習的目的:

{能夠熟悉windows和linux下的開發流程,能夠開發出支援跨平台的多線程的網絡程式。了解socket程式設計原理,了解udp和tcp的協定,并能通過抓包工具分析協定,通過本課程的學習能夠開發出支援高并發的網絡服務端,通過開發支援php的http伺服器和syslog伺服器能夠将網絡程式設計投入實戰應用。掌握c++11的線程庫和正規表達式庫。}.

使用語音是:C/C++,因為他高性能,對高并發的處理很好.

最終可以帶大家實戰一個支援PHP腳本的http伺服器。

需要注意的是Socket庫不等同于TCP/UDP程式設計,因為他還可以開發其他

的一些協定。

交流群:140066160

進入正題:(先講理論,在實戰)

               1TCPIP協定分層講解

學習網絡程式設計,他說基于什麼協定之上的。不是會用幾個函數就可以了,那麼TCP/IP是基于什麼協定呢?

我們對網絡程式設計不能停留在僅僅會用Socket把兩個程式調通了,互相發送協定。你要明白整個協定的過程,為了實踐當中解決

問題,碰到網絡問題你知道是什麼原因。

<a href="https://s4.51cto.com/wyfs02/M01/9B/DB/wKiom1loKDST3w_GAAE-Dm7Nn80587.png-wh_500x0-wm_3-wmp_4-s_2674315875.png" target="_blank"></a>

看TCP/TP四層協定,我看到我們程式人員其實隻要用到

這四層,OSI模型中。

1.網絡媒體層

實體層和資料鍊路層對應的是“網絡媒體層”,

每一層都是為了解決一個問題,他是解決一個硬體裝置和另一個硬體裝置在實體上怎麼進行通信。通信得知道位址,是以“網絡媒體層”會最終封裝出一個“MAC”位址,就是硬體的位址,來進行通信.

2 IP層

這一層,上面已經實作了一個裝置到另一個裝置實體上的連接配接,但是,我們需要的是真正接收的這個資料呢, 這個時候就需要确定是由誰來接收。那我們通過IP層給每個裝置封裝一個IP位址。

然後由交換機來進行配置設定,在這層程式成員需要做的是:IP位址建立連接配接,目前IP位址都是基于IPV4是4個位元組的IP位址。這個網絡層隻需要知道IP對IP位址

    協定的目的是什麼?協定是怎麼實作的?

非常簡單,原理也非常簡單,我們就是在使用者發送的資料加一層頭,最後接收端在通過解包一層一層去掉。

為了深刻了解上面的圖,我們下載下傳一個抓包軟體來看看,Wireshark,可以百度直接就可以下載下傳,抓HTTP的協定看看

<a href="https://s4.51cto.com/wyfs02/M00/9B/DD/wKiom1loMerC7R5xAAJuYsmdR0Q902.png-wh_500x0-wm_3-wmp_4-s_3582940139.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M02/9B/DD/wKiom1loMimCYFUxAAAW9-2Xzv0413.png-wh_500x0-wm_3-wmp_4-s_4181041923.png" target="_blank"></a>

   随便抓到一個整包(Get的)

<a href="https://s3.51cto.com/wyfs02/M02/9B/DD/wKioL1loMoyClzdJAAHqh8N4IRg329.png-wh_500x0-wm_3-wmp_4-s_1324994832.png" target="_blank"></a>

先看下分析的内容

1  frame 最底層的幀資料,也就是說把TCP分層他會把資料

切包,切成一幀一幀的,

<a href="https://s3.51cto.com/wyfs02/M01/9B/DD/wKiom1loM2Ly6UvEAACGu3cijA4637.png-wh_500x0-wm_3-wmp_4-s_1776271660.png" target="_blank"></a>

2 Ethernet II 他對應的是鍊路層的MAC的位址,目标,源位址

<a href="https://s1.51cto.com/wyfs02/M00/9B/DD/wKioL1loM-Pz7mQDAAA9FpQyps4030.png-wh_500x0-wm_3-wmp_4-s_660317810.png" target="_blank"></a>

3 Internet Protocol,這個就是上面講的IP層,這裡有目标ID

來源IP等資訊,

<a href="https://s3.51cto.com/wyfs02/M01/9B/DD/wKioL1loNKyz4h1fAABQrTI_2FM626.png-wh_500x0-wm_3-wmp_4-s_2425449020.png" target="_blank"></a>

4 Transmission 傳輸層,端口号,原端口号,目标端口,

<a href="https://s2.51cto.com/wyfs02/M02/9B/DE/wKiom1loNSDjQziDAABbZZauXys958.png-wh_500x0-wm_3-wmp_4-s_3554231738.png" target="_blank"></a>

5 Hypertext Transfer Protocol應用層,圖檔中是

Http協定會發送一個Get請求過去

<a href="https://s1.51cto.com/wyfs02/M02/9B/DE/wKiom1loNXexCQqOAABI7D8MQg4324.png-wh_500x0-wm_3-wmp_4-s_3035416095.png" target="_blank"></a>

需要搞跨平台,需要用到Linux 。ubuntu 16.04 .先到這

 本文轉自超級極客51CTO部落格,原文連結:http://blog.51cto.com/12158490/1947450,如需轉載請自行聯系原作者