Java网络协议

不吹不黑,上一章足足写了8页文档,不为别的,就为了在学习知识时能保持一个连贯性,将知识串起来。之前的文章将JVM与线程进程还有内存以及数据类型等都连在一起了,仔细读你会发现这些知识有很多连接关系。

今天咱们先简单唠唠计算机网络那些事。(先吃开胃菜,后面再细嗦)

网络协议:

  1. OSI模型7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

(1).应用层:即进程服务;表示层:接收数据并加/解密与转码;会话层:建立维持会话。

(2).传输层:建立TCP/UDP连接,进行传输数据,关闭TCP/UDP连接。

(3).网络层:源端数据发送到目标端,主要是IP协议网络通信的解析。

(4).数据链路层:互连设备间传数据;物理层:设备间数据传递和互连的中介设备。

  1. 为什么7层协议像上面那样介绍?因为根据TCP/IP协议簇,将7层合并为4层:应用层(合并了会话层与表示层)、传输层、网络层、数据链路层(合并了物理层)。
  2. TCP/IP协议簇4层中,每层都包含多种协议或有相应的功能:

  (1).应用层:FTP协议、 DNS协议等。

  (2).传输层:TCP协议、UDP协议。

  (3).网络层:IP协议、ICMP协议、ARP协议。

(4).链路层:组装MAC头部。

  1. 应用层FTP协议:分(服务/客户)端FTP,服端存文件,客端访问,高效,可传大文件。
  2. 应用层DNS协议:存储域名与IP映射的分布式数据库系统,DNS缓存加速网络访问。
  3. 传输层TCP协议:以字节流面向连接,传输可靠。支持拥塞控制、快速重传等网络调节。
  4. 传输层UDP协议:面向无连接,传输不可靠,可能分组丢失、重复、乱序,但实时性高。
  5. 网络层IP协议:组装数据的IP头信息,解析数据供传输层用,降低顶/底层网络耦合。
  6. 网络层ICMP协议:路由器之间传递控制信息,IP访问错误检测与回传报告机制。
  7. 网络层ARP协议:地址解析协议,根据IP地址获取物理地址,并缓存一段时间。

网络传输:HTTP请求发送与接收过程

  1. 流程如图,可以看出,服务端客户端都是发送时从上到下,接收时从下到上。

  1. 发送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请求。

  1. 接收Http请求:

(1).对应要接收的一端的路由器已剥离MAC头,网卡接收剥离后的Http请求。

(2).解析请求头的目标IP(判断IP是否匹配,是否需要更换MAC头,再跳转发送)。

(3).解析请求头的TCP数据(根据相关信息建立TCP连接)。

(4).响应/应答数据,再层层封装发送(流程如发送),响应数据如html、css、js等。

  1. 链路层(网卡)作用:数据包最后以二进制数存在内存,网卡将其转为电信号发送出去。
  2. 两点传输:在Http封装的头部再封装MAC头,用于远程传输时中转跳转来到达最终IP地址端,通过ARP协议广播获取(下一目标)MAC地址,ARP协议有缓存机制(将MAC地址缓存到交换机中),每次先查缓存,未找到时ARP广播获取。
  3. 交换机作用:当前包放入缓冲区,判断当前包的目标MAC是否在MAC地址缓存表中,不在就ARP协议广播获取,非对应可接收方会忽略广播。
  4. ARP协议问题:ARP协议广播是无状态的,攻击者可应答错误信息、也可频繁发起广播造成网络拥塞(网络拥塞后面讲)。
  5. 路由器作用:接收端的路由查寻数据包的目标MAC是否存在,是则存入缓冲中并剥离MAC头;不是则丢弃此数据包。
  6. CDN:可以用于分布式缓存系统(如DNS的缓存)、负载均衡系统、管理系统等

Http请求与TCP协议:

  1. Http是基于TCP协议的:TCP报文有源端口16位、目标端口16位、序号(解决乱序)、状态位(SYN:发起连接,ACK:回复,RST:重连接,FIN:结束连接)、窗口大小(做流量控制,标明处理能力)。
  2. Http请求长度>MSS,TCP传输会将其拆解为多个数据块发送,每块都有TCP头信息(MSS:除去IP与TCP头,一个网络包最大数据容纳长度)。
  3. UDP协议:可容忍丢包、低延迟、可发送大的数据包;DNS基于UDP协议。
  4. TCP协议:支持错误重传、支持可靠传输、支持流量/拥塞控制、Http基于TCP协议。
  5. 地址分类: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:

  1. Cookie是浏览器发出请求的身份证,主要存储了sessionID用于登录验证等。
  2. Cookie不可跨网站:访问网站时,浏览器只会把此网站颁发的对应Cookie带去。
  3. Cookie设置有效期,正数(时间内可用,无论是否关网页)、负数(此次会话不写入磁盘)、0(删除此Cookie)、Cookie的MaxAge默认值为-1,即1次会话。
  4. Cookie存储结构Map<String,String>:名相同就值覆盖,Cookie文件存在于本地
  5. 对于一级域名相同,二级不同的2个网页的2个Cookie不共用,可通过setDaomain()设置Cookie,还可设置仅指定访问链接可以获取。
  6. Http不安全,Cookie设secure=true,浏览器通过Https传输(后面讲网络安全)。
  7. Cookie有效时间是累计制(有效时间只会越来越少),用于登录过期重新登录。

会话跟踪—Session:

  1. Session存在服务器内存中,且可存对象,有效时间是刷新制(每次访问就重置时间)。
  2. 服务器把超过超时时间的session删除,防止过多会内存溢出,默认有效时间30min。
  3. 服务器实现1个session服务1个用户浏览器:服务器给用户浏览器一个Cookie并携带session的id,用户请求携带此Cookie,服务器在相应session中验证。
  4. Cookie被禁Session仍可用:手动将session的id放到请求头中,则可用。
  5. Session还用于验证码比较,session存在内存中,消耗大,且仅在当前跨域名内有效。
  6. Session和Cookie应联合使用,既在会话请求中存在又在磁盘上有重要数据。
  7. 分布式session保持一致方式: 

(1).每个服务分得部分session,共同组成完整数据;适用于对稳定性要求不高的业务,优点是简单,无额外开销;缺点是宕机会丢失部分数据,依赖负载均衡。

(2).集群上使用缓存Redis存取对应Session实现Session共享。优点是可靠性高,减少资源开销;缺点是实现复杂,配置较多。适用于服务器较多,要求高可用性的场景(常用)。

(3).基于Cookie管理,每次请求将SessionId放到cookie中传递给服务端。优点是无需额外存储/配置;缺点是不安全,cookie数量与长度有限。

  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值