深入理解计算机系统:网络编程 上
一直以來對計算機網(wǎng)絡(luò)比較感興趣,但是無奈大學(xué)計算機網(wǎng)絡(luò)的學(xué)習(xí)非常表面,已經(jīng)忘得差不多了。畢業(yè)后讀了一些網(wǎng)絡(luò)方面的書,對網(wǎng)絡(luò)知識的冰山一角有了一些感悟。
隨著網(wǎng)絡(luò)方面的書越讀越多,不懂的地方也越來越多。而且很多知識不經(jīng)常使用,沒多久就忘了。
so,我決定著手自己寫一個web服務(wù)器。哇,居然沒什么頭緒。
第一步,我先閱讀了下深入理解計算機系統(tǒng)的網(wǎng)絡(luò)編程這一章。以下就是我在閱讀過程中記錄的精華。
11章 網(wǎng)絡(luò)編程
11.1 c-s模型
服務(wù)器管理某種資源,為客戶端提供某種服務(wù)。例如,web服務(wù)器管理一些磁盤文件,它代表客戶端進行檢索和執(zhí)行。
c,s是進程,而非主機或者機器。
11.2 網(wǎng)絡(luò)
對于主機,網(wǎng)絡(luò)是一個I/O設(shè)備。
一個網(wǎng)絡(luò)通過網(wǎng)絡(luò)適配器連接到I/O總線擴展槽,從網(wǎng)絡(luò)上接受的數(shù)據(jù)通過網(wǎng)絡(luò)適配器經(jīng)過I/O和存儲器總線拷貝到了存儲器,典型地通過DMA傳送。
類似,數(shù)據(jù)也能通過存儲器拷貝到網(wǎng)絡(luò)。
(這本書太牛逼了,這一章簡直精簡地概括了我所了解的網(wǎng)絡(luò)知識,并且對我迷惑的很多地方都進行了闡釋)
主機連接到集線器,網(wǎng)橋連接多個網(wǎng)段成為一個更大的局域網(wǎng)(橋接以太網(wǎng))。多個不兼容的網(wǎng)絡(luò)可以通過路由器連接,組成一個internet.
Internet:具體,全球IP因特網(wǎng);internet:抽象,一個網(wǎng)絡(luò)概念
WAN:廣域網(wǎng) LAN:局域網(wǎng)
互聯(lián)網(wǎng)重要特性:他能由采用完全不同和不兼容技術(shù)的的各種局域網(wǎng)和廣域網(wǎng)組成。那么,
這些不同的網(wǎng)絡(luò)之間如何進行溝通呢?協(xié)議軟件。
協(xié)議軟件實現(xiàn)一種協(xié)議,控制主機和路由器如何協(xié)同工作來實現(xiàn)數(shù)據(jù)傳輸。
協(xié)議必須實現(xiàn)兩個功能:
命名機制。為主機分配一個互聯(lián)網(wǎng)絡(luò)地址,唯一標(biāo)識這臺主機。
傳送機制。定義一種能夠?qū)碜圆煌瑓f(xié)議的不同格式的幀封裝成不連續(xù)的片(包)。一個包由包頭和有效荷載組成。包頭包括包的大小以及源目地址。
11.3 全球IP因特網(wǎng)
TCP/IP 是一個協(xié)議族,IP提供基本的命名方法和傳送機制、UDP擴展了IP協(xié)議,可以在進程間而不是主機間傳送、TCP基于IP實現(xiàn)了進程間可靠的全雙工連接。
因特網(wǎng)是一個世界范圍內(nèi)的主機集合:
主機集合被映射為一組32位的IP地址
IP地址被映射為因特網(wǎng)域名的標(biāo)識符
因特網(wǎng)主機上的進程能夠通過連接(connection)和其他任何因特網(wǎng)主機上的進程通信
因特網(wǎng)主機可以有不同的主機字節(jié)順序,所以TCP/IP為任意整數(shù)數(shù)據(jù)定義了統(tǒng)一的網(wǎng)絡(luò)字節(jié)順序(大端字節(jié)順序),
unix提供了函數(shù)能夠讓數(shù)據(jù)在大小端之間轉(zhuǎn)換:htonl, htons, ntohl, ntohs
inet_aton, inet_ntoa可以實現(xiàn)IP地址和點分十進制串之間的轉(zhuǎn)換
n:network a: application
因特網(wǎng)域名
因特網(wǎng)定義了域名集合和IP地址集合之間的映射。
DNS數(shù)據(jù)庫上的主機條目結(jié)構(gòu)定義了一組域名和一個官方名字和一組別名和一組IP地址之間 的映射。
gethostbyname返回和域名name相關(guān)的主機條目;gethostbyaddr返回和IP地址相關(guān)聯(lián)的主機條目
因特網(wǎng)連接
一個套接字是一個連接的端點。每個套接字都有對應(yīng)的套接字地址,由一個因特網(wǎng)地址和一個端口組成,用“地址:端口”組成。
客戶端發(fā)起連接時,端口號是內(nèi)核分配的,稱為臨時端口;在服務(wù)器端,端口是固定的,對應(yīng)系統(tǒng)上不同的服務(wù)。
一個連接由它兩端的套接字地址唯一確定。(套接字對)
11.4 套接字接口
套接字接口是一組函數(shù),它們和unix IO函數(shù)結(jié)合起來,用來創(chuàng)建網(wǎng)絡(luò)應(yīng)用。
套接字地址結(jié)構(gòu)
從內(nèi)核來看,套接字就是通信的一個端點。從程序來看,套接字就是一個有相應(yīng)描述符的打開文件。
tcp/ip的套接字相關(guān)代碼中,_in后綴意思是互聯(lián)網(wǎng)絡(luò)(internet),而不是輸入。
socket函數(shù)
客戶端和服務(wù)器使用socket函數(shù)來創(chuàng)建一個套接字描述符。
通常帶這樣的參數(shù):
clientfd = Socket(AF_INET, SOCK_STREAM, 0);
AF_INET表明我們正在使用因特網(wǎng),SOCK_STREAM表明這個套接字是因特網(wǎng)連接的一個端點。clientfd僅僅部分打開,還不能讀寫。如何完成打開套接字,取決于是客戶端還是服務(wù)器。
connetc函數(shù)
客戶端使用connect來建立和服務(wù)器的連接。
=============== 未完待續(xù) =================
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的深入理解计算机系统:网络编程 上的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux bash命令操作和VI编辑器
- 下一篇: 深入理解计算机系统:网络编程 下 一个简