应用层(Applicatio n Layer)
应用层是为操作系统或网络应用程序提供访问网络服务接口,应用层的协议包括:Telnet、FTP、HTTP、SNMP等等…应用层最终的目的不是解决用户各种具体的应用协议,应用层最终的任务是为用户提供服务。
这里说一下应用层的应用进程,应用进程是指正在运行的应用“程序” 而正在运行的程序都会有通讯的进程方式,这里面先涉及到应用程序的端口,应用程序的协议等,一个联网的应用程序,向外 部 通信时会在 自己的数据包的报头添加上端口号,然后在网络层和数据链路层分别添加上IP地址和MAC地址,将整个数据包发送到外网的主机,外网主机发送过来的数据,操作系统根据 端口号,把 相应的数据包发给 对应的 应用程序(通信软件)。而应用进程最终的目的是为了解决具体的应用问题而彼此通信的进程。
互联网应用层应用分布图:

我们来看看,因特网((Internet )最基本的三个应用
1.Email
电子邮件客户程序:Outlook Express、foxmail等,这些
邮件客户程序→邮件服务器1 →邮件服务器2 →…… →目的邮件服务器→目的邮件客户程序
电子邮件采用的主要协议是POP3和SMTP
-
SMTP:简单邮箱传输协议,用于电子邮件的传递,建立在UDP(也用TCP) 基础上,端口号25。
-
POP3:邮局协议(第三版),用于邮件管理和用户邮件的存取。建立在TCP基础上,端口号 110。
2.FTP
允许不同的主机间传送文件,面向连接,基于TCP协议的传输程序,
协议拥有该主机的IP地址(主机域名)、账号、密码。
3.万维网(www)
实际上是一个由千千万万个页面组成的信息网索取页面、浏览信息的程序称为浏览器(Browser,如Netscape、Internet Explorer等),浏览器与Web站点之间通过HTTP协议进行通信 HTTP:超文本传输协议用于传输超文本页面到客户机上,建立在TCP基础上,端口号=80。
应用层的通讯
下图是应用层的通讯过程


建立链接的前提是基于物理层开始的,通讯之间通过一列的物理链接设备(无线电波,光纤,双绞线),物理层通过高低电平工作,传输数据时会将高低电平转化成电信号,发送给被接收者,这些高低电平也就是0和1,通过数据链路层(ethenet)将电信号分组,这些0和1组成一串电信号(10101111) 而每一组的电信号都有特定对应的意义,我们都知道计算机最底层运算是二进制0和1, 就好比数据是字母“A” 要发送和接受两个过程之前都必须转化成电信号,计算机会通过某种机制将你要发送的数据“A”打散成电信号传输到接收方,接受方接受到之后会重新把这些电信号重组通过一层一层的的协议解析出数据这组0和1组成的电信号的意思“A” 这是大概的传输原理。
传输数据是必须遵循以太网(ethernet) 规定的 数据传输必须包含以下部分:
-
一组电信号的构成一个数据包,也叫做“针”
-
每一数据帧分成:报头head和数据data两部分
head data 头部(head) 是用来描述数据(data)代表的意义 ,头部包含三种信息
- 发送者/源地址,6个字节
- 接收者/目标地址,6个字节
- 数据类型,6个字节
为什么要有头部(head)信息呢? 很简单是因为发送数据之前是需要明确,发送者,和接收着的,如果没有这些信息又怎么知道发送者是谁,接收者是谁呢? 这些信息是在以太网报头定义的,以太网规定每一块网卡必须要有一个MAC地址,而这个MAC地址在网卡出厂之前都会被焊上,全世界独一无二的的MAC地址,MAC地址长度为48位二进制数,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

有了MAC地址之后可以满足于局域网内通讯了,局域网通信是基于UDP协议进行的,优点就是无需建立链接,具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
但缺点就是,无法避免攻击的,比如:UDP Flood攻击…… UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。 基于上面的优缺点,那么: 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 ………… 什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……
跨局域网通讯
基于MAC地址方式,只是能够实现到我们在一个网段里通讯,一个数据包在发送到目标地址之前会进行子网掩码,算出是否在一个网段里,如果是同一个网段直接广播方式传输数据即可接收到,否则并不能让我们夸局域网通信,这里还需要涉及到网关,要包数据包发送出外网就必须把包交给网关,网关就好比一个代理人,网关接受到我们要发送出去的包之后,会将包发送给对方的网关,对方的网关将包拆开之后发现头部的信息来源以及接受的目标地址是谁,从而发送给接收者。
所以IP地址加MAC地址就是标识你全世界的这台机器在哪儿,有了这些基础之后并不够,这些基础只能让我们找到机器,假如现在要进行通讯服务,是基于一个软件上的互相的通讯,我要给对方发送信息,假如对方的机器上运行着无数的软件,那么这个包是不知道是哪个客户端的软件发来的数据,为了解决这一问题,在传输层里又出现了TCP/UDP 协议,这两者协议都是基于端口工作的,每个应用程序都对应着唯一的端口号,目前最大端口号为65536,超出范围的是无效端口,1024之前的端口号都是操作系统所用,超过1024之后的都是应用程序在用,
应用层协议开发者可以自己定义,也可以遵循通用的标准,我们的软件应用程序,都运行在应用层,归根结底应用层是产生数据的,产生数据之后会经过这五层协议,发送给接收者, 在应用层会封装头部信息,原MAC地址/目标MAC地址 ,到了传输层封装原端口/目标端口,到了网络层封原IP/目标IP,最后到了数据链路层封了原MAC/目标MAC,最后到了物理层将这些数据包打包成了电信号转换成二进制高低电平,发送给接收方,对方物理层接受到,到了数据链路层之后这些电信号进行成组,解包得到MAC地址,找到MAC地址之后,再往上一层网络层找,找到IP地址,之后到传输层找到端口对应产生数据的应用程序,最后到了对方的应用层,对方得到传输过去的数据。
主机上网过程

域名
Internet采用层次树状结构的命名方法,它使得任何一个连接在Internet上的主机或路由器都有一个唯一的层次结构的名字,即域名(Domain name)。所谓域(Domain)是域名空间中的一个子树。这个域的名字就是这个子树顶部结点的域名,一个域本身又可划分为若干个域(有时也称它们为子域)。例如:edu是标识教育系统的一个大的域,而tsinghua.edu和besti.edu则是edu域中的两个子域。

目前Internet顶级域名分为三大类:
-
国家顶级域名:采用ISO 3166规定。如cn表示中国,us表示美国等
-
国际顶级域名:采用int。国际性的组织可在int下注册。
-
通用顶级域名:如下表所列。
| 域名 | 组织类型 | 域名 | 组织类型 |
|---|---|---|---|
| com | 商业机构 | firm | 公司企业 |
| edu | 教育部门 | shop | 销售公司与企业 |
| gov | 政府部门 | web | 突出万维网服务单位 |
| org | 非商业组织 | arts | 突出文化艺术活动单位 |
| net | 网络服务机构 | rec | 突出逍遥娱乐活动单位 |
| mil | 美国军队组织 | info | 提供信息服务 |
| nom | 个人 |
域名DNS服务系统
在DNS中由域名服务器(DNS Server)完成域名与IP地址的转换过程,这个过程称为域名解析
域名服务器主要分为以下几个:
1.本地域名服务器
2.根域名服务器
3.授权域名服务器



认识URL
- url的组成部分(unifrom resource locator)
例如:https://www.microsoft.com/china/index.html
- https:// 这里是代表超文本传输协议,通知microsoft.com服务器显示Web页面
- www 代表一个web(万维网) 服务器;
- Microsoft.com/ 这是装有页面的服务器的域名,或站点服务器名称;
- China/ 为该服务器上的子目录,就好像我们的文件夹;
- index.html 是文件夹中的html文件(网页)。
HTTP是如何工作的?

HTTP客户端启动TCP连接(创建套接字) 到服务器, 端口 80。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问,http 报文(应用层协议报文) 在浏览器 (http client) 和Web服务器(http server)之间进行交换。
客户端套接字。客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息,服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。

持久性与非持久性
非持久连接和持久连接 HTTP既可以使用非持久连接(non-persistent connection),也可以使用持久连接(persistent connection)。HTTP/1.0使用非持久连接,HTTP/1.1默认使用持久连接。
- 非持久性链接:
非持久连接情况下从服务器到客户传送一个Web页面的步骤。假设该页面由1个基本HTML文件和10个JPEG图像构成,而且所有这些对象都存放在同一台服务器主机中。 再假设该基本HTML文件的URL为:
http://www.besti.edu.cn/somepath/index.html
下面是具体步骤:
1.HTTP客户初始化一个与服务器主机www.besti.edu.cn中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。 2.HTTP客户经由与TCP连接相关联的本地套接字发出一个HTTP请求消息。这个消息中包含路径名/somepath/index.html。
2.HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index.html,经由同一个套接字发出包含该对象的响应消息。
3.HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。
4.HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件,加以分析后发现其中有10个JPEG对象的引用。 6.给每一个引用到的JPEG对象重复步骤1-4。
- 持久性链接
持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送,通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。
持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。
HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。

HTTP规范1.0[RPcl945]和HTTP1.1 [RFC 2616]定义了HTTP消息的格式。HTTP消息分为请求消息和响应消息两类。 68}
HTTP请求消息:
1 | GET /somedir/page.html HTTP/1.1 |
HTTP请求标准格式 Request

附属体不在GET方法中使用,而是在POST方法中使用。
POST方法适用于需由用户填写表单的场合,如往google搜索引擎中填入待搜索的词。用户提交表单后,
HEAD方法与GET方法类似,两者的差别只是服务器在对HEAD方法的响应消息中去掉了所请求的对象,其他内容则与对GET方法的响应消息一样。HEAD方法通常用于HTTP服务器软件开发人员进行调试。
POST方法示例
1 | POST /HTTP/1.1 |

HTTP响应消息
1 | HTTP/1.1 200 OK |
HTTP响应标准格式 Response

响应报文的开始行是状态行,状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语。
HTTP常用状态码
1xx 表示通知信息的,如请求收到了或正在进行处理。
2xx 表示成功,如接受或知道了。
3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
4xx 表示客户的差错,如请求中有错误的语法或不能完成。
5xx 表示服务器的差错,如服务器失效无法完成请求。
●200 OK;请求成功,所请求信息在响应消息中返回。
●301 Moved Permanently:所请求的对象己永久性迁移;
新的URL在本响应消息的Location:头部指出。客户软件会自动请求这个新的URL。
●400 Bad Request;表示服务器无法理解相应请求的普通错误的状态码
●404 Not Found:服务器上不存在所请求的文档。
●HTTP Version Not Support:服务器不支持所请求的HTTP协议版本。
三次握手
