目录
- 概述
- 物理层
- 数据链路层
- 网络层 (1) 基础知识
- 网络层 (2) IP地址设计和用尽问题
- 网络层 (3) 网络层分组的传输流程
- 网络层 (4) 网络层多播等应用
- 运输层 (1) 可靠传输和TCP/UDP
- 运输层 (2) 拥塞控制和握手挥手
应用层的任务
下面的4层为最顶层总体上提供了什么功能? 现在为了完成我们日常的网络使用,还缺什么? 可以先想想 下面4层的功能我们只需要看上一节讲的传输层即可,因为各个层次都是透明传输,传输层也使用了下面3层提供的功能。在传输层上我们只知道可靠TCP和非可靠UDP,使用他们就可以完成网络数据的传输了。至于通过硬件,怎么找到目的地,应在下面的各个层级实现了。我们不需要关心只需要关心我们需要可靠传输还是不可靠传输。 那我们现在还缺什么?现在提供了应用进程之间的传输服务,但是还缺少应用进程是怎么使用他们的,通过什么应用层协议使用他们的,我们使用的应用五花八门,每种都有自己的特性,都有自己的传输特性,不可能所有的应用都使用一种协议,所以在这个层级上又封装了用户可以直观使用的各个协议,通过他们用户可以完成他们想要的服务。这层讲完,计算机网络的所有层级都已经说完了。 应用层的每一种协议都是为了解决某一个应用问题,这种问题需要确定一下信息:
- 应用程序之间交换的报文类型,请求报文和相应报文
- 报文的语法,每个字段的寓意
- 进程何时如何发送报文 互联网公共领域的标准应用的协议是由RFC文档定义的,大家可以查阅 应用层的许多协议都是基于客户服务器方式,客户是服务请求方,服务器是服务提供方。下面细细讲解我们日常经常要使用的各个协议。
万维网和HTTP协议
网络的目的就是获取资源,那么我们在获取资源的过程中,会遇到哪儿些问题呢
- 怎么标记各个主机上的资源,怎么唯一的定位他们?
- 使用什么样的协议实现这种标记?
- 用户怎么方便的获取这种标记?
- 怎么规范传输的文档数据?
为了解决上面的问题,现在的方案就是万维网WWW(WORLD WIDE WEB),它是一个大规模的,联机式的信息储藏所,它使用链接的方式标记资源,可以通过链接很方便的访问其他站点。由于万维网的出现,使得普通百姓也可以利用网络资源。万维网是一个重要的里程碑。 万维网是一个分布式的超媒体系统,是超文本的扩充,超文本指有指向其他文档的链接的文本,超媒体又做了扩充,包括多媒体等。
那么万维网是怎么解决上面的问题的呢?
使用URL统一资源定位符定位万维网生的资源,并使每一个一个文档都具有唯一性
URL给资源提供了统一的识别码,可以当作各个资源的地址,由于资源在不同的操作系统上的路径格式不统一。URL也相当于依赖了抽象,不管操作系统的路径格式怎么变化。它由 {协议}://{主机}:{端口}/{路径}组成。协议常用的有HTTP和FTP协议,主机是指在互联网上的域名,这两部分是必须的,后面的端口和路径可以省略,直接访问默认的数据。 使用http的URL是很常用的,http的默认端口号是80,可省略链接内的端口号,如果省略了路径的话,就是指向这个网站的主页。使用什么协议来实现各种链接呢,就是我们熟知的HTTP协议,它是一个应用层协议,通常使用TCP进行安全传输
HTTP协议定义了万维网服务器怎么请求万维网资源,是面向文本的。报文中的每一个数据都是ASC2。以及服务器怎么把文档传送给对应的请求方。http是无状态的,即同一个用户访问多次,服务器也知道是一个用户。这种无状态简化了服务器的设计,使服务器很容易支持大量的并发。并且HTTP协议是无链接的,虽然使用了TCP协议,但是不需要事先建立HTTP连接。最早的HTTP1.0如果这个HTTP传输完成了,就会关闭这个连接,通常一个HTML要请求很多对象,这样是很慢的,因为每一个请求都需要建立连接,在HTTP1.1版本中解决了这个问题,它使用了持续连接,即服务器在发送响应后还可以保持这个连接。这种持续连接也有两种工作方式,非流水线方式和流水线方式,可以类比停止等待协议了连续ARQ协议。 Http报文格式:
请求报文:从客户端发出到服务器的发送报文
响应报文:从服务器到客户的响应
报文都是由开始行、首部行、实体主体组成。请求和响应的开始行不同。
开始行:用于区分请求报文还是响应报文。
请求报文由方法、请求资源的URL、和HTTP版本组成,方法就是对请求对象的操作,比如GET(请求读取由URL所标记的信息)、POST(给服务器添加信息)、HEAD(请求URL表示信息首部)、PUT(在指明的URL中存储一个文件)、DELETE(删除指定的文件)等。后面跟上完整/相对(如果使用相对的需要在首部行中添加主机域名)的URL和HTTP版本。
响应报文的开始行叫做状态行,包括HTTP版本号,状态码,以及解释状态码的简单短语。状态码都是3为数字的,分为5大类,1** 表示通知信息,如请求收到了或正在进行处理
2** 表示成功,如接收或知道了
3** 表示重定向
4** 表示客户端问题,如请求作用语法错误
5** 表示服务器的错误,如服务器无法完成请求等
首部行:用于说明服务器和客户端的一些信息,首部中有好多key:value,保存每个状态的值,最后还有一行与后面的实体分开。 实体主体:传输数据
- 怎么统一标记出现的文档呢,就是HTML超文本标记语言。通过它可以访问万维网上的任何一个界面。 要是任何一台计算机都能显示万维网服务器的界面,必须标准化。这就是HTML,制作万维网的标准语言,消除了不同计算机之间的交流障碍。
DNS协议
计算机网络是使用IP地址进行传输的,但是我们日常使用其他网站服务时,并没有使用到这个地址。我们使用的是域名,如baidu.com、sohu.com。那么我们输入的域名是通过什么协议转换成IP地址呢?就是DNS协议。
代理服务器
他把最近的一些请求和响应暂存在本地磁盘中,当有的新的请求到达时,就返回这个暂存的响应,而不是取请求互联网上的资源,代理服务器可以在服务端和客户端使用。这种方式大大剑侠了访问互联网的时延。
Cookie
因为HTTP是无状态的,那么服务器怎么标记这个用户呢,实际是有这方面的需求的。HTTP使用了cookie,规定万维网可以使用cookie来跟踪用户。当用户使用Cookie的网站时,该网站的服务器会为A产生一个随机的识别码。并在服务器的数据库产生一个项目,并在给A的响应报文首部行设置set-cookie:识别码。浏览器收到后会储存起来,以后请求这个网站时就会带着这个标示码。这样服务器就可以标记这个用户了。