当我们使用浏览器访问一个网页时,服务器与我们的主机内部,发生了什么?(三次握手,四次挥手)

一,前言

        当我们在浏览器上输入一个网址,并想要请求到这个网址时,虽然只有短短几秒钟的时间,但是服务器与我们的主机却发生了多次交互,下面让我们具体来看看,到底发生了哪些交互吧。、

二,整体流程图

6a782822becd427ebbb833517affe958.png

 流程可简化为:

                (1)DNS域名解析

                (2)与目的主机进行TCP连接(三次握手)

                (3)发送与收取数据(浏览器发起http请求)

                (4)与目的主机断开连接(四次挥手)

三,详细过程

1.DNS域名解析

        DNS,全称Domain Name System,作用是通过主机域名,最终得到该主机名对应的IP地址的过程叫做域名解析。DNS协议底层采用UDP协议,端口号为53。

2.与目的主机进行TCP连接(三次握手)

               ACK:确认号字段          ack:控制字段位的一个标志位。

(1)第一次握手

客户端发送:SYN=1(表示请求与服务器建立连接)

状态:客户端:STN-SENT(客户端发送)

           服务器:LISTEN(监听等待)

(2)第二次握手

服务器发送:SYN=1 ,ACK=1(服务器收到来自客户端的请求,并表示,服务器同意连接)

状态:客户端:STN-SENT(客户端发送)

           服务器:STN-RCVD(服务器端发送)

(3)第三次握手

客户端发送:SYN=0 ,ACK=1(客户端收到服务器端的确认,并发送SYN=0,双方都同意连接)

状态:客户端:ESTAB—LISTHED(数据传输)

           服务器:ESTAB—LISTHED(数据传输)

7b66233d33dd402fbcfff67eb55ccee1.png

(4)三次握手的原因(不能多,也不能少)

        在两次握手之后,就表示连接成功了,就可以证明网络是通畅的。

        如果没有第三次握手,客户端先发送第一个建立联系的请求数据包,如果由于网络延迟问题,客户端等不到服务器的回应,就再发送一个请求数据包,这次网络通畅,服务器收到,并开始传输数据。这时第一个请求数据包到达了服务器,服务器也发送了同意数据包,由于客户端开始了数据传输,就没有理会服务器端的连接请求,服务器会一直等待。。。。造成了资源浪费。

        三次握手有效避免了服务器资源浪费,而两次或者四次都会造成服务器的资源浪费。

 (3)发送与收取数据(浏览器发起http请求)

        当我们正常的建立连接后,就可以利用http协议进行正常的数据传输了。

        http(Hyper Text Transfer Protocol)超文本传输协议:万维网服务器与本地浏览器之间的数据传输协议。

        http协议底层是现实TCP协议,默认端口号是80;

        下面让我们来看看TCP协议的通信过程:

0bdc9717746f4f0885cf56a7791915e2.png

 4.与目的主机断开连接(四次挥手)

(1)第一次挥手

客户端发送FIN=1,ACK=0(客户端停发数据,并请求终止连接)

状态:客户端:FIN_WAIT_1

           服务器:CLOSE_WAIT

(2)第二次挥手

服务器发送:终止FIN=0,ACK=1(服务器收到来自客户端的终止信号,客户端不发送,但可以接收服务器端的数据,TCP处于半关闭状态)

状态:客户端:FIN_WAIT_2

           服务器:CLOSE_WAIT

(3)第三次挥手

服务器端发送:FIN=1 ,ACK=1(应用进程通知TCP释放连接,并向客户端发送确认报文)

状态:客户端:TIME_WAIT

           服务器:LAST_ACK

(3)第四次挥手

客户端发送:ACK=1,FIN=0(客户端收到ACK=1,服务器释放释放连接,客户端确认释放)

状态:客户端:CLOSED

           服务器:CLOSED

14243ad7a07e412cb195e71411321df5.png

四,扩展知识

1.TCP协议

(1)TCP协议概述

  • TCP协议是面向对象,可靠的传输协议(在传输之前必须先建立连接)。
  • TCP协议是点对点连接。(服务器端  <=>  客户端
  • TCP协议是面向字节流的,把从应用层传下来的报文,组织成大小不一的报文段。
  • TCP协议具有“可靠传输性”,"流量控制",“避免拥塞”等功能

(2)TCP协议执行流程

3bc2625f260844769f2e8a5965343ed0.png

(3)TCP协议首部格式

                         f4a67595557c4302a8680671c818550a.jpeg

 源端口(4个字节):发送方端口

目的端口(4个字节):接收方端口

序号(4个字节):TCP连接中每一个字节都有自己的编号,序号字段是指发送数据流的第一个字节的序号

确认号(4个字节):期望收得对方的下一个报文数据段的第一个字节的序号。

数据偏移: 数据部分距离报文首部的偏移量。也可以当作是TCP首部的长度。

  • 紧急URG:当URG=1时,表明紧急指针字段有效。应当尽快传输。
  • 确认ACK:ACK是指堆已接受数据的确认。默认为0,建立连接过后,每次传递都为1.
  • 同步SYN:在建立连接时使用,表示这是一个请求连接或连接接受报文。
  • 推送PSH:接受TCP收到PSH=1的报文段。
  • 复位RST:当RST=1时,代表传输出现了严重错误(主机崩溃等),必须释放连接,然后在重新建立运输连接。
  • 终止FIN:用来释放一个连接。表示数据传输完毕,请求正常释放连接。

保留(4个字节):保留到未来使用,一般设置为8.

控制位(8个字节):用于数据传输中,传递控制标志位。

 窗口:作为接收方让发送方设置其发送窗口的一句,单位是字节(方便进行流量控制,提高传输效率等)

2.http协议 (超文本传输协议)

(1)URL(Uniform Resource Locator):统一资源定位符

(2)HTTP的请求方式

  • GET:获取资源
  • HEAD:获取响应消息报头
  • POST:提交数据,增加资源
  • PUT:修改资源
  • DELETE:删除资源
  • OPYIIONS:查询支持的方法

get与post的区别:

(1)两者都是建立在TCP连接通信的基础上的

(2) get获取资源,        post提交数据

(3)请求参数不同,get使用URL请求           post使用Request Body请求

(4)请求报文的格式不同,一个以get开头,一个以post开头

(5)get幂等可缓存,post非幂等且不能缓存

(3)HTTP报文

                 请求报文:

                        第一行:请求方法,URL,协议版本

                        第二行-第n行:请求首部,header开头

                        空行:

                        下面是body(内容主体)

POST http://www.example.com/ HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Host: www.example.com
If-Modified-Since: Thu, 17 Oct 2019 07:18:26 GMT
If-None-Match: "3147526947+gzip"
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 xxx

param1=1&param2=2

                响应报文:

                        第一行:版本协议,状态码,描述

                        第二行-第n行:请求首部,header开头

                        空行:

                        下面是body(内容主体)

                     

HTTP/1.1 200 OK
Age: 529651
Cache-Control: max-age=604800
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 648
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Nov 2020 17:53:39 GMT
Etag: "3147526947+ident+gzip"
Expires: Mon, 09 Nov 2020 17:53:39 GMT
Keep-Alive: timeout=4
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Proxy-Connection: keep-alive
Server: ECS (sjc/16DF)
Vary: Accept-Encoding
X-Cache: HIT

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
	// 省略... 
</body>
</html>

 (4)HTTP常见状态码:

  • 100(continue):接受的请求都在处理,一切正常。
  • 200(ok):成功状态码
  • 204(NOT  content):请求正常处理,但相应的报文不包含主体部分。
  • 301(Moved Permanently):永久性定向
  • 302(Moved Found):临时性重定向 
  • 400(Bad Request):错误的语法格式存在在报文中
  • 401(Unauthorized):代表请求中缺少认证信息(BASIC认证等)
  • 403(Forbidden):请求被拒绝
  • 404(NOT FOUND):请求的路径中方法未找到
  • 500(Internal  server error):服务器异常(出现Exception 或者 Error)
  • 503(server Unavailable):服务器超负荷或者正在停机维护

(5)连接管理

  1. 短连接:HTPP1.0默认使用,每次http通信,都要创建一条TCP连接
  2. 长连接:HTTP1.1默认使用,只需要创建一条TCP连接,就能完成多次通信。
  3. 管线化连接:HTTP1.1专属,使用需要手动开启,将多个http请求批量提交技术。

3.Https协议

(1)概述

        https协议不是一个新协议,而是让http先和SSL(Secure Socket layer)通信,再由SSL与TCP通信。它通过使用了SSL,让http协议具有了加密(防止窃听,认证(BASIC等)和完整性保护(防止纂改)。

(2)https解决了http的安全性问题

  • 使用明文通信,内容可能被窃听。
  • 无法验证通信方身份,通信方的身份可能被伪装。
  • 无法证明报文的完整性。

(3) 加密方式:

        对称式密钥加密:

                特点:加密与解密都使用同一把密钥

                优点:运行速度快。

                缺点:容易被破解,密钥直接在网络中传输。

        非对称式密钥加密:

                特点:加密和解密用的是公钥加私钥结合的形式,不是同一把密钥

                过程:通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

                优点:避免了所有密钥都出现在网络上,有效的保证了传输数据的安全性。

                缺点:运行速度慢。

(4)https工作原理

        1.用户通过浏览器访问https网址,服务器选择浏览器支持的加密算法,返回数字证书给浏览器。

        2.浏览器对证书进行校验,有错误的话,直接提示,否则产生一个随机密钥X,和数字证书中的公钥进行加密 返回给浏览器。

        3.服务器收到加密后的数字证书,用自己的私钥解密,并获得浏览器的私钥X,利用X给浏览器请求的内容加密,并返回给浏览器。

        4.浏览器利用自己的私钥X进行解密,让用户看到https网站内容。

                            

  • 12
    点赞
  • 9
    收藏
  • 打赏
    打赏
  • 9
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论 9

打赏作者

#0000FF格子衫

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值