• B/S与C/S架构、B/S架构协议


    软件有三大类型

      单机类型、CS类型(Outlook、QQ、大型游戏)、BS类型

    BS结构中的协议

      在BS结构中,首先使用到DNS协议;网络传输部分使用TCP/IP参考模型,其中网络接入层没有相应协议,网际互联层是IP协议,传输层是TCP协议,应用层是HTTP协议(TCP/IP协议并不能具体工作,就像是程序中的接口,而Socket是TCP/IP协议的一个具体实现);另外在HTTP协议的上层还有Servlet标准。

    DNS协议

      DNS协议的作用是将域名解析为IP,我们把域名发过去它就可以给我们返回相应的IP,在Windows中可以使用nslookup命令来查看DNS解析的结果(域名的所有者将域名解析到对应的IP上,这样DNS服务器就能查找到)。
      世界各地有很多DNS服务器,ISP会给我们提供默认的DNS服务器,也有一些大型公用的DNS服务器可以使用,比如Google的8.8.8.8和国内的114.114.114.114。
      我们直接访问的DNS服务器叫本地DSN服务器,它本身也没有域名和IP的对应关系,在我们发出请求的时候它会从主DNS服务器获取然后保存到缓存中,下次再有相同的域名请求时直接从缓存中获取就可以了。

      本地DSN服务器的配置:
      在C:windowssystem32driversetchosts文件中,设置格式是“IP+空格+域名”,一行一条记录(空格可以有多个),比如:127.0.0.1 localhost
      本机在解析域名时首先会从hosts文件中查找,如果可以查找到就直接使用,如果找不到才会从DNS服务器获取。
      hosts文件也可能会被恶意程序修改,这种情况可能会带来严重的后果。在Windows 7中hosts文件默认是只读文件。

      Windows 7设置DNS服务器,设置方法是从控制面板中找到所使用的连接并从属性中打开TCP/IPv4属性设置页进行设置,如图:


    有时候可能出现浏览器上不了网,而直接使用IP连接的程序(如QQ)可以联网,这时很可能就是DNS出了问题,可以尝试设置DNS服务器来解决问题。

    BS结构网络传输的分解有两种方式

    OSI参考模型、TCP/IP参考模型

    OSI

    TCP/IP 

    应用层 应用层
    表示层
    会话层
    传输层 传输层
    网络层 网际互联层
    数据链路层 网络接入层
    物理层

    TCP/IP协议

      TCP/IP协议通常放在一起来说,其实它们是两个不同的协议。
      TCP在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。
      要理解这个过程首先需要理解TCP中的两个序号和三个标志位的含义:
      seq:sequence number的缩写,表示所传数据的序号。TCP传输时每一个字节都有一个序号,发送数据时会将数据的第一个序号发送给对方,接收方会按序号检查是否接收完整了,如果没接收完整就需要重新传送,这样就可以保证数据的完整性。
      ack:acknoledgement number的缩写,表示确认号。接收端用它来给发送端反馈已经成功接收到数据,它的值为希望接收的下一个数据包起始序号。
      ACK:确认位,只有ACK=1的时候ack才起作用。正常通信时ACK为1,第一次发起请求时因为没有需要确认接收的数据所以ACK为0。
      SYN:同步位,用于在建立连接时同步序号。刚开始建立连接时并没有历史接收的数据,所以ack也就没办法设置,这时按照正常的机制就无法运行了,SYN的作用就是来解决这个问题的,当接收端接收到SYN=1的报文时就会直接将ack设置为接收到的seq+1的值,注意这里的值并不是校验后设置的,而是根据SYN直接设置的,这样正常的机制就可以运行了,所以SYN叫同步位。需要注意的是,SYN会在前两次握手时都为1,这是因为通信的双方的ack都需要设置一个初始值。
      FIN:终止位,用来在数据传输完毕后释放连接。

      这里的四次挥手中画的是客户端提出的终止连接,在实际传输过程中也有可能是服务端提出终止连接,它们的处理过程都是一样的。
      三次握手中前两次可以保证服务端可以正确接收并返回请求,后两次可以保证客户端可以正确接收并返回请求,而且在三次握手的过程中还使用SYN标志初始化了双方的ack值。四次挥手就是双方分别发送FIN标志来关闭连接并让对方确认。三次握手和四次挥手保证了连接的可靠性,不过凡事有利就有弊,这种模式也有它的缺点,首先是在传输效率上会比较低,另外三次握手的过程中客户端需要发送两次数据才可以建立连接,这种特性可能被一些别有用心的人利用,比如,发出第一次握手(并接到第二次握手)后就不回应第三次握手了,这时服务端会以为是第二次握手的数据在传输过程中丢失了,然后重新发送第二次握手,默认情况下会一直发送五次,如果发送五次后还收不到第三次握手则会丢弃请求,如果是个别这种请求当然也没什么关系,可凡事就怕一个多字,当有大量这种请求时就麻烦了,这时服务器就会浪费大量的资源甚至可能导致无法处理正常的请求,这就是DDOS攻击中的SYN Flood攻击,对于这种攻击的一种应对方法是设置第二次请求的重发次数(tcp_synack_retries),不过重发的次数太小也可能导致正常的请求中因为网络没有收到第二次握手而连接失败的情况,具体设置为多少合适,还需要根据实际情况判断,当然如果资金充足也可以使用硬防。

    SSL协议

    基于tcp上的http不安全,非法窃听者获得的请求副本里的数据是完全可读的形式
    基于tcp上的ssl上的https,非法窃听者获得的请求副本里的数据是不可读懂的形式;并不是每个请求和响应都必须安全。

    用户使用http请求受限资源 --> 容器发现受限资源配置了CONFIDENTIAL,是有传输保证的,而这个请求不是https请求;响应301重定向,要求使用https --> 浏览器使用https请求受限资源

    HTTP协议

    HTTP协议是应用层的协议,在TCP/IP协议接收到数据之后需要通过HTTP协议来解析才可以使用。
    HTTP中报文分为请求报文(request message)和响应报文(response message)两种类型,这两种类型都包括三部分:首行、头部和主体。

      请求报文 响应报文 备注
    首行 请求行 包括请求方法、URL、HTTP版本 状态行 包括HTTP版本、状态码和简短原因,原因可有可无

    首行、头部和主体以及头部的各项内容用回车换行( )分割,

    另外头部和主体之间多一个空行,也就是有两个连续的回车换行。

    头部 请求头 键值对,用冒号分割 响应头 键值对,用冒号分割
    主体 请求体 POST类型的参数 响应体 页面要显示的内容

    Servlet标准

    Servlet是J2EE标准的一部分,是Java Web开发的标准。
    通过前面的TCP/IP协议、HTTP协议已经可以得到数据了,Servlet的作用是对接收到的数据进行处理并生成要返回给客户端的结果。Servlet还需要有Servlet容器。

  • 相关阅读:
    iOS开发代码规范
    数组去重方法总结
    iOS进阶学习-网络之数据安全
    OC 动态类型,动态绑定,动态加载
    ios运行某些工程时屏幕上下出现黑边的解决办法
    流程控制和数组(关于JAVA基础注意事项)
    高级函数
    源码
    sql s2 学期的学习
    Java 学习笔记
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/9542553.html
Copyright © 2020-2023  润新知