热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

01http简介四层七层三次握手

HTTP简介、请求方法与响应状态码接下来想系统的回顾一下TCPIP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的。接下来的几

HTTP简介、请求方法与响应状态码

接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的。接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单的聊一下TCP/IP协议族,然后聊一下HTTP协议,然后再聊一下SSL上的HTTP(也就是HTTPS)了。当然TCP/IP协议族是个老生常谈的话题,网络上关于该内容的文章一抓一大把呢,但是鉴于其重要性,还是有必要系统的总结一下的。

1.    TCP/IP协议族简述

在聊HTTP与HTTPS之前呢,我们先简单的聊一下TCP/IP协议族。TCP/IP不单单指的就是TCP和IP这两个协议,而是指的与其相关的各种协议。比如HTTP, FTP, DNS, TCP, UDP, IP, SNMP等等都属于TCP/IP协议族的范畴。

1.1. TCP/IP协议的分层

TCP/IP协议族是分层管理的,在OSI标准中可以分为7层(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,可记为:应表会传网数物),本篇博客我们采用的是TCP/IP协议族中的四层(应用层、传输层、网络层、链路层)。下方是对四层中每层的简单介绍:

  • 应用层:该层是面向用户的一层,也就是说用户可以直接操作该层,该层决定了向用户提供应用服务时的通信活动。本篇博客要聊的HTTP(HyperText Transfer Protocol:超文本传输协议)就位于该层。我们经常使用的FTP(File Transfer Protocol: 文件传输协议)和DNS (Domain Name System: 域名系统)都位于该层。FTP简单的说就是用来文件传输的。而DNS则负责域名解析的,通过DNS可以将域名(比如:www.cnblogs.com)与IP地址(201.33.xx.09)进行相互的转换。在7层中,又将该层分为:应用层、表示层和会话层。
  • 传输层:应用层的下方是传输层,应用层会将数据交付给传输层进行传输。TCP(Transmission Control Prococol:传输控制协议)和UDP(User Data Protocol: 用户数据协议)位于该层,当然见名知意,该层是用来提供处于网络连接中的两台计算机直接的数据传输的。TCP建立连接是需要三次握手来确认连接情况,而UDP则没有三次握手的过程。稍后会介绍。
  • 网络层:传输层的下方是网络层,网络层用来处理在网络上流动的数据包,IP(Internet Protocol: 网际协议)就位于这层。该层负责在众多网络线路中选择一条传输线路。当然这个选择传输线路的过程需要IP地址和MAC地址的支持。
  • 链路层:在7层协议中,将链路层分为数据链路层和物理层。该部分主要是用来处理网络的硬件部分,我们常说的NIC(Net Work Card),也就是网卡就位于这一部分,当然光纤也是链路层的一部分。

  

在TCP/IP协议族中的每次直接在传输数据时的协作关系,以及交互过程,还是引用《图解HTTP》一书上的一张图来解释吧。下图就是这四层协议在数据传输过程中的工作方式。下面这张图还是相当直观的。在发送端是应用层-->链路层这个方向的封包过程,每经过一层都会增加该层的头部。而接收端则是从链路层-->应用层解包的过程,每经过一层则会去掉相应的首部。

  

1.2. TCP协议的三次握手

在聊HTTP协议之前,我们先简单的聊一下TCP三次握手的过程,在后面的博客中我们将会对TCP和IP协议进行详述,本篇博客就先简单的聊一下做HTTP协议的基础。

TCP协议位于传输层,为了确保传输的可靠性,TCP协议在建立连接时需要三次握手(Three-way handshaking)。下方这个简图就是TCP协议建立连接时三次握手的过程。

  • 第一次握手:发送端发送一个带SYN(Synchronize [?s??kr?na?z]使同步)标志的数据包给接收端,用于询问接收端是否可以接收。如果可以,就进行第二次握手。
  • 第二次握手:接收端回传给发送端一个带有SYN/ACK(Acknowledgement [?k?n?l?d?m?nt]确认)的数据包,给发送端说,我收到你给我发送的SYN标志了,我再给你传一个ACK标志,你能收到吗?如果发送端收到了SYN/ACK这个数据包,就可以确认接收端收到了之前发送的SYN, 然后进行第三次握手。
  • 第三次握手:发送端会给接收端发送一个带有ACK标志的数据包,告诉接收端我可以收到你给我发送的SYN/ACK标志。接收端如果收到了这个来自客户端的ACK标志,就意味着三次握手完成,连接建立,就可以开始传输数据了。

 

1.3. TCP协议的四次挥手

TCP三次握手是TCP连接建立的过程,TCP四次挥手则是TCP连接释放的过程。下面是TCP四次挥手的流程图:

 

当客户端没有数据再需要发送给服务端时,就需要释放客户端的连接,这整个过程为:

  1. 客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态
  2. 服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端进入CLOSE_WAIT状态
  3. 服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态
  4. 客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态

这里的一个问题是,为什么TCP连接的建立只需要三次握手而TCP连接的释放需要四次握手呢:

因为服务端在LISTEN状态下,收到建立请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而连接关闭时,当收到对方的FIN报文时,仅仅表示对方没有需要发送的数据了,但是还能接收数据,己方未必数据已经全部发送给对方了,所以己方可以立即关闭,也可以将应该发送的数据全部发送完毕后再发送FIN报文给客户端来表示同意现在关闭连接。

 

从这个角度而言,服务端的ACK和FIN一般都会分开发送。

2.    HTTP报文结构

HTTP协议全称是HyperText Transfer Protocol,即超文本传输协议,用户客户端和服务器之前的通信,目前普遍使用版本为HTTP/1.1。协议本质上就是规范,我们之前提到过的“面向接口”编程,其实就是“面向协议”编程。先定义好类的协议,也就是接口,相关类都遵循该协议,这样一来我们就规范了这些类的调用方式。而HTTP协议是规范客户端和服务器之间通信的协议。也就是说所有的客户端或者服务器都遵循了HTTP这个通信协议,那么也就是意味着他们对外传输数据的接口是一直的,就可以在其中间连接上管道,这样一来就可以进行传输了。

这些协议就是接口,有着共同的通信协议,多个端就可以相互通信。采用相同的协议,就是便于个个设备之间进行沟通交流。HTTP协议的作用如下所示。

    

HTTP协议的作用是用来规范通信内容的,在HTTP协议中可以分为请求报文和响应报文。顾名思义,请求报文是请求方发出的信息,而响应报文是响应端收到请求后响应的内容。接下来我们就来看看请求报文和响应报文的整体结构。

1.1. 请求报文(Request Message)结构

下方是请求报文的整体结构。请求报文主要分为两大部分,一个是请求头(Request Headers)另一个是请求体(Request Body)。这两者之间由空行分割。在请求头中又分为请求行(Request Line),请求头部字段,通用头部字段和实体头部字段等,这个稍后会详细介绍。下方就是请求报文的结构。

  

下方这个截图就是请求博客园某个页面时的Request Headers。在请求行中的第一个“GET”是当前请求的方法,稍后会做介绍。中间的就是请求资源的路径,最后一个HTTP/1.1就是当前使用请求协议及其版本。下方这些就是请求头了,稍后会对常用的请求头进行解说。而请求体就是你往服务端传输的数据,比如form表单神马的。

  

1.2. 响应报文(Response Message)结构

聊完请求报文,接下来我们来聊聊响应报文,响应报文的结构与请求报文的结构类似,也分为报文头和报文体。下方就是响应报文的结构图。响应头(Response Headers)分为状态行(State Line),响应头部字段,通用头部字段、实体头部字段等。响应头与响应体中间也是有空行进行分割的。

  

下方截图就是上述请求报文发出后的响应头,响应体就是对于的HTML等前端资源了。在响应头中,第一行就是状态行,“HTTP/1.1”表示使用的HTTP协议的1.1版本,状态200表示响应成功,"OK"则是状态原因短语。常用状态,稍后会详细介绍。

  

01-http简介-四层 七层 三次握手


推荐阅读
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
手机用户2602922383_687
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有