浅谈HTTP之WEB与网络基础

1.http与web

web页面的呈现:

根据web浏览器地址栏指定的url从web服务器端获取文件资源等信息,使用HTTP协议作为规范展示出web页面,完成从客户端到服务器端的一系列运作流程,可以说web是建立在HTTP协议上通信的。

http的发展史:

http(超文本传输协议)在1990年问世,最初的版本为:HTTP/0.9。 HTTP/1.0 在1996年5月发布,最初的标准,现在仍然广泛的应用用服务器端。 HTTP/1.1在1997年1月发布是目前主流的协议版本。

web的发展史:

最初的设想是---借助多文档之间的相互关联形成的超文本,连接成可以互相参阅的万维网(WWW)--- world wide web。 WWW是web浏览器浏览超文本客户端的名称,现在用来表示这一系列的集合,也可以称为web。 1990年11月web浏览器和服务器问世,随着发展渐渐地Apache web服务器问世,各种浏览器也是层出不穷。

2.网络的基础TCP/IP

TCP/IP协议族

为了能够更加全面的理解HTTP我们有必要先理解写TCP/IP协议族,通常的网络都是在TCP/IP的基础上运行的,而HTTP也仅仅属于TCP/IP协议族的一个子集。

什么是协议? 协议即时通信的一种规则。计算机与网络要相互通信,双方必须基于相同的方法,比如谁先开始通信,那种语言通信,怎么开始通信,怎么结束通信等等都需要事先声明。

TCP/IP是互联网相关的各类协议族的总称。

TCP/IP分层管理

分层的优势? 如果不分层交互只由一个协议统筹,某个地方需要改变设计时需要把所有部分的整体替换掉,分层后只需要替换掉变动的层,每一层也变得相对简单容易只考虑自己的任务就可以了。 

应用层:向应用进程提供服务的,FTP,DNS,HTTP协议也属于该层。

传输层:对上层应用层提供处于网络连接中两台计算机之间的数据传输。 在传输层有2个性质不同的协议TCP传输控制协议(三次握手四次挥手)与UDP用户数据报协议(“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包)

网络层:网络层用于处理网络数据包,数据包是网络传输的最小单位。 该层规定了通过怎么样的路径到达对方计算机并把数据包传送给对方。

数据链路层:用于处理连接网络的硬件部分。包括操作系统,设备驱动,网络适配器,光纤等等。

从发送到接受的过程:


 3.IP、TCP、DNS 与HTTP的关联

IP协议:(Internet Protocol)

IP协议属于TCP/IP协议族指的是网络协议按层次分应处于网络层,作用就是将各种数据包传输给对方。保证传输的确定性需要满足2个条件IP地址(节点分配的地址)以及MAC地址(网卡所属的固定位置 通过IP地址在arp表查得)。

TCP协议:(Transfer Control Protocol)

TCP协议属于TCP/IP协议族指的是网络协议按层次分应处于传输层提供可靠的字节流服务,为了方便传输将大块数据分割为以segment为单位的数据包进行管理并且能够准确可靠的将数据传递给对方。

TCP协议中比较重要的三次握手与四次挥手:

三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。

刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。

进行三次握手:

第一次握手:客户端给服务端发一个 TCP 报文标记为为SYN(sychronize 同步),并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SEND 状态。

首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。

第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s)。同时会把客户端的 ISN + 1 作为ACK(acknowledgement 确认响应) 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。

在确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。

第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。

确认报文段ACK=1,确认号ack=y+1,序号seq=x+1(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。

发送第一个SYN的一端将执行主动打开(active open),接收这个SYN并发回下一个SYN的另一端执行被动打开(passive open)。

在socket编程中,客户端执行connect()时,将触发三次握手。

建立一个连接需要三次握手,而终止一个连接要经过四次挥手(也有将四次挥手叫做四次握手的)。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。

TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务器均可主动发起挥手动作。

刚开始双方都处于 ESTABLISHED 状态,假如是客户端先发起关闭请求。四次挥手的过程如下:

第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。

即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。

第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。

即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。

第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。

收到一个FIN只意味着在这一方向上没有数据流动。客户端执行主动关闭并进入TIME_WAIT是正常的,服务端通常执行被动关闭,不会进入TIME_WAIT状态。

在socket编程中,任何一方执行close()操作即可产生挥手操作。

DNS服务

DNS(domain name system)服务与HTTP协议都位于应用层,作用是域名和IP的解析,可以通过域名去查找IP或者通过IP查找域名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值