乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      linux下的C語言開發(fā)(網(wǎng)絡(luò)編程)

       思考的軌跡 2012-04-03

      linux下的C語言開發(fā)(網(wǎng)絡(luò)編程)

      【 聲明:版權(quán)所有,歡迎轉(zhuǎn)載,請(qǐng)勿用于商業(yè)用途。  聯(lián)系信箱:feixiaoxing @163.com】


          不管在Windows平臺(tái)下面還是在Linux平臺(tái)下面,網(wǎng)絡(luò)編程都是少不了的。在互聯(lián)網(wǎng)發(fā)達(dá)的今天,我們的生活基本上已經(jīng)離不開網(wǎng)絡(luò)了。我們可以用網(wǎng)絡(luò)干很多的事情,比如說IM聊天、FTP下載、電子銀行、網(wǎng)絡(luò)購物、在線游戲、電子郵件的收發(fā)等等。所以說,對(duì)于一個(gè)軟件的開發(fā)者來說,如果說他不會(huì)進(jìn)行網(wǎng)絡(luò)程序的開發(fā),那真是難以想象的。


          在開始介紹網(wǎng)絡(luò)編程的方法之前,我們可以回憶一下計(jì)算機(jī)網(wǎng)絡(luò)的相關(guān)知識(shí)。目前為止,我們使用的最多網(wǎng)絡(luò)協(xié)議還是tcp/ip網(wǎng)絡(luò)。通常來說,我們習(xí)慣上稱為tcp/ip協(xié)議棧。至于協(xié)議棧分成幾層,有兩種說法。一種是五層,一種是七層,我個(gè)人本身也比較傾向于五層的劃分方法。大家可以通過下面的圖看看協(xié)議棧是怎么劃分的。


          5、應(yīng)用層
          4、傳輸層
          3、網(wǎng)絡(luò)層
          2、數(shù)據(jù)鏈路層
          1、物理層


          網(wǎng)絡(luò)的不同層次實(shí)現(xiàn)網(wǎng)絡(luò)的不同功能。物理層主要實(shí)現(xiàn)報(bào)文的成幀處理;數(shù)據(jù)鏈路層完成對(duì)報(bào)文的優(yōu)先級(jí)的管理,同時(shí)實(shí)現(xiàn)二層轉(zhuǎn)發(fā)和流量控制;網(wǎng)絡(luò)層實(shí)現(xiàn)路由和轉(zhuǎn)發(fā)的功能,一方面它需要實(shí)現(xiàn)對(duì)報(bào)文的fragment處理,另外一方面它還需要對(duì)路由信息進(jìn)行處理和保存;傳輸層實(shí)現(xiàn)報(bào)文的發(fā)送和接受,它利用計(jì)數(shù)、時(shí)序、定時(shí)器、重發(fā)等機(jī)制實(shí)現(xiàn)對(duì)報(bào)文的準(zhǔn)確發(fā)送,當(dāng)然這都是tcp的發(fā)送機(jī)制,而udp一般是不保證報(bào)文正確發(fā)送和接收的;應(yīng)用層就是根據(jù)傳輸層的端口信息調(diào)用不同的程序來處理傳輸?shù)膬?nèi)容,端口8080是http報(bào)文,端口21是ftp報(bào)文等等。上面的邏輯稍顯復(fù)雜,朋友們可以這么理解,

          物理層關(guān)心的是如何把電氣信號(hào)變成一段報(bào)文;數(shù)據(jù)鏈路層關(guān)心的是mac地址、vlan、優(yōu)先級(jí)等;網(wǎng)絡(luò)層關(guān)心的是ip地址,下一跳ip;傳輸層關(guān)心的是端口資源;應(yīng)用層關(guān)心的是報(bào)文組裝、解析、渲染、解析、存儲(chǔ)、執(zhí)行等等。

          目前關(guān)于tcp/ip完整協(xié)議棧的代碼很多,其中我認(rèn)為寫得比較好的還是linux內(nèi)核/net/ipv4下面的代碼。如果朋友們對(duì)ipv6的代碼感興趣,也可以看看/net/ipv6的代碼。檔案如果朋友們對(duì)整個(gè)協(xié)議棧的代碼結(jié)構(gòu)理解得不是很清楚,可以參考《linux網(wǎng)絡(luò)分析與開發(fā)》這本書。

          當(dāng)然,作為應(yīng)用層,我們的其實(shí)考慮的不用這么復(fù)雜。對(duì)于網(wǎng)絡(luò)程序編寫人員來講,所有網(wǎng)絡(luò)的資源只要和一個(gè)socket關(guān)聯(lián)在一起就可以了。當(dāng)然在socket可用之前,我們需要為它配置端口信息和ip地址。配置完了之后,我們就可以慢慢等待報(bào)文的收發(fā)了。所以一般來說,作為服務(wù)器端口的處理流程是這樣的,

          a) 創(chuàng)建socket
          b) 綁定socket到特定的ip地址
          c) 對(duì)socket進(jìn)行偵聽處理
          d) 接受socket,表明有客戶端和服務(wù)器連接
          e) 和客戶端循環(huán)收發(fā)報(bào)文
          f) 關(guān)閉socket


          作為服務(wù)器程序而言,它要對(duì)特定的端口進(jìn)行綁定和偵聽處理,這樣稍顯復(fù)雜。但是如果是編寫客戶端的程序,一切的一切就變得非常簡(jiǎn)單了,

          a) 創(chuàng)建socket
          b) 鏈接服務(wù)器端地址
          c) 和服務(wù)器端的socket收發(fā)報(bào)文


          上面只是對(duì)網(wǎng)絡(luò)編程做了一個(gè)基本的介紹,但是好多的東西還是沒有涉及到,比如說:(1) 什么時(shí)候該使用udp,什么時(shí)候該使用tcp?(2) 如何把多線程和網(wǎng)絡(luò)編程聯(lián)系在一起? (3) 如何把多進(jìn)程和網(wǎng)絡(luò)編程聯(lián)系在一起? (4) 如何利用select函數(shù)、epoll_create機(jī)制、非阻塞函數(shù)提高socket的并發(fā)處理效率? (5) linux內(nèi)核是怎么實(shí)現(xiàn)tcp/ip協(xié)議的? (6) 我們自己是否也可以實(shí)現(xiàn)協(xié)議的處理流程等等?

          關(guān)于這些內(nèi)容,我們會(huì)重新開辟一個(gè)主題,逐步進(jìn)行分析和仿真處理。敬請(qǐng)期待。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多