不吹不黑,上一章足足写了8页文档,不为别的,就为了在学习知识时能保持一个连贯性,将知识串起来。之前的文章将JVM与线程进程还有内存以及数据类型等都连在一起了,仔细读你会发现这些知识有很多连接关系。
今天咱们先简单唠唠计算机网络那些事。(先吃开胃菜,后面再细嗦)
网络协议:
- OSI模型7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
(1).应用层:即进程服务;表示层:接收数据并加/解密与转码;会话层:建立维持会话。
(2).传输层:建立TCP/UDP连接,进行传输数据,关闭TCP/UDP连接。
(3).网络层:源端数据发送到目标端,主要是IP协议网络通信的解析。
(4).数据链路层:互连设备间传数据;物理层:设备间数据传递和互连的中介设备。
- 为什么7层协议像上面那样介绍?因为根据TCP/IP协议簇,将7层合并为4层:应用层(合并了会话层与表示层)、传输层、网络层、数据链路层(合并了物理层)。
- TCP/IP协议簇4层中,每层都包含多种协议或有相应的功能:
(1).应用层:FTP协议、 DNS协议等。
(2).传输层:TCP协议、UDP协议。
(3).网络层:IP协议、ICMP协议、ARP协议。
(4).链路层:组装MAC头部。
- 应用层FTP协议:分(服务/客户)端FTP,服端存文件,客端访问,高效,可传大文件。
- 应用层DNS协议:存储域名与IP映射的分布式数据库系统,DNS缓存加速网络访问。
- 传输层TCP协议:以字节流面向连接,传输可靠。支持拥塞控制、快速重传等网络调节。
- 传输层UDP协议:面向无连接,传输不可靠,可能分组丢失、重复、乱序,但实时性高。
- 网络层IP协议:组装数据的IP头信息,解析数据供传输层用,降低顶/底层网络耦合。
- 网络层ICMP协议:路由器之间传递控制信息,IP访问错误检测与回传报告机制。
- 网络层ARP协议:地址解析协议,根据IP地址获取物理地址,并缓存一段时间。
网络传输:HTTP请求发送与接收过程
- 流程如图,可以看出,服务端客户端都是发送时从上到下,接收时从下到上。
- 发送Http请求:
(1).浏览器把Url解析为http报(应用层的DNS解析Url域名,递归遍历树结构获IP。注意这里说的树是字典树,如www.baidu.com网址,.com是根,.baidu是其子级;如此一来,以.com结尾的网址会形成字典树结构),每次先在缓存CDN中查IP,没找到IP才DNS解析获取IP,之后放入CDN缓存。
(2).通过TCP层将TCP连接传输相关信息组装到http报头部,包含握手信息。
(3).通过IP层将(本机源ip和Http报解析获的ip)组装到http头部。
(4).通过链路层将MAC头(源地址+目标地址)组装http头,网卡发送最终Http请求。
- 接收Http请求:
(1).对应要接收的一端的路由器已剥离MAC头,网卡接收剥离后的Http请求。
(2).解析请求头的目标IP(判断IP是否匹配,是否需要更换MAC头,再跳转发送)。
(3).解析请求头的TCP数据(根据相关信息建立TCP连接)。
(4).响应/应答数据,再层层封装发送(流程如发送),响应数据如html、css、js等。
- 链路层(网卡)作用:数据包最后以二进制数存在内存,网卡将其转为电信号发送出去。
- 两点传输:在Http封装的头部再封装MAC头,用于远程传输时中转跳转来到达最终IP地址端,通过ARP协议广播获取(下一目标)MAC地址,ARP协议有缓存机制(将MAC地址缓存到交换机中),每次先查缓存,未找到时ARP广播获取。
- 交换机作用:当前包放入缓冲区,判断当前包的目标MAC是否在MAC地址缓存表中,不在就ARP协议广播获取,非对应可接收方会忽略广播。
- ARP协议问题:ARP协议广播是无状态的,攻击者可应答错误信息、也可频繁发起广播造成网络拥塞(网络拥塞后面讲)。
- 路由器作用:接收端的路由查寻数据包的目标MAC是否存在,是则存入缓冲中并剥离MAC头;不是则丢弃此数据包。
- CDN:可以用于分布式缓存系统(如DNS的缓存)、负载均衡系统、管理系统等
Http请求与TCP协议:
- Http是基于TCP协议的:TCP报文有源端口16位、目标端口16位、序号(解决乱序)、状态位(SYN:发起连接,ACK:回复,RST:重连接,FIN:结束连接)、窗口大小(做流量控制,标明处理能力)。
- Http请求长度>MSS,TCP传输会将其拆解为多个数据块发送,每块都有TCP头信息(MSS:除去IP与TCP头,一个网络包最大数据容纳长度)。
- UDP协议:可容忍丢包、低延迟、可发送大的数据包;DNS基于UDP协议。
- TCP协议:支持错误重传、支持可靠传输、支持流量/拥塞控制、Http基于TCP协议。
- 地址分类:A类1.0.0.0-126.255.255.255 、B类128.0.0.0-191.255.255.255、C类192.0.0.0-223.255.255.255、D类224.0.0.0-239.255.255.255、E类240.0.0.0 - 255.255.255.255
会话跟踪—Cookie:
- Cookie是浏览器发出请求的身份证,主要存储了sessionID用于登录验证等。
- Cookie不可跨网站:访问网站时,浏览器只会把此网站颁发的对应Cookie带去。
- Cookie设置有效期,正数(时间内可用,无论是否关网页)、负数(此次会话不写入磁盘)、0(删除此Cookie)、Cookie的MaxAge默认值为-1,即1次会话。
- Cookie存储结构Map<String,String>:名相同就值覆盖,Cookie文件存在于本地中。
- 对于一级域名相同,二级不同的2个网页的2个Cookie不共用,可通过setDaomain()设置Cookie,还可设置仅指定访问链接可以获取。
- Http不安全,Cookie设secure=true,浏览器通过Https传输(后面讲网络安全)。
- Cookie有效时间是累计制(有效时间只会越来越少),用于登录过期重新登录。
会话跟踪—Session:
- Session存在服务器内存中,且可存对象,有效时间是刷新制(每次访问就重置时间)。
- 服务器把超过超时时间的session删除,防止过多会内存溢出,默认有效时间30min。
- 服务器实现1个session服务1个用户浏览器:服务器给用户浏览器一个Cookie并携带session的id,用户请求携带此Cookie,服务器在相应session中验证。
- Cookie被禁Session仍可用:手动将session的id放到请求头中,则可用。
- Session还用于验证码比较,session存在内存中,消耗大,且仅在当前跨域名内有效。
- Session和Cookie应联合使用,既在会话请求中存在又在磁盘上有重要数据。
- 分布式session保持一致方式:
(1).每个服务分得部分session,共同组成完整数据;适用于对稳定性要求不高的业务,优点是简单,无额外开销;缺点是宕机会java网络基础与协议丢失部分数据,依赖负载均衡。
(2).集群上使用缓存Redis存取对应Session实现Session共享。优点是可靠性高,减少资源开销;缺点是实现复杂,配置较多。适用于服务器较多,要求高可用性的场景(常用)。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/18494.html