HTTP(HyperText Transfer Protocol) 即超文本传输协议,基本所有web项目都遵从HTTP协议(协议是人为的规范)
<!--目前基本使用的是http1.1版本-->
TCP/IP协议族是一组协议的统称,是供已连接因特网的计算机进行通信的通信协议。HTTP是其中一个协议,在层次上属于应用层协议。
TCP/IP 指传输控制协议/网际协议 (Transmission Control Protocol / Internet Protocol)。
TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。
在 TCP/IP 中包含一系列用于处理数据通信的协议:
TCP (传输控制协议) - 应用程序之间通信
UDP (用户数据包协议) - 应用程序之间的简单通信
IP (网际协议) - 计算机之间的通信
ICMP (因特网消息控制协议) - 针对错误和状态
DHCP (动态主机配置协议) - 针对动态寻址
TCP/IP 意味着 TCP 和 IP 在一起协同工作。
TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。
IP 负责计算机之间的通信。
TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。
IP 负责将包发送至接受者。
OSI模型如下(图片cr.网络):
通常人们会将OSI最上面的三层:应用层、表示层和会话层当成是TCP/IP组当中的一个应用层。
最初理论上的OSI模型分的是七层,但是通常只会用四层:应用层、传输层、网络层、数据链路层
1、应用层:作为和用户交互的最高层,其任务是直接为用户的应用进程提供服务。具体内容就是规定应用进程在通信时所遵循的协议。
因特网的应用层协议有很多,如最为熟知的HTTP(端口号80)和FTP(端口号21)、支持电子邮件的SMTP(端口号25)、域名系统DNS(端口号53)等。
2、传输层:将数据从发送端传输到接收端(只需要关注点对点的传输,中间的传输过程一概不管)。
在传输层有两个性质不同的协议:TCP(Transmission ControlProtocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。
3、网络层:处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
4、链路层:也叫数据链路层或网络接口层。用于处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。
硬件上的范畴均在链路层的作用范围之内。
发送端从应用层向下走,接收端从应用层往上走。
1、client在应用层(http协议)发出请求某个web网页的http请求;
2、传输层(TCP协议)把从应用层收到的HTTP请求报文分割,在各个报文上打上标记序号及端口号后转发给网络层。
3、网络层(IP协议)增加了作为通信目的地的MAC地址后发给链路层,这样请求就准备好了
4、当接收端的服务器在数据链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。
发送端的数据在层与层之间传输的时候,每经过一层都会打上该层所属的头部信息,而接收端在层与层传输数据时,每经过一层时会把对应的头部消去。(如下图)
这种把数据信息包装起来的做法称为封装(encapsulate)。
IP其实是一种协议的名称 ,IP间的通信依赖MAC地址。
在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。在进行中转的过程中,可以通过利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,会采用ARP协议(Address Resolution Protocol)。
ARP 是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
TCP协议为了更容易传送大数据才把数据分割成以报文段(segment)为单位的数据包,而且TCP协议能够确认数据最终是否送达到对方。
为了准确无误地将数据送达目标处,TCP协议采用了三次握手(three-way handshaking)策略:1、用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志(flag) ——SYN(synchronize) 和ACK(acknowledgement)。发送端首先发送一个带SYN标志的数据包给对方。2、接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。3、最后,发送端再回传一个带ACK标志的数据包,代表握手结束。若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。
DNS(Domain Name System)服务是位于应用层的协议,它提供域名到IP地址之间的解析服务。
计算机既可以被赋予IP地址,也可以被赋予主机名和域名。比如www.baidu.com。因为域名更加直观,所以用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址访问。
但要让计算机去理解名称,相对而言就变得困难了。因为计算机更擅长处理一长串数字。为了解决上述的问题,DNS服务应运而生。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。
HTTP协议与其他TCP/IP协议是如何协作的?
URI:统一资源标识符 。由某个协议方案表示的资源的定位标识符。 协议方案是指访问资源所使用的协议类型名称。 采用HTTP协议时, 协议方案就是http。
URI用字符串标识某一互联网资源, 而URL表示资源的地点(互联网上所处的位置) 。 可见URL是URI的子集。(当然通常可以大致把URL理解成URI)
RFC : Request for Comments, 征求修正意见书
HTTP协议规定, 请求从客户端发出, 最后服务器端响应该请求并返回。
HTTP是无状态(stateless) 协议。即其对于发送过的请求或响应都不做持久化处理。这就导致了一些问题,如登录过某购物网站的用户在请求该网站的其他网页时也需要保持登录状态,这就需要网站能够掌握是谁送出的请求, 即保存用户的状态。HTTP/1.1虽然是无状态协议, 但为了实现期望的保持状态功能, 引入了Cookie技术。 有了Cookie再用HTTP协议通信, 就可以管理状态了。
Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息, 通知客户端保存 Cookie。
当下次客户端再往该服务器发送请求时, 客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后, 会去检查究竟是从哪一个客户端发来的连接请求, 然后对比服务器上的记录, 最后得到之前的状态信息(如图2)
当保存了cookie之后再访问这个网站的其他页请求报文中会自动发送保存着的cookie
GET方法用来请求访问已被URI识别的资源。 指定的资源经服务器端解析后返回响应内容。 也就是说, 如果请求的资源是文本, 那就保持原样返回; 如果是像CGI(Common Gateway Interface, 通用网关接口)那样的程序, 则返回经过执行后的输出结果。
虽然用GET方法也可以传输实体的主体, 但一般不用GET方法进行传输, 而是用POST方法。 虽说POST的功能与GET很相似, 但POST的主要目的并不是获取响应的主体内容。
PUT方法用来传输文件。 就像FTP协议的文件上传一样——在请求报文的主体中包含文件内容, 然后保存到请求URI指定的位置。但是, 鉴于HTTP/1.1的PUT方法自身不带验证机制, 任何人都可以 上传文件 , 存在安全性问题, 因此一般的Web网站不使用该方法。 若配合Web应用程序的验证机制, 或架构设计采用REST(REpresentational State Transfer, 表征状态转移) 标准的同类Web网站, 就可能会开放使用PUT方法。
第一次握手:当客户端要与服务器建立连接的时候,客户端先发送带SYN标志的包给服务器此时客户端进入等待服务器确认的状态
第二次握手:服务器确认收到了带SYN标志的包,再回传了一个带有SYN+ACK的包给客户端,此时服务器处于等待对方接收的状态
第三次握手:客户端收到服务器发送的带有SYN+ACK的包,再向服务器发送带有ACK标志的数据包,发送完毕后TCP连接成功,握手结束
<!--三次握手的目的就是双方确认自己与对方的发送与接收均正常-->
四次挥手的情况是双方各自向对方发送FIN,再各自向对方发送ACK,中间会产生两次交互,某些情况下会合并成一个——即三次握手
第一次挥手是客户端发送完FIN之后
第二次挥手是服务器收到了FIN后再发送了ACK包
第三次挥手是服务器也发送了FIN和ACK包之后
第四次挥手是客户端收到了并且也给对方发送了ACK
<!--会有四次挥手的原因是当一方发送FIN后是标识自己发完了要发的数据,但是此时对方也可能有没有发完的数据要发过来。-->
学习教程:https://www.cnblogs.com/daijiabao/p/11183265.html
以上为结合自己的理解和学习过程查询资料补充后的内容