计算机网络的五层架构
应用层(DNS、HTTP、FTP)
(表示层)
(会话层)
传输层(TCP、UDP)
网络层(IP)
数据链路层(ARP)
物理层(网关、光纤等物理设备)(MAC地址)
层与层之间合作完成任务的流程如下图
一、应用层
1、HTTP协议与HTTPS协议
1)HTTP协议
HTTP是一个基于TCP/IP通信协议来传递数据的协议。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
从上面的URL可以看出,一个完整的URL包括以下几部分:
1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
HTTP的主要特点:
1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5、支持B/S及C/S模式。
HTTP协议针对各主机间的IP地址,HTTP报文包括请求报文和响应报文,
请求报文里包括请求头(请求方法、请求URL、请求版本号)请求头、请求体等信息;
响应报文里包括响应行(版本、状态码、原因短语)响应头、响应体等信息
(原文:https://www.cnblogs.com/ranyonsue/p/5984001.html)
2)HTTPS协议
HTTPS需要一个公认的第三方提供证书,是添加了非对称加密机制和认证机制的HTTP
HTTP通信时使用明文,并且不验证通信方身份,无法验证报文的完整性
HTTP混合SSL/TLS就形成了HTTPS协议
①对称加密与非对称加密
对称加密:加密和解密时使用同一个公钥
非对称加密:客户端向服务器索要公钥进行加密,然后将加密后的密文传送给服务器,服务器再用私钥进行解密
②GET请求、POST请求
a).GET请求不安全,因为GET请求的数据明文会出现在URL中,而POST则包装在请求体中
b).GET请求受限于URL的长度所以数据量比较小
③会话技术:Cookie与Session
会话技术:用户打开网页,浏览一些东西,做了一些操作,最后关闭网页的过程就是一次会话。
a).Cookie在客户端保持状态,Session在服务器端保持状态
b).Cookie存在安全隐患,因为Cookie在客户端上可见,可以被人利用进行Cookie欺骗,而Session因为在服务器上因此比较安全
c).Cookie存储量比较小,Session存储量较大
④状态码
1XX:请求处理中
2XX:请求成功,请求被成功处理 (200:OK)
3XX:请求重定向,要完成请求需要进一步处理(301:永久性转移,302:暂时性转移)
4XX:客户端错误,请求不合法(400:请求语法有问题,403:拒绝请求,404:要访问的页面不存在)
5XX:服务端错误(500:服务器内部错误,503:服务暂时不可用)
2、DNS域名解析
真正的URL是32位二进制数字,分为4组,每组8位,每一组可以代表一个0-255的数,这不便于我们记忆。因此我们使用具体的英文来记忆网址,而DNS就是负责将英文字母的常用网址域名翻译成对应的数字域名的协议
二、传输层
传输层的目的是搭建起软件端口到端口的连接
1、TCP
①三次握手
握手的过程其实是在发送TCP报文
TCP连接过程:
我要和你建立连接(客户端)
你真的要和我建立链接吗?(服务端)
是的,我要和你建立连接(客户端)
为什么不四次握手?
因为永远无法保证连接的100%可靠,三次就够了,四次是多余的
为什么不两次握手?
因为网络存在超时重传的机制,比如我发了一条消息但是被阻塞了,服务器没有给我回复。那么我会再发一条消息,然后服务器回复了我这条消息,之后我们断开了连接,但是此时第一条消息突然到达了服务器,然后又建立起来了连接就非常的不合理。
②四次挥手
TCP断开过程:
我要和你断开连接了(客户端)
好的断吧(服务端)
我也要和你断开连接了(服务端)
好的断吧(客户端)
为什么不是三次挥手?
因为建立连接后,客户端与服务端两边既是发送方也是接收方,需要彼此确认信息;另外服务端还需要一段时间处理数据,因此没办法合并第二和第三步步骤
为什么最后客户端要等待一个时间?
因为如果客户端直接关闭,可能服务器端最后发送的消息没有发出去,他会再次发送一条,但是这个时候客户端已经关闭了,就无法完成整个过程。
2、UDP
UDP不需要建立连接,类似于发短信只管发不管对方有没有收到,因此是一种不可靠的协议。UDP适用于每次只传送少量数据并且对于可靠性要求不高的场合,如网络游戏、视频会议等。
3、TCP与UDP的对比
①TCP类似于打电话,需要连接,UDP类似于发短信,不需要连接
②TCP比较可靠,类似于VIP服务,丢包了会重新发送,数据打乱了也会进行重排,UDP不会
③TCP面向字节流,UDP针对报文
④TCP有拥塞控制机制,会事先考察传送目的地的数据情况,如果数据拥塞则会暂缓处理,UDP不会,UDP不管目的地数据情况如何,都会将数据发送过去
⑤TCP首部的信息较多,UDP的比较少
TCP 如何保证可靠性?
1 校验和
TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分
2.确认应答与序列号
TCP将每个字节的数据都进行了编号,这就是序列号。
序列号的作用:
a、保证可靠性(当接收到的数据总少了某个序号的数据时,能马上知道)
b、保证数据的按序到达
c、提高效率,可实现多次发送,一次确认
d、去除重复数据
3超时重传
当报文发出后在一定的时间内未收到接收方的确认,发送方就会进行重传
4连接管理
连接管理机制即TCP建立连接时的三次握手和断开连接时的四次挥手。
5 流量控制
TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制叫做流量控制
6 拥塞控制:
TCP引入慢启动机制,先发出少量数据,就像探路一样,先摸清当前的网络拥堵状态后,再决定按照多大的速度传送数据。
TCP应用场景:
效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。
UDP应用场景:
效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。
三、网络层
1、IP协议
IP协议(Internet Protocol)用于实现大规模、异构网络的互联互通并且可以分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。
上图为IP数据报的格式
2、子网掩码
随着互联网的发展,越来越多的网络产生,有的网络多则几百台,有的只有区区几台,这样就浪费了很多IP地址,所以要划分子网,子网掩码的作用就是将某个IP地址划分成网络地址和主机地址两部分,从而区分出设备所在的网络
通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是,将计算机十进制的IP地址和子网掩码转换为二进制的形式,然后进行二进制“与”(AND)计算(全1则得1,不全1则得0),如果得出的结果是相同的,那么这两台计算机就属于同一网段
四、数据链路层
1、MAC地址
MAC地址(Media Access Control Address)就是物理地址,每个网卡在出厂时都有唯一的一个48位MAC号码,类似于人的身份证,这个号码是每个厂商生产网卡时烧录进去的,由IEEE所监制。
2、ARP协议
ARP协议(Address Resolution Protocol)负责将IP地址翻译成实际的MAC地址,这样就能够建立设备与设备之间的连接了。实际工作过程中,它根据路由表上记录的MAC地址寻找对应的设备,如果路由表上没有,则会进行广播从而获得目标设备的MAC地址并记录在路由表中。
五、从输入网址到获得页面的整个过程
1、浏览器查询 DNS,获取域名对应的IP地址
2、浏览器获得域名对应的IP地址以后,浏览器向服务器发起TCP链接请求,发起三次握手
3、TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求,表明想要获得什么资源
4、服务器接收到这个请求,并根据URL找到对应的资源,映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器
5、浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源
6、浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。