成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#網絡編程系列一:網絡協議簡介

開發 后端
很多人寫網絡編程這快都沒有怎么講網絡中的協議,然而我覺得既然是網絡編程肯定要介紹下網絡編程中一些協議的,這樣可以讓更好的梳理網絡編程的知識的,所以我在這系列中會用兩個專題去講協議

 

因為這段時間都在研究C#網絡編程的一些知識, 所以在這里把我學習到的在這里和大家分享下的,這樣既可以達到分享的目的也可以讓大家監督我,如果有什么地方理解錯了,還請大家不吝賜教的。

很多人寫網絡編程這快都沒有怎么講網絡中的協議,然而我覺得既然是網絡編程肯定要介紹下網絡編程中一些協議的,這樣可以讓更好的梳理網絡編程的知識的,所以我在這系列中會用兩個專題去講協議,***個專題簡單介紹網絡分層以及各層之間如何通信的只是,第二專題將會介紹下應用層協議——Http協議,了解這個不僅對網絡編程有個理論基礎,也可以幫助更好地理解Web(Asp.net)的開發。

一、網絡分層

網絡上的計算機之所以可以互相通信,是因為它們之間都遵守互相都可以“認識”的互聯網協議(就如同人交流一樣,兩個人能夠交流,互相必須知道對象的語言),互聯網上的計算機互相通信又歸根于網絡中層與層之間的通信,OSI模型把網絡通信分成七層:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層,對于開發網絡應用人員來說,一般把網絡分成五層,這樣比較容易理解。這五層為:物理層、數據鏈路層、網絡層、傳輸層和應用層(最頂層),下面是一張網絡分層的圖片(來源于網絡)

二、各層的協議

網絡中的計算機互相通信就是實現了層與層之間的通信,要實現層與層之間的通信,則各層都要遵守規則,這樣才能完成更好的通信, 我們就把它們之間遵守的規則就叫個“協議”,然而網絡上的五層之間遵守的協議不一樣,每層都有各自的協議。下面就由下至上的講述每層的協議

2.1 物理層協議

物理層是五層模型中的***層,物理層為計算機之間的數據通信提供了傳輸媒體和互連設備,為數據傳輸提供了可靠的環境,媒體包括電纜、光纖、無線信道等,互連設備指是計算機和調制解調器之間的互連設備,如各種插頭、插座等。該層的作用是透明的傳輸比特流(即二進制流),為數據鏈路層提供一個傳輸原始比特流的物理連接

2.2 數據鏈路層

數據鏈路層是模型中的第2層,該層對接受到物理層傳輸過來的比特流進行分組,一組電信號構成的數據包,就叫做"幀",數據鏈鏈路層就是來傳輸以"幀"為單位的數據包,把數據傳遞給上一層(網絡層),幀數據由兩部分組成:幀頭和幀數據,幀頭包括接受方物理地址(就是網卡的地址)和其他的網絡信息,幀數據就是要傳輸的數據體。數據幀的最長為1500字節,如果數據很長,就必須分割成多個幀進行發送。

2.3 網絡層

該層通過尋址(尋址地址)來建立兩個節點之間的連接,大家都知道我們的電腦連接上網絡后都一個IP地址,我們可以通過IP地址來確定不同的計算機是否在同一個子網路。如果我們的電腦連接上網絡后就有兩種地址:物理地址和網絡地址(IP地址),網絡上的計算機要通信,必須要知道通信的計算機“在哪里”, 首先通過網絡地址來判斷是否處于同一個子網絡,然后再對物理地址(MAC)地址進行處理,從而準確確定要通信計算機的位置。

在網絡層中有我們熟悉的IP協議(即規定網絡地址的協議),目前廣泛采用的是IP協議第四版(IPv4),這個版本規定,網絡地址由32位二進制位組成。我們可以自己配置IP地址也可以自動獲得的方式得到IP地址,Ip地址分成兩部分,前24位代表網絡,后8位代表主機號, 如192.168.254.1和192.168.254.2就處于同一個子網絡里,因為這兩個IP地址的前24位相同。

網絡層中以IP數據包的形式來傳遞數據,IP數據包也包括兩部分:頭(Head)和數據(Data),IP數據包放進數據幀中的數據部分進行傳輸。

2.4 傳輸層

通過MAC和IP地址,我們可以找到互聯網上任意兩臺主機來建立通信。然而這里有一個問題,找到主機后,主機上有很多程序都需要用到網絡,比如說你在一邊聽歌和好用QQ聊天, 當網絡上發送來一個數據包時, 是怎么知道它是表示聊天的內容還是歌曲的內容的, 這時候就需要一個參數來表示這個數據包是發送給那個程序(進程)來使用的,這個參數我們就叫做端口號,主機上用端口號來標識不同的程序(進程),端口是0到65535之間的一個整數,0到1023的端口被系統占用,用戶只能選擇大于1023的端口。

傳輸層的功能就是建立端口到端口的通信,網絡層就是建立主機與主機的通信,這樣如果我們確定了主機和端口,這樣就可以實現程序之間的通信了。我們所說的Socket編程就是通過代碼來實現傳輸層之間的通信。因為初始化Socket類對象要指定IP地址和端口號。

在傳輸層有兩個非常重要的協議:UDP 協議和TCP協議

采用UDP協議話傳輸的就是UDP數據包,同樣UDP數據包也由頭和數據兩部分組成,頭部分主要標識了發送端口和接受端口,數據部分就是具體的內容信息。同樣UDP數據包是放入IP數據包中的"數據"部分,IP數據包再放入數據幀中在網絡上傳輸。

由于UDP協議的可靠性差(數據發送后無法確定對方是否收到),所以又定義了一個可靠性高的協議——TCP協議,TCP協議采取了握手的方式要確保對方收到了數據。

2.5 應用層

應用層是模型中的最頂層,是用戶與網絡的接口,該層通過應用程序來完成網絡用戶的應用需求。該層的數據放在TCP數據包的數據部分,該層定義了一個很重要的協議——Http協議,我們一般的Web開發都是基于應用層的開發, 所以后面專題將會和大家介紹下Http協議。理解Http協議可以幫助我們理解Asp.net的請求響應模型以及幫助我們自定義發出請求和自定義服務器。

三、總結

現在通過一個簡單的訪問網頁的例子來說明網絡中的通信。

當我們在瀏覽器中輸入www.baidu.com時,這意味著瀏覽器要向百度發送一個網頁數據包,要發送數據包,需要知道對方的IP地址,這里我們只知道網址為www.baidu.com,卻不知道IP地址,此時應用層協議DNS協議會幫我們把網址解析為IP地址,此時會發送一個DNS數據包給DNS服務器,DNS服務器再做出響應來告訴我們百度的IP地址為220.181.111.147,這樣我們就知道百度(我們需要通信的主機)的IP地址。

應用層:

瀏覽網頁采用的是HTTP 協議,HTTP數據包會嵌入在TCP數據包中,此時我們發送的HTTP數據包內容為:

  1. GET http://www.baidu.com/ HTTP/1.1  
  2. Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*  
  3. Accept-Language: en-US  
  4. User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7; InfoPath.3; MS-RTC LM 8)  
  5. Accept-Encoding: gzip, deflate, peerdist  
  6. Proxy-Connection: Keep-Alive  
  7. Host: www.baidu.com  
  8. Cookie: BDSFRCVID=H1K_JgC2l434o0a3SlYrhIyDwFLxPM7C3J; H_BDCLCKID_SF=tJAt_C8htDv5HTuRj63D5JcH-UnLqMkDWaOZ0h8-aI-5MbAx-jb6hhFXM-r80nblBTbT2C3nthF0HPonHj8Bej5L3J; BAIDUID=C0E879D1A40237E70E9FA559D40EE0AC:FG=1; BDUT=w5n3C0E879D1A40237E70E9FA559D40EE0AC13914a661370; BDUSS=FEQVdNdjllMTYyYlRxY3ZZbW1hM2htemdqZFVJcWRLWmFBaEtqd1FoTDNXeE5SQUFBQUFBJCQAAAAAAAAAAAoqyysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwLjI2LjE5Ny43NwAAAADAxFInAAAAAPcNJlD3DSZQYV; BDRCVFR[eYjbPwSqvSs]=2g3v5sBI-NCpv4EILPoXi4WUvY; Hm_lvt_9f14aaa038bbba8b12ec2a4a3e51d254=1344671219756; Hm_lpvt_9f14aaa038bbba8b12ec2a4a3e51d254=1344671219756  
  9. X-P2P-PeerDist: Version=1.0 

傳輸層:

TCP數據包需要設置端口,接收方(百度)的Http端口默認是80,本機的端口是一個1024-65535之間的隨機整數,這里假設為1025,這樣TCP數據包由標頭(標識著發方和接收方的端口信息)+HTTP數據包,這樣TCP數據包再嵌入IP數據包中在網絡上傳送

網絡層:

IP數據包需要知道雙方的IP地址,本機IP地址假定為192.168.1.5,接受方IP地址為220.181.111.147(百度),這樣IP數據包由頭部(IP地址信息)+TCP數據包,

數據鏈路層:

IP數據包嵌入到數據幀(以太網數據包)中,以太網數據包需要知道雙方的MAC(物理地址),發送方為本機的網卡地址,接受方為網關192.168.1.1的MAC地址(通過ARP地址解析協議得到的)。這樣數據幀由頭部(MAC地址)+IP數據包組成。

經過多個網關的轉發到百度服務器220.181.111.147,服務器接受到發送過來的以太網數據包,然后再從以太網數據包中提取IP數據包——>TCP數據包——>HTTP數據包,***服務器做出"HTTP響應",再用TCP協議發回給客戶端(瀏覽器),瀏覽器同樣的過程讀取到HTTP響應的內容(HTTP響應數據包),然后瀏覽器對接受到的HTML頁面進行解析,把網頁顯示出來呈現給用戶,這樣就完成了一次網絡通信了。

后面一個專題將對HTTP協議進行詳細的介紹。

原文鏈接:http://www.cnblogs.com/zhili/archive/2012/08/11/NetWorkProgramming.html

【編輯推薦】

  1. C#網絡編程系列二:HTTP協議詳解
  2. C#網絡編程系列三:自定義Web服務器
  3. C#網絡編程系列四:自定義Web瀏覽器
  4. C#網絡編程系列五:TCP編程
  5. C#網絡編程系列六:UDP編程
  6. C#網絡編程系列七:UDP編程補充
  7. C#網絡編程系列八:P2P編程
  8. C#網絡編程系列九:類似QQ的即時通信程序
  9. C#網絡編程系列十:實現簡單的郵件收發器
責任編輯:張偉 來源: Learning hard的博客
相關推薦

2012-09-24 14:09:31

C#網絡協議C

2012-09-24 15:35:24

C#網絡協議UDP

2012-09-24 15:13:50

C#網絡協議TCP

2012-09-25 11:28:38

C#網絡協議UDP

2012-09-25 13:47:43

C#網絡協議P2P

2009-08-21 14:03:04

C#網絡編程

2012-09-25 14:06:28

C#網絡協議

2012-09-24 14:31:55

C#網絡協議C

2012-09-24 14:43:51

C#網絡協議C

2012-09-25 15:02:50

C#網絡協議

2024-03-04 18:49:59

反射C#開發

2015-09-06 10:54:29

HTTP網絡協議

2009-08-21 14:47:39

C#網絡編程

2009-08-21 17:19:36

C#網絡編程入門

2011-07-19 13:04:22

網絡協議網絡編程

2009-09-07 14:29:47

C# Socket編程C# Socket

2009-08-21 10:17:14

C#異步網絡編程

2019-09-18 20:07:06

AndroidTCP協議

2009-09-02 17:10:45

C#語言入門

2011-09-16 10:00:56

C++
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文天堂在线一区 | 亚洲一区二区精品视频 | 蜜桃av人人夜夜澡人人爽 | 久久国产日本 | 91精品国产91久久久 | 国产免费一区二区 | 亚洲欧美日韩在线 | 欧美电影一区 | 色视频成人在线观看免 | 国产成人精品亚洲日本在线观看 | 在线免费观看欧美 | 毛片区 | 青青草原精品99久久精品66 | 丝袜毛片| 成人特级毛片 | 成人黄视频在线观看 | 四虎在线观看 | 欧美一区二区三区视频在线 | 国产一区二区三区久久 | 日韩三级在线 | 亚洲不卡视频 | 99热国产免费 | 成人在线电影网站 | 欧美成人免费在线 | 亚洲狠狠丁香婷婷综合久久久 | 日韩精品一区二区三区在线观看 | 国产真实精品久久二三区 | 国产一区 | 中文字幕精品一区二区三区精品 | 亚洲国产专区 | 成人毛片在线观看 | 久久精品一级 | 亚洲综合色视频在线观看 | 正在播放亚洲 | 最新av在线网址 | 亚洲欧美一区二区在线观看 | 亚洲国产一区视频 | 日本a v在线播放 | 久久久激情视频 | 久草成人网 | 日韩在线|