OSI七层网络模型
为啥需要协议?没有协议,各个电脑厂商,比如IBM、苹果啥的,都弄自己的协议,结果就苹果电脑和苹果电脑自己可以通信,和IBM电脑就不可以通信,这不是尴尬么。所以搞一个国际通行的协议,大家都按照这个来,所有电脑都可以通信
OSI七层模型,是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。TCP/IP四层模型,数据链路层、网络层、传输层、应用层。
1)物理层(网线,光缆,电脑连接起来并且传输电信号)
2)数据链路层 (数据格式定义和解析) 定义电信号的格式和含义(这样才能将电信号解析出来)
每台电脑要往另外一台电脑发送数据,一堆0/1电路信号,封装成数据包,包含头和数据,头里包含了从哪儿来到哪儿去
3)网络层 ip协议(子网和局域网的网络划分(其中包括网卡,ip,mac地址的关系))
域名和ip的解析,一个ip地址对应着一个mac地址
ip地址 -> mac地址 -> 交换机 -> 路由器 -> ip地址 -> mac地址 -> 交换机的方式来通过路由器进行通信。
4)传输层 udp , tcp 端口监听 , udp和tcp都是传输层的协议,作用就是在数据包里加入端口号,可以通过端口号进行点对点的通信了
网络层,是基于ip协议,进行主机和主机间的寻址和通信的,然后传输层,其实是建立某个主机的某个端口
因为一个主机上游很多程序,程序有指定不同端口
5)应用层 http 协议
通过传输层的tcp协议可以传输数据,但是人家收到数据之后,怎么来解释,
数据解析出来 展示在页面上
4层:数据链路层(以太网协议),网络层(ip协议),传输层(tcp协议),应用层(http协议)
域名访问流程
TCP三次握手
为啥是三次而不是二次或者四次呢
双向互通的确认:
0.第一次服务端确认客户端是否能发送请求(客户端给服务端发送ack,表示客户端可以发送消息)
1.第二次握手是客户端确认服务端是否能接收请求和发送请求(服务端接收后,服务端给客户端回应发送ack,表示服务端能接收和发送消息)
2.第三次握手是服务端确认客户端是否能接收请求(客户端接收到服务端后再次发送ack,表示客户端能接收消息)
这样经过三次握手后 服务端和客户端 均表示了 发送和接收消息的能力,就可以正式开始通信 所以这个流程不是两次也不是四次,就正好三次就够了
socket 属于 传输层 tcp http 属于应用层
http 1.0要指定keep-alive来开启持久连接,默认是短连接,就是浏览器每次请求都要重新建立一次tcp连接,完事儿了就释放tcp连接。
早期的网页都很low,没啥东西,就一点文字,就用这个没问题。但是现在,一个网页打开之后,还要加载大量的图片、css、js,这就坑爹了,发送多次请求。
http 1.1默认支持长连接,就是说,浏览器打开一个网页之后,底层的tcp连接就保持着,不会立马断开,之后加载css、js之类的请求,都会基于这个tcp连接来走。http 1.1还支持host头,也就可以支持虚拟主机;而且对断点续传有支持。
http 2.0,支持多路复用,基于一个tcp连接并行发送多个请求以及接收响应,解决了http 1.1对同一时间同一个域名的请求有限制的问题。二进制分帧,将传输数据拆分为更小的帧(数据包),frame(数据包,帧),提高了性能,实现低延迟高吞吐。