網絡編程
socket是跨平台的在windows和Linux基本通用,無論是java php 都是需要網絡的,網絡編程是每個程序員都需要掌握的,它並不復雜。復雜的地方是對整個協議的理解,還有網絡通信的理解。
這個博客是整個網絡編程之最,學習的目的:
{ 能夠熟悉Windows和Linux下開發流程,能夠開發出跨平台的多線程的網絡程序。理解socket變成原理,理解udp和tcp的協議,並能通過抓包工具分析協議,通過本課程的學習能夠開發出支持高並發的網絡服務端,通過開發支持php的http服務器和sysllog服務器能夠將網絡編程投入實戰應用。掌握C++11的線程庫和正則表達式庫。}
使用語言是:C/C++,因為他高性能,對高並發的處理很好。
最終可以帶大家實戰一個支持php腳本的http服務器。
需要注意的是socket庫不等同於TCP/UDP編程,因為它還可以開發其他的一些協議。
交流群:140066160
進入正題:(先講理論,再實戰)
1、TCPIP協議的分層講解
學習網絡編程,他說基於什么協議之上的。不是會用幾個函數就可以了,那么TCP/IP是基於什么協議呢?
我們對網絡編程不能停留在僅僅會用socket把兩個程序調通了,互相發送協議。你要明白整個協議的過程,為了實踐昂中解決問題,碰到網絡問題你知道是什么原因。
看TCIP/IP四層協議,我看到我們程序人員其實只要用到這四層,OSI模型中。
1、網絡介質層
物理層和數據鏈路層對應的是“網絡介質層”,每一層都是為了解決一個問題,他是解決一個硬件設備的和另一個硬件設備在物理上怎么進行通信。通信得知道地址,所以“網絡介質層”會最終封裝出一個“MAC”地址,就是硬件的地址,來進行通信。
2、IP層
這一層,上面已經實現了一個設備到另一個設備物理上的連接,但是,我們需要的是真正接收的這個數據呢,這個時候就需要確定是由誰來接收。那我們通過IP層給每個設備封裝一個IP地址。
然后由交換機來進行分配,在這層程序成員需要做的是:IP地址建立連接,目前IP地址都是基於IPV4是4個字節的IP地址。這個網絡層只需要知道IP對IP地址
協議的目的是什么?協議是怎么實現的?
非常簡單,原理也非常簡單,我們就是在用戶發送的數據加一層頭,最后接收端在通過解包一層一層去掉。
為了深刻理解上面的圖,我們下載一個抓包軟件來看看,wireshark,可以百度直接就可以下載,抓HTTP的下一看看。