计算机网络原理

目录

1.OSI七层模型

2.TCP三次握手

为什么要三次握手,两次可以吗? 

3.TCP四次挥手

为什么建立连接需要三次,释放连接需要4次?(第二次和第三次不能合并)

 4.输入一个URL发生了什么 

5.HTTP报文结构


1.OSI七层模型

  1. 物理层:传输原始的比特流,处理与物理媒体(如电缆、光纤等)的接口。通过以太网电缆、光纤或无线网络进行数据传输。
  2. 数据链路层:将数据分割成帧,并处理传输中的错误。以太网(Ethernet)和点对点协议(PPP)
  3. 网络层:路由选择。IP协议是网络层的核心,它使得数据包能够在互联网中正确路由。其他路由协议如OSPF、BGP等也在这一层运行。
  4. 传输层:TCP提供可靠的、面向连接的服务,而UDP则提供无连接的服务。例如,网页浏览通常使用TCP协议,而实时音视频通信可能使用UDP以减少延迟。
  5. 会话层:建立、维持和终止会话
  6. 表示层:数据压缩、加密和解密
  7. 应用层:直接为用户提供网络服务。包括电子邮件(SMTP、POP3、IMAP)、文件传输(FTP、TFTP)、HTTP、DNS服务用于域名解析,以及各种远程登录和管理服务。

2.TCP三次握手

  1. 第一次握手(SYN):客户端向服务器发送连接请求报文,即SYN报文段。此时客户端进入SYN_SENT状态,等待服务器确认。

  2. 第二次握手(SYN + ACK):服务器收到客户端的SYN报文段后,如果同意建立连接,会发送一个确认报文段(ACK)作为应答,并同时发送自己的连接请求报文,即SYN报文段。此时服务器进入SYN_RCVD状态。

  3. 第三次握手(ACK):客户端收到服务器的确认后,会发送一个确认报文段,表示收到了服务器的确认,并且服务器的连接请求也被接受。此时客户端和服务器都进入ESTABLISHED状态,连接建立成功,可以开始进行数据传输。

TCP(传输控制协议)是一种全双工通信协议。全双工通信意味着通信双方可以同时进行发送和接收数据的操作,而不需要在时间上进行交替。 

为什么要三次握手,两次可以吗? 

不可以。

三次握手让双方确认自身的发送和接受能力;

防止已经失效的请求报文又传送到了服务端引起错误(状态不一致);

防止建立重复连接,浪费浏览器资源。

两次握手就建立成功连接的话,也存在很容易被恶意攻击的问题:SYN洪水,此时服务器存在大量连接,但攻击者(客户端)并没有受到任何影响。这样使得服务器的资源慢慢被消耗殆尽。

3.TCP四次挥手

  1. 第一次挥手(FIN):客户端决定关闭连接时,会发送一个FIN(结束)报文给服务器,表示自己不再发送数据,但仍然可以接收数据。发送FIN后,进入FIN_WAIT_1状态。

  2. 第二次挥手(ACK):服务器收到FIN报文后,会发送一个确认报文(ACK),表示已经收到了关闭请求。此时,服务器进入CLOSE_WAIT状态,这个状态会持续一段时间,因为服务端可能还有数据没有发完。而客户端进入FIN_WAIT_2状态。

  3. 第三次挥手(FIN):服务器也决定关闭连接时,会发送一个FIN报文给客户端,。发送FIN后,服务器进入LAST_ACK状态,等待最后一个ACK的确认。

  4. 第四次挥手(ACK):客户端收到对方的FIN报文后,会发送一个确认报文(ACK)。此时,客户端进入TIME_WAIT状态,等待可能出现的对方重发的ACK确认。当客户端经过2MSL(MSL为报文最大存活时间),进入CLOSED状态,连接关闭完成。而服务器在接收到客户端的ACK后,也进入CLOSED状态,连接彻底关闭。

最后一个ACK报文可能会丢失,此时会触发超时重传,服务端会重新发起第三次挥手FIN报文,客户端可以重新确认。(在1MSL的时间内,任何滞留的报文段都应该已经被丢弃或即将被丢弃。)

为什么建立连接需要三次,释放连接需要4次?(第二次和第三次不能合并)

在释放连接时,需要确保客户端和服务端都没有要发送的数据时候才能断开TCP。
客户端发出FIN时,只能保证客户端没有数据发送了,不能保证服务端也发完数据了。
服务端收到FIN时先回复客户端ACK确认收到,等到发完所有数据后,才会给客户端发送
FIN。不能一次性把确认报文和FIN报文发送给客户端,所以多了一次挥手。

 4.输入一个URL发生了什么 

  1. URL解析:浏览器首先会解析输入的URL,将其分解为各个组成部分,如协议(http://, https://, ftp://等)、域名、端口号(如果有的话)、路径、查询参数和片段标识符。

  2. DNS查询:浏览器会查询URL中的域名对应的IP地址。

  3. 建立TCP连接(对于HTTP/1.x):TCP三次握手。对于HTTPS,还会涉及TLS/SSL握手过程,以确保通信的加密和安全。

  4. 发送HTTP请求:浏览器会构建一个HTTP请求,并将其发送到服务器。这个请求包含了各种信息,如请求方法(GET、POST等)、请求的URL、请求头(User-Agent、Accept等)以及请求体。

  5. 服务器处理请求:读取文件、执行数据库查询、运行服务器端脚本等。

  6. 服务器发送HTTP响应:响应包含了状态码、响应头(Content-Type、Content-Length等)以及响应体(即实际的数据内容)。

  7. 浏览器接收并解析响应:如果状态码表示成功(如200 OK),浏览器会尝试解析并显示响应体中的数据。

  8. 渲染页面(对于HTML响应):如果响应体包含HTML内容,浏览器会开始渲染页面。这包括解析HTML文档、加载和解析CSS样式表、加载并执行JavaScript脚本等。渲染过程中可能还会涉及到DOM(文档对象模型)的构建和更新、CSSOM(CSS对象模型)的生成以及布局和渲染树的构建等。

  9. 关闭TCP连接(对于HTTP/1.x):在HTTP/1.x中,一旦响应被完全接收并处理,TCP连接就会被关闭。但在HTTP/2中,连接可以被多个请求和响应复用。

5.HTTP报文结构

(1)HTTP请求报文
HTTP报文通常由三个部分组成,请求行、请求首部和请求实体。

请求行通常包含请求方法、URL和HTTP协议版本;
请求首部主要包含主机名、持久连接标记、用户代理和语言;
请求实体通常会包含客户端想要发送到服务端上的数据,可以使用form-data格式或json格式。


(2)HTTP响应报文
响应报文也由三部分组成,分别是响应状态行、响应首部和响应实体。

响应状态行包含了HTTP协议版本、HTTP请求状态、请求状态描述三个参数;
响应首部中通常会包含一些持久连接标记、时间日期信息、数据长度和类型等字段;
响应实体中存放的就是我们向服务器请求的数据了。

1. 强缓存:
Cache-Control用于指定缓存的最长有效时间。

Expires用于指定资源过期的日期。

2. 协商缓存:
ETag用于标识资源的唯一标识符,浏览器会将前一次请求时获得的ETag值发送到服务器,由服务器判断资源是否发生了变化。

Last-Modified表示资源的最后修改时间,浏览器会将前一次请求时获得的最后修改时间发送到服务器,由服务器根据已有的最后修改时间决定是否返回资源内容。

3. HTTP/2缓存:
HTTP/2通过多路复用技术,在同个连接上同时传送多个请求和响应,减少了网络请求的延迟。

HTTP/2还支持服务器推送(Server Push)技术,服务器可以在浏览器请求之前主动将一些资源推送给浏览器,提前缓存这些资源。

4. Service Worker:
Service Worker能够拦截网络请求并缓存响应,当用户离线时,可以从本地缓存中获取资源,提供离线浏览能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值