网络通信及http协议

上部分:网络通信必须要弄懂 ==“一个主机,一个网络”==

  1. 何谓一个主机?一个网络?
    也就是你的电脑。
    与主机相关的有网线、检查网卡是否装好、IP/tcp协议是否装好。这些设置都是你的电脑通信的必备条件。
    和其他电脑通信的结果,将是产生一个网络。和你附近的电脑通信会产生局域网,和距离你比较远的地方会产生广域网。

  2. 作为一个主机,想要和其他电脑通信,如图所示还得需要IP地址、子网掩码、网关地址、dns服务器地址、备用dns服务器地址。

wqerwfhghgjghjg.PNG

下面我会把它们是干什么的 细细道来。
* IP地址:不管是局域网还是广域网,个人电脑都需要IP地址,它就是你在网络中的‘良民证’。
* 网关:
到这里每台电脑有了IP地址,它们之间可以互相通信,但是这样通信会有什么问题?处于很远的电脑可能就联系不上,或者全球的电脑太多,IP地址不够分了。
怎么办?我们就想到把一些相近的电脑划在一起,形成一个局域网,共用一个IP地址。就像农村里,住的近的被划成一个村落,如果和外面的人通信,可以使用一个邮箱一样。
那么这样一个局域网只使用一个IP地址,局域网内部的电脑通过这个IP地址和局域网外的电脑通信。这个时候的IP地址我们称之为网关。
* 子网掩码:
有了网关可以和局域网外的电脑通信,网关的IP地址不是随便选择的的。它必须和局域网的其他电脑处于同一网段。
这里出现了一个网段的概念:比如192.168.0.1和192.168.0.198处于同一网段。也可能不处于同一网段。这里就要引出另一概念:子网掩码。
同样是这两个IP地址,192.168.0.1的子网掩码为255.255.255.0, 192.168.0.198的子网掩码为255.255.0.0,那么它们就不处于同一网段。(更加详细的解释可以参考子网掩码的知识)
* dns服务器地址:有了网关之后,可以和局域网外的电脑通信,但是世界上电脑数也数不清这么多,哪有那么多的时间可以集中它们的IP地址,怎么办?
于是,想出了域名来代替IP地址,因为域名相对而言更加好记。而域名转换成IP地址的服务就由dns服务器来执行。没有dns服务器,域名就解析不成正确的IP地址,也就访问不到相对应的网站。
dns服务器不一定需要在同一个局域网内,只要ping的通,就可以使用dns服务。

  • 可以使用的dos命令:ping、nslookup(查看dns服务)

网络的基础:tcp/ip协议族

可以认为tcp/ip是在IP协议的通信过程中,使用到的协议族的统称。tcp/ip协议族里最重要的一点就是分层。tcp/ip协议族按层次分别是应用层传输层网络层数据链路层

搞web要熟悉掌握http协议,而与http协议关系密切的协议有:IP、TCP、DNS 这个三个协议。

  • IP协议:几乎所有的网络系统都要用到IP协议,IP协议包含IP地址和mac地址。
    如果只知道某个服务器的IP地址,而不知道它的mac地址,数据包是传送不到这个服务器的。

    • IP间的通信依赖mac地址(以太网的通信最后都要依赖mac地址)。知道了目的地址的IP地址,我们会通过ARP协议解析出这个IP地址对应的mac地址。
    • 如果源主机和目的主机不在一个网络内, ARP请求将由路由器转发至其它网络。如果能找到目的主机,就将此路由器的MAC地址当作目的主机的网络地址发给源主机,以后源主机和目的主机之间的信息交换都要经过此路由器,这个路由器就被称作ARP代理。
  • TCP协议:三次握手确保数据能到达目标

  • DNS协议:解析域名到IP地址的协议。

在使用http协议通信的过程中,客户端发送的请求到服务器的流程是这样的:
http协议–> DNS协议–> TCP协议 –> IP协议(包含IP地址和mac地址) –> TCP协议 –> http协议;
上面是请求到达服务器的过程,响应的流程类似。

下部分:http1.1版本介绍

可以说web建立在http协议之上的。

  1. http协议为什么会产生?
    在互联网还未流行起来的时候,有这么一帮学者想把自己的文档资料放在互联网上共享给其他人,于是制定了一个规则,大家都按照这个规则来共享自己的文档或其他资源。而这个规则就是http协议,它规定了传输资源时的格式与方法。
    大家把自己的文档资源放在属于自己的服务器上,如果有人请求获取资源,则给他响应对应的资源。这里出现了【请求】【响应】 两个概念。

  2. 这个时候就出现了一个问题,大家都共享自己的文档资源,那我怎么找到我想要的资源?
    难道一个一个的去查询,资源的数量比较少的时候,这个方法是可行的。但是当资源变多的时候,这显然不行了。所以我们必须给每个资源一个唯一的地址,当我们有了这个地址的时候,就可以快速的找到想要的资源。这个出现了【URL】,像这样的www.vbig.org/1.txt这样的形式,就表示了www.vbig.org这个主机上有1.txt这个文本资源,这个出现了【域名】来唯一标记主机。

  3. 那请求是怎么通过URL到底资源的地址呢?
    之前提到的URL地址我们一眼就能知道资源在www.vbig.org这个主机上,但是路由器不知道,它是理解不来这个的。所以这个时候出现了【DNS】这种服务将这个域名解析成路由器能懂的【IP】地址,请求再通过IP地址到达目的主机。【tcp/ip四层网络模型】

  4. 现在请求request已经能很好地抵达目的主机了,请求的文本资源也能获取到了。那如果请求的资源不是文本而是视频或者图片呢?
    我们是不是要在请求中说明请求的资源类型呢,其实不光是资源类型,我们还需说明客户端的情况、时间、编码、语言等等一些,这些都是为了服务器端能更好的理解接受的请求,客户端能获取理想中的资源。
    然后把这些说明信息和主体信息打包在一起发送给服务端。这个包是【报文】。这些说明信息是【报文首部】,主体信息是【报文主体】。

  5. 随着web发展,web服务不仅限于get获取资源,也可做到新增、修改甚至删除目标资源。
    引出【get、post、put、delete】四种基本的【请求类型】

  6. 对于使用get请求获取资源的请求,成功或或失败很好判断,就是有没有拿到想要的资源,但是post、put、delete就没有那么直观了
    这里出现了【状态码】

  7. 已公开的资源,不管谁都可以去获取,但是对于私有资源,是不是要在处理资源前对请求进行认证?
    引出【认证】、【session/cookie、(token)】

  8. 既然我们想把私有资源定向的开发给某些用户,那我们是不是要担心这些资源的安全问题呢?
    引入安全问题的考虑,出现了【https协议】


知识点1:GET和POST的区别 (我们常使用get和post请求)
* get是从服务器上获取数据而post是向服务器传送数据
* get是把参数数据队列加到提交表单的ACTION属性所指的URL中。值和表单中相应的字段一一对应,在URL中可以看到。post是通过HTTP 的post机制,将表单中各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程
对于get方式,服务器端用requestQueryString获取变量的值。对于post方式服务器用Request.form获取提交数据
* get传输的数据量较小,不能大于2kb,post传输的数据量比较大,一般默认为不受限制。但是理论上,IIS4中最大量为80kb,IIS5中最大量为100kb
* get安全性非常低,post安全性较高。但是执行效率却比post方法好。

知识点2: 了解http报文内的信息

  • HTTP报文:它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。
  • HTTP报文的流动方向:一次HTTP请求,HTTP报文会从“客户端”流到“代理”再流到“服务器”,在服务器工作完成之后,报文又会从“服务器”流到“代理”再流到“客户端”
    报文的语法:所有的HTTP报文都可以分为两类,请求报文和响应报文。请求和响应报文的基本报文结构大致是相同的,只有起始行的语法有所不同。

    请求报文:它会向Web服务器请求一个动作
    请求报文的格式:
    起始行:   
    头部:   
    主体:   

    请求报文:它会向Web服务器请求一个动作
    响应报文的格式:
    起始行:    
    头部:    
    主体:    

知识点3:* 状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

  • 常见状态代码、状态描述的说明如下。
    200 OK:客户端请求成功。
    400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
    401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
    403 Forbidden:服务器收到请求,但是拒绝提供服务。
    404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
    500 Internal Server Error:服务器发生不可预期的错误。
    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

知识点4:HTTP协议相关网络协议
应用层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。
中间程序提高效率和增加功能:代理(Proxy)、网关(Gateway)和隧道(Tunnel),一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过 URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一 个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。

知识点5:cookie/session 与 token
* 状态保存在服务器端session中,将sessionid保存在浏览器的cookie中,适合浏览器/服务器这样的架构。当然也可以不使用cookie。
* 状态保存在客户端的token(包含用户名+时间戳)中,利用密码加密手段保证token在客户端不被破解。当然服务器也要保存token,并设置有效期,可以保存到缓存中。更多有偏向于授权。
token的安全性着重于其不会被破解,不会被篡改,而不是在于它传输时会不会被截取造成中间者攻击。
总结:上面所说的是user_token,对用户名加密就是一种认证授权,因为这种认证授权只有服务器能够识别。
* token加密算法:
非对称加密算法:RSA,DSA/DSS       对称加密算法:AES,RC4,3DES       HASH算法:MD5,SHA1,SHA256

知识点6:确保安全的https
为什么需要https,这是由于http协议的不安全性。http通信使用明文不加密,内容可能被监听;不验证通信对方的身份,可能遭遇伪装;无法证明报文的完整性,有可能被篡改。

为了解决这些安全问题,出现https协议。HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。

2012072310244445.png

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:

  • 客户端发起HTTPS请求
    这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。

  • 服务端的配置
    采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对【公钥】和【私钥】。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

  • 传送证书
    这个证书其实就是【公钥】,只是包含了很多信息,如证书的颁发机构,过期时间等等。

  • 客户端解析证书
    这部分工作是有客户端的TLS来完成的,首先会验证【公钥】是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值(这个值会用作【对称加密】的【密钥】)进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

  • 传送加密信息
    这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

  • 服务段解密信息
    服务端用私钥解密后,得到了客户端传过来的随机值(密钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种【对称加密算法】混合在一起,这样除非知道【对称密钥】,不然无法获取内容,而正好客户端和服务端都知道这个密钥,所以只要加密算法够彪悍,密钥够复杂,数据就够安全。

  • 传输加密后的信息
    这部分信息是服务段用密钥加密后的信息,可以在客户端被还原

  • 客户端解密信息
    客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。。

     这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次【测试】。另外,HTTPS一般使用的加密与HASH算法如下:

    非对称加密算法:RSA,DSA/DSS       对称加密算法:AES,RC4,3DES       HASH算法:MD5,SHA1,SHA256

知识点7:web攻击技术
* web攻击主要为了攻击web应用,客户端的验证是为了提供用户体验,并不能提高安全等级。
所以客户端的安全性不太好,在客户端可以通过URL查询字段或者表单、http首部、cookie等途径把攻击代码写入。

  • 以服务器为目标的主动攻击:sql注入攻击os注入攻击DDOS攻击;还有http首部注入攻击、邮件首部注入攻击。

  • 以服务器为目标的被动攻击(最常见的),被动攻击是利用圈套策略执行攻击代码的攻击模式,攻击者不直接对目标Web应用发起攻击(借刀杀人),主要攻击用户的资源和权限。:跨站脚本攻击xss跨站点请求伪造攻击CSRF等等。

  • 安全漏洞:对输入值验证、输出值转义。对于客户端传来的数据要抱着不信任的态度地做好处理。
    以上是输出输入方面的策略,还有一些设计或设置上的漏洞。


好了,http协议要告一段落了。

欢迎转载!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值