【前端面试之计算机网络】三次握手四次挥手以及七层网络结构

一、进程与线程

进程就是在内存中正在运行 的应用程序。

  • 在内存中独占一个内存空间
  • 进程和进程之间是隔离的

线程:就是进程的最小执行单位。

  • 一个进程是由多个线程组成的
  • 每个线程之间

一个页面启动的时候到底启动了几个进程?

  • 浏览器主进程 :主要负责页面显示、用户交互、子进程管理
  • 渲染进程:核心任务是将HTML、CSS和javaScript转换为用户可以与之交互的页面。
  • 网络进程:主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的
  • GPU进程:GPU图形处理器。

二、七层网络结构:

  1. 物理层:使用一定的物理介质(光纤、网线wifi) 01 信号
  2. 数据链路层:MAC地址在数据链路层
  3. 网络层:IP协议
  4. 传输层:UDP(用户数据包协议)/TCP(传输控制协议)
    1. 其中UDP协议的特点: 只管发,不管收 DNS。什么情况下用到了UDP协议:微信电话 、流媒体
    2. TCP协议的特点
      - 重传机制
      - 排序机制–根据数据包的编号对数据进行排序,重组数据包。保证数据包的完整性和准确性。
  5. 会话层 断点续传
  6. 表示层 翻译 解决不同系统之间数据传输的问题
  7. 应用层 HTTP协议

什么是四层网络结构呢:

  • 物理层 物理层、数据链路层
  • 网络层
  • 传输层
  • 会话层、表示层、应用层

三、输入URL地址浏览器以及服务器上发生了什么:

在这里插入图片描述

此图参考了:https://juejin.cn/post/6846687590540640263

浏览器发送HTTP请求的流程:

  1. 构造请求行
  2. 查找缓存 有缓存就去找缓存,没有缓存就发送网络请求
  3. 准备IP地址和端口号
  4. 等待TCP队列 因为一个域名最多只能简历6个TCP连接
  5. 建立TCP链接
  6. 发送HTTP请求

服务器处理HTTP请求:

  1. 返回请求内容
  2. 断开连接

四、从输入URL地址到浏览器显示页面发生了什么?

从进程的角度讨论
浏览器主进程、网络进程、渲染进程
在这里插入图片描述

五、TCP的三次握手和四次挥手

一个完整的TCP连接生命周期包括了“建立连接”、“传输数据”和“断开连接”三个阶段。

1、三次握手

下面这个图对应的是三次握手,以及每次握手中涉及到的两个信号量:SYN、ACK
在这里插入图片描述
三次握手可以携带数据吗?
答:第一次、第二次握手不可以携带数据,而第三次握手是可以携带数据的。假设第一次可以携带数据,如果有人恶意攻击服务器,每次都在第一次握手中的SYN报文放入大量数据,重复发送大量SYN报文,此时服务器会花费大量内存空间来缓冲这些报文,服务器就更容易被攻击了。
为啥不能两次握手?
因为这个时候服务端无法判断客户端是否可以接收数据。第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。

参考:原文链接:https://blog.csdn.net/LiuRzhi/article/details/119357828

2、四次挥手:

客户端:我数据传完了,我要下线了
服务器:知道了,我还有点数据,你等下
一段时间后:
服务器:我数据发完了,你可以下线了
客户端:好的

在这里插入图片描述

四次挥手:

  1. 客户端主动调用close时,向服务端发送结束报文段FIN报,同时进入FIN_WAIT1状态;

  2. 服务器会收到结束报文段FIN报,服务器返回确认报文段ACK并进入CLOSE_WAIT状态,此时如果服务端有数据要发送的话,客户端依然需要接收。客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段;

  3. 服务器端数据发送完毕后,当服务器真正调用close关闭连接时,会向客户端发送结束报文段FIN包,此时服务器进入LAST_ACK状态,等待最后一个ACK的带来;

  4. 客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出送确认报文段ACK;服务器收到了对结束报文段确认的ACK,进入CLOSED状态,断开连接。而客户端要等待2MSL的时间,才会进入到CLOSED状态

    注:在tcp通信的时候,如果两端长时间没有数据往来,就会每隔端事件,服务器向客户端发送一个探测数据报,要求客户端进行回复,
    如果连续多次没有收到相应的话,就认为连接已经断开。
    长时间默认是2个小时,每隔段时间默认是75s,连续次数一般是9次。
    

发送HTTP请求

下面这个图是通过wireshark抓取来的数据样子、相应对应的数据样子。
这个是get请求,因此没有请求体,只有POST才有请求体。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值