这些天在读《计算机网络》(Andrew著,潘爱民译)、《计算机网络:自顶向下方法》、《TCP/IP详解 卷1》,记了一点笔记。
0.层
网络是分层的,每层都只依赖其直接下层。
OSI模型分7层,从上到下依次是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP/IP模型分4层,依次是应用层、传输层、网络层、链路层。
应用层太高,链路层太低,重点在传输、网络两层。
又以传输层的TCP协议、网络层的IP协议,为重点中的重点。
1.链路层
负责把数据从一个节点通过链路送往另一个相邻的节点。
节点指一台主机或路由器,信道指连接两个节点的通信信道。
传送的数据单元是帧。
网卡、驱动程序、电缆及其他传输媒介,都属于这一层。
2.网络层
负责把数据从一个节点,送往另一个并不直接相邻的节点。
传送的数据单元是包。
要送往并不相邻的节点,就要决定到目标节点的路径,这决定过程叫做路由,也叫选路。
网络服务可以有连接,也可以无连接。有连接的网络称为虚电路网络,无连接的网络称为数据报网络。
网络层的重要协议是IP协议。
每个连接到互联网上的设备,都有一个IP地址。
32位的IP地址,习惯性每个字节(8位)一节,分为四节,每节用一个0至255的10进制数字表示。
ping和traceroute是两个常用的网络诊断工具,怀疑网络不通的时候,我们常ping一下,而traceroute可以让我们看到从起点到终点过程中都走过了哪些站。
如果我的电脑没有公网IP,访问有公网IP的网站,在请求到达有公网IP(A.A.A.A)的路由器时,路由器记录我的内网IP(B.B.B.B)和源端口(X),再使用公网IP和一个作为路由器源端口的端口号(Y),向网站发送请求;网站会将响应发给A.A.A.A(即路由器的IP)的端口Y,路由器收到响应后,根据Y的值,判断出应该将响应转交给B.B.B.B的X端口,从而将网站响应给到我的电脑。这就是网络地址转换NAT技术。
3.传输层
负责把数据从一个节点的进程,送往另一个可能并不直接相邻的节点的进程。
IP指明了节点的位置,而端口号指明了发送方和接收方是该节点的哪个进程。
socket是传输层暴露给应用层的接口,应用程序员使用socket进行网络编程。
UDP是无连接的协议,而TCP是有连接的协议。
TCP著名的三次握手,类似打电话时说的「能听到吗?」「能听到。你能听到我吗?」「能。我明天请你吃饭。」前两次握手目的是单纯确认连接通畅,第三次握手的目的包括确认连接通畅,可以也包括「说正事」,即传输要传输的信息。
这样,就基于无连接的IP协议,建立起了有连接的TCP协议。
TCP协议提供的是全双工服务,即A和B建立连接之后,可以在同一时间,既有A流向B的数据,也有B流向A的数据。
传送的数据单元是段。
4.应用层
负责把有格式的数据在两个节点上的两个进程间传输(使用socket),传输的数据单元是报文,使应用程序完成用户实际需要的功能。
这两个进程可以是客户机-服务器关系,也可以是对等关系。
域名系统DNS将有意义的字符串(域名)映射到IP地址上,使网站的地址更容易被记忆。
电子邮件的发送过程:发信人的电脑 -> 发信人邮箱服务器 -> 收信人邮箱服务器 -> 收信人的电脑。使用SMTP协议。
万维网把Internet上的内容们链接起来,用户使用浏览器浏览网页,使用HTTP协议。
文件传输协议FTP让用户向远程主机上传或下载文件。
内容分发网络CDN在多个地点储存相同的数据,便于用户就近访问,减少访问时间。
P2P下载是对等网络的应用,如著名的BT下载,用户使用种子文件,通过服务器和已拥有待下载文件的用户取得连接,从他们那里获取资源。
5.其他
1)各层数据单元的格式,不赘
2)选路、避免拥堵、保证服务质量等具体策略,不赘
3)其他的细节,不赘
4)HTTP,可能会独立成篇
6.写在后面
这篇内容太少了,明明是三本讲网络的好书,每本都不算薄。笔记却这么短,内容又这么浅,像话吗?
必须承认,这三本书的大部分内容,我都并没有看,这与我的阅读风格有关(可参考如何阅读那篇),我的根本原则是,读书要有抓有放,少抓多放,效率优先。例如这几本书里的庞大的技术细节,以及我一点都不感兴趣的网络历史,我就都略过了。
每个读书人,他所处的阶段、面临的需求、阅读的目的都有不同,所以该读什么书、该怎么读,都必须具体分析,我绝不敢狂妄到认为自己能给出放之四海而皆准的建议。但我有一个原则——形而上的,这就有可能普适——要有一个读书的目的,而不是把读书本身作为最终目的,那个真正的目的,不论是功利的还是兴趣的,是学术的还是应用的,应该成为指引你阅读方式的北极星。要敢于选书,选到适合自己当前阶段最好的书之后,要敢于对其中部分章节不看,对自己确实决定要看的章节,要敢于看了之后不信,最终选了、看了、信了的部分,才是你自己的东西。我最反对的,是不管三七二十一,拿书就读,从头到尾,逐字逐句,读完深信不疑,鹦鹉学舌,生搬硬套。
现在这篇笔记,只是阶段性成果,但对我来说,暂时算够用,网络知识的学习,我还会在相当长的时间里零碎地继续下去,当学得更深入了,会更新到这笔记里,操作系统、算法的笔记,也都会慢慢学习更新。所以,待续。