指引:
重点:
一、五层协议的体系结构
1)应用层( dns,http ) DNS解析域名为IP并发送http地址
在应用层有: 包括 FTP、HTTP、TELNET、SMTP等协议
2)传输层( tcp,udp ) 建立tcp连接(三次握手)
在传输层中有 TCP协议 与 UDP协议。UDP包括DNS、TFTP等协议
3)网络层( IP,ARP ) IP寻址
在网络层有: IP协议、ICMP协议、和BOOTP协议。
4)数据链路层(PPP) 封装成帧
在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。
ARP协议、RARP协议
ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行
5)物理层
1、mac地址在数据链路层
MAC地址就是在媒体接入层上使用的地址,也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。MAC地址与网络无关,也即无论将带有这个地址的硬件(如网卡、集线器、路由器等)接入到网络的何处,都有相同的MAC地址,它由厂商写在网卡的BIOS里。
MAC地址通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D 就是一个MAC地址,其中前6位16进制数 08:00:20 代表网络硬件制造商的编号,它由IEEE机构分配,而后3位16进制数 0A:8C:6D 代表该制造商所制造的某个网络产品(如网卡)的系列号。每个网络制造商必须确保它所制造的每个以太网设备都具有相同的前三字节以及不同的后三个字节。这样就可保证世界上每个以太网设备都具有唯一的MAC地址。
ARP (Address Resolution Protocol) 是一种用来解析地址的协议,它可以根据 IP 地址反查出对应的 MAC 地址。
2、UDP
用户数据报协议 (User Datagram Protocol),是一个简单的面向数据报的传输协议。
它的特点如下:
-
UDP 缺乏可靠性。UDP 本身不提供确认序号,序列号,超时重传等机制。UDP 数据报可能在网络中被复制,被重新排序。即 UDP 不保证数据报会到达其最终目的地,也不保证各个数据报的先后顺序,也不保证每个数据报只到达一次。
-
UDP 是面向无连接的。UDP 客户端和服务器之前不必存在长期的关系。UDP 发送数据报之前也不需要经过握手创建连接的过程。
-
UDP 不仅支持单播,还支持多播和广播。
-
UDP 头部开销小,它包含以下几个数据:
-
两个十六位的端口号,分别是源端口和目的端口。
-
整个数据报文的长度。
-
整个数据报文的校验和,用于发现头部信息和数据中的错误
-
3、TCP
TCP (Transmission Control Protocol, 传输控制协议) 是一种面向连接的、可靠的、基于字节流服务的传输层通信协议
* 在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP
* TCP 使用校验和,确认和重传机制来保证可靠传输
* TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复
* TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制
</div>
二、http
1、TCP/IP模型
引入一个
TCP/IP的概念,TCP处于传输层,IP属于网络层,而这里所探究的HTTP,实际上就是基于TCP/IP协议开发的,TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。概述
HTTP协议为无差错的协议,按序传输,未分段的数据流,这其实说的就是TCP协议。
http是基于TCP/IP协议的应用层协议,用于客户端和服务器之间的通信。HTTP是一个无状态的协议。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
2. 发送一条HTTP请求会发生什么?
当你在浏览器输入一个URL的时候,有没有想过这其中发生了什么?
-
1、获取主机名,例如:www.nowamagic.net/academy/
-
2、通过DNS获取服务器IP
-
3、获取端口,默认是80端口
-
4、连接到 121.199.24.143:80服务器
-
5、通过TCP信道发送一个HTTP请求
-
6、服务器读取一个HTTP请求
-
7、服务器查找所需资源并通过TCP信道返回资源
-
8、关闭TCP连接
3.HTTPS = HTTP+加密+认证+完整性保护
三、跨域
跨域产生的原因,是因为受到同源策略的限制。同源策略指的是协议、域名、端口不相同。这里我将介绍两种跨域的方式:JSONP、CORS(跨域资源共享)
两个方式的比较:
JSONP只支持GET请求,CORS支持所有类型的HTTP请求。
JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。
1、 JSONP
原理:动态插入script标签(因为script标签不受同源策略的限制),通过插入script标签引入一个js文件,这个js文件加载成功之后会执行我们在url中指定的回调函数,并且会把我们需要的json数据作为参数传入。
2、 CORS
原理 :服务器在响应头中设置相应的选项,浏览器如果支持这种方法的话就会将这种跨站资源请求视为合法,进而获取资源。
实现 CORS分为简单请求和复杂请求,
简单请求指的是:
(1)请求方法是以下三种方法之一:HEAD、GET、POST;
(2)HTTP的头信息不超出以下几种字段:Accept、Accept-Language、Content-Language、Last-Event-ID、 Content-Type(只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain)。
其他情况就是非简单请求了。
四、长连接与短连接
1、什么时候用长连接,短连接?
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。
总之,长连接和短连接的选择要视情况而定。
2、本质
HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
IP协议主要解决网络路由和寻址问题,
TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。
3. Http长连接和短连接
在HTTP/1.0中,默认使用的是短连接。但从 HTTP/1.1起,默认使用长连接。
长连接: 客户端和服务端建立连接后不进行断开,之后客户端再次访问这个服务器上的内容时,继续使用这一条连接通道。
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
HTTP也可以建立长连接,使用Connection:keep-alive
短连接: 客户端和服务端建立连接,发送完数据后立马断开连接。下次要取数据,需要再次建立连接。
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
4 Http长连接和TCP长连接的区别
Http长连接 和 TCP长连接的区别在于: TCP 的长连接需要自己去维护一套心跳策略。,而Http只需要在请求头加入keep-alive:true即可实现长连接。