精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入理解端口的本質、Node.js Socket 的本質

開發 前端
作為 web 工程師,我們每天都在和端口、socket 打交道,用的話可能很多人會用,但是問到它們的本質,可能能答出來的就很少了。

[[423117]]

作為 web 工程師,我們每天都在和端口、socket 打交道,用的話可能很多人會用,但是問到它們的本質,可能能答出來的就很少了。

這篇文章,我們就來探究下端口和 socket 的本質。

端口

我們網絡是分層的,OSI 中分了 7 層,TCP/IP 簡化為 5 層或者 4 層。

網絡層主要是 IP 協議,是路由器相關的協議,它的作用是把數據從從一臺主機傳輸到另一臺主機。

那到了另一臺主機之后呢?每臺主機都有很多的進程,怎么知道交給哪個進程?這就是運輸層的 TCP、UDP 做的了。

如何定位一臺主機的進程呢?

直接指定進程 id 行么?比如 x.x.x.x:進程id 的形式。

這樣設計是可以,但是進程 id 是動態的,不固定,可能下次重啟某個服務進程,進程 id 就變了。所以還得繼續想。

那加一個中間層呢?計算機不是所以問題都可以加中間層解決么。數據不直接給進程,而是放到某段內存,這段內存叫做端口,進程就監聽這個端口的數據。

這樣就不需要固定進程 id 了,進程 bind 到這段內存(端口)就行,然后 listen 它的變化。

這樣不直接依賴具體實現,而是雙方都依賴抽象層的思想叫做 IOC( inverse of control 控制反轉)。

為什么叫做端口呢?因為硬件中也有端口這個概念,如圖:

硬件的端口是設備和外界通信的入口,軟件的端口也是一樣的定位,所以采用了端口的名字。

這樣,我們定位一個網絡上的進程,需要 IP + 端口 + 協議 就可以了,這是進程網絡地址的三要素,可以看到 TCP、IP 等協議是共同其作用的,所以叫做 TCP/IP 協議族。

端口的本質就是一段內存中的數據結構,我們可以通過監聽它的變化,當數據寫入的時候就能收到消息。

那么每個進程都要指定端口也太麻煩了吧,能不能統一什么協議就一定是什么端口,這樣只需要 協議 + ip 就可以訪問了,端口自動填上。

于是就有專門的機構去協調這些,這個機構叫做 IANA(The Internet Assigned Numbers Authority),互聯網數字分配機構。因為網絡不是中央集權的,需要一個中間機構去協調各方,這個機構就是做這件事情的,包括域名、端口、協議等。

端口是一個 16 位的二進制數,兩個字節,所以范圍是 0 到 65535 的整數,IANA 把它們分為了 3 段:

  • 0 到 1023 是公認端口,把協議綁定到固定的端口,比如 HTTP 是 80,HTTPS 是 443 等。
  • 1024 到 49151 是可注冊的端口,我們給進程綁定端口的時候就從這里面選。
  • 49152 到 65535 是動態分配的端口,用于一些需要分配端口的進程,動態從這里面取。

通過固定協議的端口,我們定位一個網絡中的進程只需要 協議 + ip 就行了。當然,有的時候還是需要 協議 + ip + 端口來指定的。

socket

有了端口之后,我們就能定位到網絡中的進程,然后進行數據通信了。但是不同的協議的數據結構不同,也就是要做不同的操作,直接操作網絡傳過來的數據比較復雜,這件事應該操作系統來封裝一下。所以 POSIX 就定義了 socket 的標準 api,我們通過這些 api 就可以很方便的操作不同協議的數據。(關于 POSIX 可以可以看我這篇文章: Node.js 的 api 設計的源頭:POSIX)

socket 的 api 分為服務端和客戶端兩方面:

服務端:bind、listen、accept、read、write、close

客戶端:connet、write、read、close

POSIX 的思想是一切皆文件,所以網絡通信的 socket 的 api 也設計成了 read、write 的形式。

服務端通過 listen 來把進程綁定到端口,客戶端連接上服務端的某個端口,通過網絡把數據傳輸到該端口,之后進行數據的讀寫。

各種語言都對 socket api 做了封裝,Node.js 也不例外。

Node.js 中的 socket

Node.js 的文件讀寫是通過 stream 的,而 POSIX 把網絡操作 socket 也作為文件讀寫來處理,所以 Node.js 的 socket 也是 stream 形式的 api。

服務端 socket api:

  1. const net = require('net'); 
  2.  
  3. const server = net.Server((socket) => { 
  4.   console.log('client connected'); 
  5.  
  6.   socket.on('data', (data) => { 
  7.     console.log(data.toString('UTF-8')) 
  8.   }) 
  9.   socket.on('end', () => { 
  10.     console.log('client disconnected'); 
  11.   }); 
  12.  
  13.   socket.write('hello\r\n'); 
  14. }); 
  15.  
  16. server.on('error', (err) => { 
  17.   throw err; 
  18. }); 
  19.  
  20. server.listen(8124, () => { 
  21.   console.log('server bound'); 
  22. }); 

可以看到是通過 read、write 的形式,因為 Node.js 封裝成了 stream,所以監聽 data 事件。(關于 stream,可以看我這篇文章:徹底掌握 Node.js 四大流,解決爆緩沖區的“背壓”問題)

客戶端 socket api:

  1. const net = require('net'); 
  2.  
  3. const socket = net.Socket({ host: 'xxxx', port: 8124 }, () => { 
  4.   console.log('connected to server!'); 
  5.   client.write('world!\r\n'); 
  6. }); 
  7.  
  8. socket.on('data', (data) => { 
  9.   console.log(data.toString()); 
  10.   client.end(); 
  11. }); 
  12.  
  13. socket.on('end', () => { 
  14.   console.log('disconnected from server'); 
  15. }); 

直接 new 的方式比較麻煩,所以 Node.js 進一步提供了工廠方法:

new Server 可以用 net.createServer

new Socket 可以用 net.createConnection

這樣做了進一步的簡化。

總結

網絡中的兩個進程通過 ip + 端口來通信,通過協議指定數據的格式。端口是一種 ioc 的思想,不直接綁定到進程 id,而是把數據寫入到端口,進程 bind 到這個端口的形式。

端口號是 16 位的數字,表示范圍是 0 到 65535,IANA 把它分成了 3 類來用:

0 到 1024 是協議對應的端口、1024 到 49151 是進程可以注冊的端口,49152 到 65535 是動態分配用的端口。

通過 協議 + ip + 端口的 3 要素就可以定位網絡上的進程,而具體協議的數據格式不同,所以 POSIX 規定了 socket 的一系列 api,包括服務端的 bind、read、write、close,客戶端的 read、write、close 等,提供了類似文件讀寫的 api。

各種語言都對這些操作系統的 api 做了封裝,Node.js 也是。Node.js 對文件讀寫使用 stream 的形式,所以 net.Socket、net.Server 也是 stream 的 api。為了簡化創建,還分別提供了 net.createConnect 和 net.createServer 的工廠方法。

 

希望這篇文章可以幫助大家理解端口的本質(內存中用于接受網絡數據的數據結構),socket 的本質(POSIX 定義的網絡通信 api),以及熟悉 Node.js 的 net 的 api。

 

責任編輯:武曉燕 來源: 神光的編程秘籍
相關推薦

2012-11-22 10:11:16

LispLisp教程

2021-08-05 05:46:06

Node.jsInspector工具

2021-10-16 05:00:32

.js Buffer模塊

2025-04-22 08:21:10

2025-04-28 02:00:00

2021-08-26 13:57:56

Node.jsEncodingBuffer

2021-08-12 01:00:29

NodejsAsync

2021-09-01 13:32:48

Node.jsAPI POSIX

2024-07-05 10:59:26

2013-11-01 09:34:56

Node.js技術

2025-08-28 07:58:18

2017-01-12 19:34:58

2019-08-15 14:42:24

進程線程javascript

2014-03-12 10:19:54

iOS對象

2021-05-27 09:00:00

Node.js開發線程

2024-01-05 08:49:15

Node.js異步編程

2025-05-15 04:00:55

2024-12-03 15:15:22

2013-06-14 09:27:51

Express.jsJavaScript

2015-07-16 09:59:55

PHP Node.js討論
點贊
收藏

51CTO技術棧公眾號

久久久久资源| 亚洲精品在线不卡| 7777在线视频| 人妻精品无码一区二区| 香蕉视频成人在线观看| 中文字幕日韩在线播放| 绯色av蜜臀vs少妇| 亚洲男人av| 亚洲欧美一区二区三区孕妇| 久久久久免费网| 一级二级三级视频| 国产毛片久久| 欧美成人精品一区| 在线小视频你懂的| julia中文字幕一区二区99在线| 欧美天堂在线观看| 久久国产精品免费观看| 黄色在线网站| 成人午夜电影久久影院| 国产精品三级久久久久久电影| 少妇久久久久久被弄高潮| 国产精品羞羞答答在线观看| 精品人伦一区二区色婷婷| 我要看一级黄色大片| ****av在线网毛片| 亚洲欧洲综合另类在线| 无码免费一区二区三区免费播放| 欧美视频一二区| 国内精品在线播放| 国产精品91在线| 青草视频在线观看免费| 国产精品mv在线观看| 最近2019免费中文字幕视频三| 色婷婷精品久久二区二区密| 亚洲精品高潮| 3d动漫精品啪啪1区2区免费 | 日本不卡免费播放| 懂色av噜噜一区二区三区av| 91在线高清免费观看| 亚洲婷婷综合网| 日本免费a视频| 久久精品女人毛片国产| 三级电影一区| 永久免费毛片在线播放不卡| 国产精品无码午夜福利| 欧美五码在线| 日韩av影片在线观看| 97中文字幕在线观看| 国产乱码精品一区二区三区亚洲人| 日本韩国一区二区三区视频| 好吊妞无缓冲视频观看| av资源中文在线| 亚洲综合色网站| 欧妇女乱妇女乱视频| 羞羞视频在线免费国产| 亚洲人成在线播放网站岛国| 中国 免费 av| 一二三四区在线观看| 亚洲黄网站在线观看| 精品91一区二区三区| 日韩欧美第二区在线观看| 国产一级在线视频| 亚洲香蕉网站| 久久亚洲成人精品| 欧美性xxxx极品hd欧美风情| 国产亚洲福利社区| 丰满人妻一区二区三区免费视频 | 欧美激情区在线播放| 国产亚洲成人精品| 亚洲高清资源| 2020国产精品视频| 日韩综合在线观看| 蓝色福利精品导航| 99视频在线播放| 黄色成人在线看| 无码精品黑人一区二区三区| aaa国产一区| 欧美一级爱爱| 精品麻豆一区二区三区| 一区二区三区欧美| 97国产精东麻豆人妻电影| 欧美aaa视频| 欧美日韩中字一区| 97中文字幕在线观看| 国产真实夫妇交换视频| 精品一区二区三区中文字幕视频| 日韩一区和二区| 日本黄色免费观看| 日本久久精品| 欧美精品18videosex性欧美| 国产性生活视频| 国内精品写真在线观看| 国产一区二区自拍| 日本不卡在线| 精品国产精品三级精品av网址| av丝袜天堂网| 精品视频高潮| x99av成人免费| 永久免费看片在线播放| 久久精品久久综合| 精品国产乱码久久久久软件| 色网站在线看| 欧美日韩国产精品一区二区三区四区 | 91综合网人人| 欧美怡春院一区二区三区| 91激情在线观看| 99re这里只有精品6| 熟女视频一区二区三区| 日韩电影免费观看高清完整版| 51精品视频一区二区三区| 国产精品久久AV无码| 国产精品国产三级国产在线观看 | 97成人超碰| 亚洲大胆人体视频| 伊人久久久久久久久久久久久久| 一本色道88久久加勒比精品| 亚洲一区二区三区四区在线播放| 噜噜噜在线观看播放视频| 一个色在线综合| 天天干天天av| jiujiure精品视频播放| 97国产精品久久| 国产福利免费视频| 欧美极品美女视频| av网站在线观看不卡| 99精品中文字幕在线不卡| 日韩色av导航| 亚洲精品毛片一区二区三区| 91啪九色porn原创视频在线观看| 日本人妻伦在线中文字幕| 亚洲欧美在线综合| 中文字幕av一区二区| 台湾佬中文在线| 成人晚上爱看视频| 成人免费在线视频播放| 久久精品一级| 久久人体大胆视频| 一二区在线观看| 国产精品盗摄一区二区三区| 天天影视综合色| 欧美美乳视频| 国产成人精彩在线视频九色| 色播色播色播色播色播在线 | 欧美精品密入口播放| 欧美激情精品久久久久久大尺度 | 国产无人区码熟妇毛片多| 国产精品77777| 少妇久久久久久被弄到高潮| 国内不卡的一区二区三区中文字幕| 丝袜一区二区三区| 一区二区久久精品66国产精品| 中文字幕中文字幕在线一区| 青青草久久伊人| 99久久婷婷| 不卡视频一区二区| 都市激情久久综合| 亚洲国产精品成人va在线观看| 久久久久亚洲av无码专区| 国产成人午夜99999| 奇米777四色影视在线看| av成人资源| 91精品成人久久| 免费在线观看一级毛片| 欧美系列在线观看| 国产三级精品三级观看| 国产精品影视网| 99久久免费观看| 香蕉久久夜色精品国产使用方法| 欧美最近摘花xxxx摘花| youjizz在线播放| 在线播放91灌醉迷j高跟美女 | 精品久久久久久久久久ntr影视| 国产 中文 字幕 日韩 在线| 日日骚欧美日韩| 致1999电视剧免费观看策驰影院| 国产美女视频一区二区| 久久人人爽人人爽人人片av高请 | 国产精品第一视频| 免费人成在线观看播放视频 | 91美女片黄在线观| 国内高清免费在线视频| 亚洲欧美在线看| 国产精品无码AV| 欧美日韩国产丝袜另类| аⅴ天堂中文在线网| 国产精品一级二级三级| 1024精品视频| 亚洲视频中文字幕在线观看| 亚洲婷婷综合网| 国产精品一级二级| 国产成人亚洲精品狼色在线| 45www国产精品网站| 国产三级在线观看完整版| 精品一区二区免费视频| 日韩黄色短视频| 欧美日韩久久精品| 不卡视频一区二区| 亚洲精品成人在线视频| 国产又粗又猛又黄又爽| 国产精品一区免费视频| 国产精品va无码一区二区| 成人影院天天5g天天爽无毒影院| 99国产在线视频| 国产精品久久久久久久久久齐齐 | 欧美在线观看禁18| 99www免费人成精品| 国产精品久久久久久久久| 久久精品2019中文字幕| 国产精品偷伦视频免费观看国产 | 一本一道久久a久久精品| 你懂得视频在线观看| 成人av网站在线观看免费| 亚洲男人天堂色| 国产精品亚洲欧美| 一区二区三区不卡在线| 伊人久久大香线蕉综合网蜜芽| 91视频免费在线| 第一区免费在线观看| 亚洲av无码精品一区二区| 中文字幕中文乱码欧美一区二区| 捆绑裸体绳奴bdsm亚洲| 国产精品羞羞答答xxdd| 成年网站在线播放| 久久久久99| 成人在线免费观看av| 狠狠爱www人成狠狠爱综合网| 在线观看欧美激情| 国产精品无码粉嫩小泬| 福利写真视频网站在线| 日韩西西人体444www| 亚洲无码久久久久| 色猫猫国产区一区二在线视频| 欧美日韩一级在线观看| 二区在线观看| 在线观看亚洲| 亚洲一区二区在| 不卡日本视频| 日韩资源av在线| 国产不卡av一区二区| 精品午夜一区二区| 欧美一级全黄| 美女三级99| 亚洲桃色综合影院| 51精品在线观看| 欧美精品二区三区| 亚洲成人动漫精品| 全部毛片永久免费看| 五月婷婷另类国产| 欧美三级午夜理伦| 欧美性猛交xxxxx水多| 免费av网站在线| 91精品91久久久中77777| 国产99免费视频| 漫画在线观看av| 亚洲韩国青草视频| 天天色综合久久| 日韩精品在线观看视频| 青青草超碰在线| 在线观看成人黄色| 日韩三级影院| 欧美国产亚洲精品久久久8v| a级片免费在线观看| 国产91精品久久久久| 春暖花开亚洲一区二区三区| 国产精品免费网站| 精品国产亚洲一区二区三区| 成人综合色站| 亚洲自拍都市欧美小说| 视频一区在线免费观看| 国产精品97| 免费不卡av在线| 三级在线观看一区二区| 艹b视频在线观看| 国产自产2019最新不卡| 日本性生活一级片| 久久视频一区二区| 国产中文字幕久久| 亚洲午夜国产一区99re久久| 91极品女神在线| 天堂v在线观看| 亚洲一区999| 18视频在线观看网站| 51精品在线观看| 亚洲欧美在线综合| 久久涩涩网站| 99久久视频| 北条麻妃69av| 激情综合色综合久久| 国产高清成人久久| 国产精品久久久久久久久久免费看 | 国产亚洲精品一区二555| 国产原创在线观看| 全亚洲最色的网站在线观看| 97色婷婷成人综合在线观看| 精品国产一区二区三区日日嗨| 成人看的视频| 亚洲理论电影在线观看| 免费成人在线网站| 国产免费一区二区三区最新6| 中文字幕av一区二区三区免费看 | japanese色国产在线看视频| 国产精品成熟老女人| 成人看片爽爽爽| 神马影院一区二区| 一本久久综合| 国产成人精品综合久久久久99 | 中文文字幕一区二区三三| 欧美变态凌虐bdsm| 91精品大全| 欧美怡春院一区二区三区| 91精品国产乱码久久久竹菊| 日韩精品欧美在线| 999亚洲国产精| 极品人妻一区二区| 中文字幕一区二区三区在线观看| 国产美女激情视频| 亚洲成人网在线| 青草视频在线免费直播| 91人成网站www| 青青草国产免费一区二区下载 | 秋霞影院午夜丰满少妇在线视频| 美女视频网站黄色亚洲| 日韩激情av在线播放| 日韩中文字幕高清| 亚洲第一偷拍网| 99视频免费在线观看| 国产精品专区h在线观看| 九一成人免费视频| 图片区日韩欧美亚洲| 日本精品视频在线观看| 夜夜狠狠擅视频| 亚洲精品二三区| 欧美卡一卡二| 91最新在线免费观看| 999国产精品999久久久久久| 久草资源站在线观看| 99久久久国产精品| 久热精品在线观看| 日韩精品一区二区三区视频| 成人直播在线| 97超碰最新| 国产精品九九| 国产免费a级片| 亚洲高清视频中文字幕| 丰满岳乱妇国产精品一区| 欧美乱妇高清无乱码| 美国十次综合久久| 伊人久久在线观看| 国产宾馆实践打屁股91| 麻豆疯狂做受xxxx高潮视频| 日韩欧美二区三区| 国产探花视频在线观看| 国产综合动作在线观看| 在线亚洲自拍| 精品欧美一区二区久久久| 欧美午夜免费电影| 黄色视屏免费在线观看| 91欧美精品成人综合在线观看| 91精品秘密在线观看| 日本少妇激三级做爰在线| 一区二区三区在线观看国产| 男人天堂综合网| 欧美野外猛男的大粗鳮| 国产精品一区高清| 午夜免费看视频| 有坂深雪av一区二区精品| 涩涩视频免费看| 国产成人精品免高潮费视频| 欧美国产美女| 性xxxxxxxxx| 色综合一个色综合亚洲| 91av资源在线| 不卡视频一区二区| 免费亚洲一区| 国精产品久拍自产在线网站| 日韩亚洲欧美中文三级| 涩涩av在线| 在线视频亚洲自拍| 成人午夜av在线| 最近中文字幕在线免费观看| 欧美成人在线影院| 日韩有码一区| 国产一级片中文字幕| 精品毛片网大全| 精品美女在线观看视频在线观看| 国产私拍一区| 久久精品国产99国产| 国产手机在线视频| 中文字幕欧美精品日韩中文字幕| 日本精品在线播放 | 欧美喷水视频| 少妇精品一区二区三区| 欧美一级国产精品| 波多野结衣亚洲| 亚洲色婷婷久久精品av蜜桃| 2022国产精品视频| 精品久久久中文字幕人妻| 国产成人精品一区二区在线| 欧美精品激情| 91社区视频在线观看|