计算机网络学习笔记

计算机网络学习笔记,课程链接:

  • 《网络是怎样连接的(第2版)》,户根勤
  • 中科大老师郑烇、杨坚(教材为《计算机网络-自顶向下方法(第7版)》,机械工业出版社,2016)

1. 网络概论

网络的运行可以聚焦到单次交互:浏览器根据域名访问数据,Web服务器将所需的数据响应返回给浏览器,并由浏览器显示在屏幕上。这种交互方式类似于人类的一问一答,但网络在其中需要从很多设备中选定正确的通信对象,并确保无丢失和损坏地传递请求和响应。

确保这种信息传递机制需要网络控制软件,以及交换机、路由器等硬件协力合作实现。协调它们分工合作所用到的一个基本思路是,将数字信息分割呈一个一个的小块,并装入被称为""(Packet)的容器中运送,类似于邮递包裹一样,包的头部存有目的地等控制信息,便于交换机和路由器接力转运。

第一部分笔记从这个信息传递过程依次介绍网络的工作原理。

1.1. 浏览器生成消息

1.1.1. 生成http请求

网址 :又叫统一资源定位符 (Uniform Resource Locator,URL),常见以"http://"开头,但其实URL有很多种类,每种有不同的开头,对应着使用浏览器的不同功能,具体种类列在下图中。URL包含着指向具体数据或目标的信息,例如访问Web服务器时就包含域名,发送电子邮件时就包含收件人邮件地址等等。另外根据需要,URL还会包含用户名、密码、服务器端口号等信息。

协议 :通信操作的规则被定义为协议(protocol)。例如浏览器解析URL并发送请求就需要对应的协议,而根据协议不同,URL的格式也不同。

URL省略规则:

  • 若URL以 / 结尾,则表示表示路径或文件名被省略了,大多数情况下被省略的文件都被命名为 index.htmldefault.htm 之类的。
  • 有时连结尾的 / 也省略,例如 http://www.XXXX.com,就代表访问根目录下的默认文件,文件名同上。这样的文件过去被称为"主页"(Homepage),但现在主页这个词似乎含义更加广泛了。
  • 有时也会遇到 http://www.XXXX.com/aaa 这样的URL,结尾并不是一个明显指向文件夹或文件的名称,但也没有 / 作为结尾,这种情况一般来说会搜索Web服务器上名为aaa的文件,如果没有再搜索名为aaa的文件夹。

接下来介绍一下HTTP协议的交互方式,基本思路如下图所示,首先浏览器会根据URL和其当前工作场景来生成HTTP请求消息,包含方法统一资源标识符 (Uniform Resource Identifier,URI),URI向Web服务器传递的是"对什么"的信息,方法传递的则是"怎么做"的信息。

URI一般是一个文件名的路径,指向存放网页数据或是一个CGI(对Web服务器程序调用其他程序的规则)程序的文件,有时也可以直接用"http:"开头的URL(具体说明在后文详细展开)。而方法,也叫HTTP谓语,或是HTTP动词,包含需要Web服务器进行的动作信息,详见下表。其中GET是浏览网页的动作,POST是向网页提交信息(填问卷,提交地址等需要输入的操作),其他的动作很难找到常用的例子,但也需要理解。

有时客户端(浏览器)生成的HTTP消息中还会包含头字段,表示附加信息,不过头字段在向Web服务器发送数据时属于可有可无的信息,因此后文再展开。

将URL拆解为URI和方法后,需要将这些信息生成为具体的 HTTP请求消息 。其格式如下图所示。

当Web服务器收到请求消息后,会返回响应消息 ,其基本格式和思路和请求消息相同,差别在第一行需要返回状态码 和响应短语,来表示请求的执行结果。例如在请求中找不到的文件会显示 "404 Not Found" 的信息就是状态码,状态码是一个三位数字,代表不同含义,第一位的简介如下表所示。响应短语则是一段文字,表示执行结果。

如果需要返回的响应消息仅包含文字,那到此为止便完成了一次交互,但如果网页中还有图片等其他资源,网页响应位置会有图片文件的标签信息,当浏览器显示网页时会搜索这类标签,遇到对应标签则在屏幕上留出显示图片的空间,并再次发送图片的请求消息,直到获得对应的响应后将图片呈现在网页中。

对图片或其他资源的每次请求都需要单独发送一个新的URL和一个新的请求。浏览器需要对一个网页的显示进行整体指挥,例如需要发送哪些请求,并如何显示在屏幕上,而对于Web服务器,则无需处理这些请求之间的关系,只需要将所有请求的处理结果返回即可。

相关推荐
wdfk_prog3 分钟前
[Linux]学习笔记系列 -- lib/timerqueue.c Timer Queue Management 高精度定时器的有序数据结构
linux·c语言·数据结构·笔记·单片机·学习·安全
wdfk_prog1 小时前
构建基于Hexo、Butterfly、GitHub与Cloudflare的高性能个人博客
笔记·学习·github·hexo·blog
初级炼丹师(爱说实话版)1 小时前
MySql速成笔记6(DQL多表)
笔记
shixian10304111 小时前
Django 学习日志
数据库·学习·sqlite
小秋学嵌入式-不读研版2 小时前
C61-结构体数组
c语言·开发语言·数据结构·笔记·算法
丰锋ff3 小时前
2013 年真题配套词汇单词笔记(考研真相)
笔记·学习·考研
小小程序媛(*^▽^*)3 小时前
第十二届全国社会媒体处理大会笔记
人工智能·笔记·学习·ai
铁手飞鹰4 小时前
VS2022创建项目工程笔记
c++·windows·笔记·visualstudio
毕设源码-邱学长4 小时前
【开题答辩全过程】以 爱学习教育网站为例,包含答辩的问题和答案
学习
Yupureki4 小时前
从零开始的C++学习生活 5:内存管理和模板初阶
c语言·c++·学习·visual studio