客户端与服务器端交互原理学习记录(1)

本文采用倒叙,先了解客户端与服务器的交互过程,再按照事件顺序逐一拆解

1、 在浏览器中输入www.baidu.com后执行的全部过程:

事件顺序

(1) 浏览器获取输入的域名www.baidu.com

(2) 浏览器向DNS请求解析www.baidu.com的IP地址

(3) 域名系统DNS解析出百度服务器的IP地址

(4) 浏览器与该服务器建立TCP连接(默认端口号80)→→→→备注:TCP连接三次握手

(5) 浏览器发出HTTP请求,请求百度首页→→→→备注:(5)-(7)进行数据传输,用到网络七层模式

(6) 服务器通过HTTP响应把首页文件发送给浏览器

(7) 浏览器将首页文件进行解析,并将Web页显示给用户。

(8) TCP连接释放→→→→备注:TCP四次挥手断开连接

2、按照事件顺序,逐一解释:事件(1)-(3)

1、IP 地址
IP(Internet Protocol Address,互联网协议地址) 是互联网设备的唯一标识。即互联网上(已入网)的每一台计算机都有唯一标识,我们可以通过该 IP 找到该计算机。

2、域名
由于 IP 地址是一长串数字,比较难记。所以产生了域名的概念,所谓的域名就是 IP 地址的别名。可以使用域名代替 IP 地址找到与之对应的那台计算机。
例如 http://www.yangchen.world => http://124.165.219.098/ ,虽然在地址栏中输入的是网址,但最终还是会将其域名解析为 IP 地址(由 DNS 服务器解析)。并根据该地址找到互联网上与之对应的网站服务器(计算机)。

3、端口
端口是计算机与外界通讯的 IO 接口,用来区分服务器电脑中提供的不同服务。例如下图中提供邮件传输和网页浏览的服务监听的是不同的端口。
在这里插入图片描述
4、URL
统一资源定位符(Uniform Resource Locator , URL),用于标识互联网上的资源的位置。URL 就是一个给定的独特资源在 Web 上的地址

5、 DNS协议
DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将URL转换为IP地址。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。

3、按照事件顺序,逐一解释:事件(4):浏览器与该服务器建立TCP连接(默认端口号80)→→→→备注:TCP连接三次握手

1、TCP是面向连接的所以只能用于端到端的通讯。TCP提供的面向连接的,可靠的,基于数据流服务,采用"带重传的肯定确认"技术来实现传输的可靠性。

TCP 三次握手,其实就是 TCP 应用在发送数据前,通过 TCP 协议跟通信对方协商好连接信息,建立起TCP的连接关系。
在这里插入图片描述

TCP 三次握手,就是建立一个 TCP 连接,客户端与服务器交互需要 3 个数据包。握手的主要作用就是为了确认双方的接收和发送能力是否正常,初始序列号,交换窗口大小以及 MSS 等信息。

第一次握手:客户端发送 SYN 报文,并进入 SYN_SENT 状态,等待服务器的确认;

第二次握手:服务器收到 SYN 报文,需要给客户端发送 ACK 确认报文,同时服务器也要向客户端发送一个 SYN 报文,所以也就是向客户端发送 SYN + ACK 报文,此时服务器进入 SYN_RCVD 状态;

第三次握手:客户端收到 SYN + ACK 报文,向服务器发送确认包,客户端进入 ESTABLISHED 状态。待服务器收到客户端发送的 ACK 包也会进入 ESTABLISHED 状态,完成三次握手。接下来可以开始传输数据

2、为什么 TCP 采用三次握手,二次握手可以吗?
一)确认双方的收发能力

TCP 建立连接之前,需要确认客户端与服务器双方的收包和发包的能力。

  1. 第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

  2. 第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

  3. 第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

所以,只有三次握手才能确认双方的接收与发送能力是否正常。

(二)序列号可靠同步

如果是两次握手,服务端无法确定客户端是否已经接收到了自己发送的初始序列号,如果第二次握手报文丢失,那么客户端就无法知道服务端的初始序列号,那 TCP 的可靠性就无从谈起。

(三)阻止重复历史连接的初始化

客户端由于某种原因发送了两个不同序号的 SYN 包,我们知道网络环境是复杂的,旧的数据包有可能先到达服务器。如果是两次握手,服务器收到旧的 SYN 就会立刻建立连接,那么会造成网络异常。

如果是三次握手,服务器需要回复 SYN+ACK 包,客户端会对比应答的序号,如果发现是旧的报文,就会给服务器发 RST 报文,直到正常的 SYN 到达服务器后才正常建立连接。

所以三次握手才有足够的上下文信息来判断当前连接是否是历史连接。

(四)安全问题

我们知道 TCP 新建连接时,内核会为连接分配一系列的内存资源,如果采用两次握手,就建立连接,那会放大 DDOS 攻击的。

TCP 作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而三次握手恰好可以满足以上两方面的需求!

4、按照事件顺序,逐一解释:(5)-(7)浏览器发出HTTP请求,请求百度首页→→→→备注:进行数据传输,用到网络七层模式

1、网络层次划分:OSI七层模型,TCP/IP 四层模型,TCP/IP 五层模型
在这里插入图片描述
2、逐一拆解每一层
1)物理层(Physical Layer)

激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。

2)数据链路层(Data Link Layer)

负责物理层面上互连的,节点之间的通信传输以及数据帧的生成与接收。 它将数据包分解成帧并将它们从源发送到目的地。它使用 MAC 地址连接设备并定义传输和接收数据的权限。
有关数据链路层的重要知识点:
1> 数据链路层为网络层提供可靠的数据传输;
2> 基本数据单位为帧;
3> 主要的协议:以太网协议;
4> 两个重要设备名称:网桥和交换机。

3)网络层(Network Layer)

负责将数据传输到目标地址,简单来说就是"路径选择、路由及逻辑寻址"。

网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议我们会在接下来的部分进行总结,有关网络层的重点为:

1> 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;

2> 基本数据单位为IP数据报;

3> 包含的主要协议:

IP协议(Internet Protocol,因特网互联协议);

ICMP协议(Internet Control Message Protocol,因特网控制报文协议);

ARP协议(Address Resolution Protocol,地址解析协议):根据IP地址来获取物理地址的协议

RARP协议(Reverse Address Resolution Protocol,逆地址解析协议):根据物理地址来获取IP地址的协议

4> 重要的设备:路由器。

4)传输层(Transport Layer)

第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。 传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。 网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。 有关网络层的重点:

1> 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;
2> 包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议);
3> 重要设备:网关。
UDP协议
1>UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
2>UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
3>UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询—应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。
4>使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。

5>TCP 与 UDP 的区别:TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。

5)会话层

会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

6)表示层

表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。

7)应用层

为操作系统或网络应用程序提供访问网络服务的接口。
会话层、表示层和应用层重点:
1> 数据传输基本单位为报文;
2> 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。
在这里插入图片描述

2、数据传输的完整过程简洁描述

PC1 和 PC2数据传输过程
在这里插入图片描述

在网络中数据传输和我们生活中信件邮寄、快递类似,传输好比就是整个包裹走向你的流程, 协议好比就是我们所规定的包裹信息,保证大家都可以看得懂。因此,数据也是需要打包和拆包的,准确来说是封装和解封装。

数据封装和解封装过程
在这里插入图片描述

1.数据封装过程(快件打包)
(1)应用层传输发起HTTP会话,生成HTTP报文
(2)传输层传输(数据段)传输层将上层数据分割成诸多数据段(方便解决传输出错问题),并且为每个分段后的数据封装—— TCP报文头部。其中TCP报文头部有一个关键的字段信息——端口号(保证上层应用数据通信)。(3)网络层传输 (数据包)网络层将上层数据再度添加封装——IP头部,其头部包含一个关键的字段信息——IP地址,用于标识网络的逻辑地址。
(4)数据链路层传输(数据帧)数据链路层将上层数据再次添加封装——MAC头部,其包含一个关键的字段信息——MAC地址, 可以理解为固化在硬件中的物理地址,和我们的个人银行卡号一样具有唯一性。 该封装过程中的尾部封装暂不讨论。
(5)物理层传输(比特流)物理层将上层二进制数据转成电信号在网络中传输。

2.数据解封装过程(快件拆包)数据封装后通过网络传输到接收方后需要进行解封装,恰好就是上述数据封装的逆过程。

5、按照事件顺序,逐一解释:(8) TCP连接释放→→→→备注:TCP四次挥手断开连接

当我们的应用程序不需要数据通信了,就会发起断开 TCP 连接。建立一个连接需要三次握手,而终止一个连接需要经过四次挥手。
在这里插入图片描述

1》第一次挥手。客户端发起 FIN 包(FIN = 1),客户端进入 FIN_WAIT_1 状态。TCP 规定,即使 FIN 包不携带数据,也要消耗一个序号。

2》第二次挥手。服务器端收到 FIN 包,发出确认包 ACK(ack = u + 1),并带上自己的序号 seq=v,服务器端进入了 CLOSE_WAIT 状态。这个时候客户端已经没有数据要发送了,不过服务器端有数据发送的话,客户端依然需要接收。客户端接收到服务器端发送的 ACK 后,进入了 FIN_WAIT_2 状态。

3》第三次挥手。服务器端数据发送完毕后,向客户端发送 FIN 包(seq=w ack=u+1),半连接状态下服务器可能又发送了一些数据,假设发送 seq 为 w。服务器此时进入了 LAST_ACK 状态。

4》第四次挥手。客户端收到服务器的 FIN 包后,发出确认包(ACK=1,ack=w+1),此时客户端就进入了 TIME_WAIT 状态。注意此时 TCP 连接还没有释放,必须经过 2*MSL 后,才进入 CLOSED 状态。而服务器端收到客户端的确认包 ACK 后就进入了 CLOSED 状态,可以看出服务器端结束 TCP 连接的时间要比客户端早一些。

问:为什么建立连接握手三次,关闭连接时需要是四次呢?

答:其实在 TCP 握手的时候,接收端发送 SYN+ACK 的包是将一个 ACK 和一个 SYN 合并到一个包中,所以减少了一次包的发送,三次完成握手。

对于四次挥手,因为 TCP 是全双工通信,在主动关闭方发送 FIN 包后,接收端可能还要发送数据,不能立即关闭服务器端到客户端的数据通道,所以也就不能将服务器端的 FIN 包与对客户端的 ACK 包合并发送,只能先确认 ACK,然后服务器待无需发送数据时再发送 FIN 包,所以四次挥手时必须是四次数据包的交互。

6、HTTP 协议:

HTTP定义的事务处理由以下四步组成:

1.建立连接。

2.客户端发送HTTP请求头。

3.服务器端响应生成结果回发。

4.服务器端关闭连接,客户端解析回发响应头,恢复页面。

2.1 HTTP 请求和响应

2.1.1 报文
在 HTTP 请求和响应的过程中传递的数据块就叫报文,其中请求时浏览器发送的是请求报文,响应时服务器发送的是响应报文。报文中是特定格式的要传递的数据(内容)和一些附加信息(报文首部)。

2.1.2 请求报文
1、请求的方式(Request Method)

  • GET 请求数据
  • POST 发送数据

2.1.3 响应报文
响应报文我们主要需要了解以下几个内容:

1、HTTP 状态码

1) 200 请求成功
2) 404 请求资源没有被找到
3) 500 服务器端程序出错
4) 400 客户端请求语法有误

2、内容类型(高版本的浏览器不用指定)

1) text/html(html 文件)
2) text/css(css 文件)
3) application/javascript( js 脚本)
4) image/jpeg(jpeg 格式的图片文件)
5) application/json(json 文件)

HTTP和HTTPS的主要区别:

HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。


备注:TCP三次握手,四次挥手详细介绍:https://www.eet-china.com/mp/a44399.html
数据完整传输过程:https://blog.csdn.net/u011563903/article/details/90116368
其他博主对浏览器输入www.baidu.com后执行的全部过程解释:https://codeantenna.com/a/MYzwa4Upih

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值