从浏览器输入url到页面加载(四)协议栈和套接字以及三次握手确认对于通信的作用

news2024/10/5 18:34:30

前言

上一节我们说到了域名对用户记忆的优点,但是IP对于路由器的优点,所以需要有DNS服务器提供域名与IP地址的转换,还说到了在前端开发中dns-prefetch域名预解析的好处。

本小节呢,我们会说一些不常用的知识点,如协议栈套接字TCPUDP等,还会形象的描述一下三次握手,我相信狗哥对于三次握手的描述一定会让你印象加深的。

目录

前言

1.  认识协议栈

2. 认识套接字

3. 喜欢摸鱼的服务器?

4. http通信的三次握手确认连接

小节


 

1.  认识协议栈

与浏览器不同,浏览器输入url,发送http请求,我们都可以看到,甚至http请求的url,头信息,参数,cookie我们都可以看见,通过DNS域名解析,再将http消息发送给操作系统,紧接着就走到了我们看不见的协议栈

协议栈上半部分分为TCPUDP两个内容,TCP协议呢,主要负责像浏览器访问web服务器这种链路较长的收发数据工作;而UDP协议呢,负责DNS域名查询这种链路较短内容较少的收发数据工作。

协议栈的下半部分是IP协议控制网络包收发的操作部分。在互联网上传输数据,就像我们访问web服务器,整个过程的传输数据,会被切割成一个一个的网络包。我们常说丢包啦,就是丢失的这个协议栈环节的数据包。而将网络包给目标通信对象,比如服务器发送的操作,就是由IP来负责。

再然后是网卡驱动程序,由驱动程序来控制网卡,其实说了这么多,我们做软件开发,不得不说,人家硬件开发很强,最终网卡完成驱动,负责实际的接受和发送信号。什么信号?http消息数据,再到截断成一个个的网络包,再到这里成了网线中的电信号,就是这个过程。

2. 认识套接字

人类创造概念,或者说很多东西其实并不存在,而是我们不断的认知提升,将一些东西描述出来,赋予他概念。就比如说套接字,这就是一个概念。

协议栈内部有一块内存空间,用于存放我们传输数据的内存空间,比如ip地址,端口号,通信过程中的请求头,参数,cookie等,这些杂乱的东西,需要传输,但是太乱了,比如我们要发快递,为了便于发送传输呢,就需要打包,而这些个信息组合起来,存起来,我们叫他套接字。那么你说套接字这个东西真实存在不?是实体的还是虚拟的?

但套接字还不止包含这些信息,他还包含行为动作,比如我们给web服务器发送的信息可能丢包了,可能发出去没返回来,需要等待,这些事件都需要协议栈知道。而套接字呢,就要记录这些信息,是否收到web服务器的影响啦,我已经发送数据多长时间啦,协议栈是否需要重新发送一次请求等,这些套接字都需要记录,然后告诉协议栈。既然我们知道了套接字在协议栈中具有重要的意义,那么发送http请求的这个过程中,就得创建套接字,才能有套接字的这些工作内容。

3. 喜欢摸鱼的服务器?

从浏览器输入url到页面加载,必然要通过网线,对吧。既然要回答这个问题,这个最为重要的环节,你是否要说?或者说,面试官再问你这个问题,你就给他一根网线,然后啥也不说的看着他,看他是否能够秒懂,哈哈。

而我们浏览器所在的本地机器,和web服务端所在的服务器之间中间可能不远万里,怎么可能是一根网线呢,我们随便发送一个文字给服务端,这中间可能经历了N条网线,电缆,路由器,但不过多么复杂,这一组数据是包装在一起的,所以就要形成一个连接管道,而这个管道就是这么不远万里形成的一个通信管道。所以你也不要觉得通信怎么怎么加密了,怎么怎么安全了,这中间管道这么长,谁知道中间哪里就管道漏气了。

正常来说,服务端不同于我们客户端,或者是浏览器端,服务端会一直等待着我们给他发送请求,哪怕是websocket这种长链接,也是需要客户端先发送一次通知,或者我们去触碰他一下,告诉服务端我们要和你交互了,服务端才被激活,而这之前一直都是处于休眠状态,或者是半睡半醒状态,用现在的话说就是摸鱼状态。以后再有人说前端简单,你就说服务端一直处于摸鱼状态,我们前端不驱动他,他根本就啥也不干

 

4. http通信的三次握手确认连接

我们上面说,浏览器需要发送http消息,然后就开始委托操作系统了,操作系统里的协议栈开始起作用了,那么就要创建套接字。而光创建套接字的时候呢,协议栈也不知道要给谁发送请求,更不知道携带哪些信息。所以协议栈通过浏览器那里获取到了套接字所需要的数据内容,这样,客户端这边的机器就算准备好了。而服务端创建套接字的过程和客户端是一样的,光创建一下,或者平时我们不给他发消息的时候,他那个套接字也不知道用来要干啥,给谁发送东西,发送什么。

所以就需要客户端先向服务端发送一次消息,我站起来大喊服务端:老哥,醒醒,别睡了,我是前端的经海路大白狗,我想和你交互联调,我的IP是xx.xxx.xx.xx,我的端口是3000,然后我就回工位了。

这个时候服务端的套接字收到消息,将状态改为“正在连接”,服务器的协议栈开始做出响应,在通信过程中,双方都要确认我给你的信息你是否收到,现在是服务端确认收到了客户端的套接字发来的信息,那么服务端就得再给客户端发送一次请求,问客户端是否收到了服务端的请求。

服务端老哥又从工位上站起来,大声告诉我:狗哥,我们接下来这个接口要这样联调,你做好准备了吗,点按钮吧,我等着呢?

然后我再告诉服务端老哥:我要点按钮了啊。这样来回三次,确认双方都得到了确认,有来有回了,就可以开始通信了。

可能有人会问,为啥是三次握手,咋不多问几次?通过上面的形象的描述可知,赶紧干活儿联调吧,再多问几次就要下班了;而少问一次双方就不能得到互相确认这个环节。

 

小节

其实对于我们软件开发人员来说,再细节一点,我们面试回答“从浏览器输入url到页面加载”这道题,一般人也就是回答一下浏览器解析url,DNS域名解析,握手,挥手等,有没有必要回答,甚至有没有必要知道像协议栈,网卡,套接字这些知识点吗?其实日常开发是用不到的,甚至干10年开发也用不到,但日常用不到的东西,我们是否有必要对自己进行知识扩展去略微的学习一下呢?或者说面试的时候,有没有必要扩展说这些东西呢?那么我告诉你,日常开发翻来覆去,就是那点东西,而且真正需要比拼,真正需要你卷的时候,需要你拿着狙击枪决胜千里之外的东西,可能并非我们每天接触的这些日常的东西,你知不知道我在说什么?

关注狗哥,查看狗哥“动态”,有京东2023年实习内推职位哦,加油,祝2023届毕业生大展宏图!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【社区图书馆】读《悲惨世界》有感

文章目录 故事简介经典重现价值取向我的思想 故事简介 《悲惨世界》是一部充满了悲剧的小说,故事首先由教堂展开,然后主要围绕着主人公冉阿让进行一系列的生动形象的描写,讲述了冉阿让悲惨的一生。 主人公冉阿让是一个诚实、善良的工人&…

100天涨薪4k,从功能测试到自动化测试,我整理的3000字超全学习指南

去年6月份,由于经济压力让我下定决心进阶自动化测试,已经24的我做了3年功能测试,坐标广州薪资定格在8k,可能是生活过的太安逸,觉得8000的工资也够了,但是生活总是多变的,女朋友的突然怀孕&#…

SpringBoot 整合WebService详解

1. 概述 WebService服务端是以远程接口为主的,在Java实现的WebService技术里主要依靠CXF开发框架,而这个CXF开发框架可以直接将接口发布成WebService。 CXF又分为JAX-WS和JAX-RS,JAX-WS是基于xml协议,而JAX-RS是基于Restful风格&…

OCR卡证识别

文章目录 前言一、DBNet多分类二、步骤1.训练、训练模型推理、模型转换2.通过推理模型进行推理 三、解决思路1、查看模型2、tools/infer/predict_det.py修改3、utility.py修改 总结 前言 最近涉及到了身份证识别,为了便于匹配识别结果的属性,如姓名、身…

(二) AIGC—Stable Difussion (1)

1. 前置知识 目前通用的图像生成模型一般包含三个组件: Text Encoder 根据文字生成向量生成模型 根据向量和Noise 生成 缩小版本的图像Image Decoder 根据小分辨率图像生成大分辨率图像 2. Text Encoder 文字的Encoder对于结果的影响很大,增大Diffusio…

华为p60系列超级快充 Turbo技术,轻松搞定充电困扰!

随着手机的功能越来越丰富,电量消耗也越来越快,当手机电量剩余20%时,是否有电量焦虑。为了满足大家快速充电的需求,华为P60系列配备了超级快充Turbo充电技术,让我们手机充电更快,用的更久,从此告…

Python爬虫解读

爬虫: Python爬虫是指利用计算机程序或者脚本自动抓取网站数据的一种行为,通常是为了提取网站数据或者进行数据分析等目的。 Python 爬虫可以分为手动爬虫和自动爬虫两种。手动爬虫是指完全由人工编写代码来实现的爬虫,这种方式需要编写大量的…

ES使用小结

ES使用总结 1.查询es全部索2.根据es索引查询文档3.查看指定索引mapping文件4.默认查询总数10000条5.删除指定索引文档6.删除所有数据包括索引7.設置窗口值8. logstash简单配置Logstash配置:logstash 控制台输出 9. filebenat配置 1.查询es全部索 localhost:9200/_c…

为什么说网络安全行业是IT行业最后的红利?

前言 2023年网络安全行业的前景看起来非常乐观。根据当前的趋势和发展,一些趋势和发展可能对2023年网络安全行业产生影响: 5G技术的广泛应用:5G技术的普及将会使互联网的速度更快,同时也将带来更多的网络威胁和安全挑战。网络安全…

DHCP 给内网客户端分配ip地址

~ 为 InsideCli 客户端网络分配地址,地址池范围: 192.168.0.110-192.168.0.190/24; ~ 域名解析服务器:按照实际需求配置 DNS 服务器地址选项; ~ 网关:按照实际需求配置网关地址选项; ~ 为…

JAVAWeb08-手动实现 Tomcat 底层机制+ 自己设计 Servlet

1. 前言 先看一个小案例, 引出对 Tomcat 底层实现思考 1.1 完成小案例 ● 快速给小伙伴完成这个小案例 0. 我们准备使用 Maven 来创建一个 WEB 项目, 老师先简单给小伙伴介绍一下 Maven 是什么, 更加详细的使用,我们还会细讲, 现在先使用一把 先创建…

【MySQL】带你了解MySQL 如何学习MySQL以及MySQL的用途以及意义

目录 1 MySQL的起源和发展 1.0.1 数据库管理系统 1.1 MySQL的起源 命名由来: 1.2 MySQL的发展历程 2 什么是MySQL? 2.1 数据库 2.1.1 我们之前存储数据的格式: 2.1.2 使用数据库的目的: 2.1.3 数据库分类 2.2 SQL语句 2…

STM32-HAL-串口的printf重定向

一、C语言的格式化输出 C语言的printf是一个标准库函数,用于将格式化的数据输出到标准的输出设备(通常是终端) 基本语法: int printf(const char *format, ...);其中的第一个参数const char *format表示输出格式,后面…

Kubernetes核心组件及资源介绍

文章目录 一、Kubernetes架构二、Kubernetes核心组件三、Kubernetes核心资源四、拓展1、Service和Ingress的区别是什么?2、Replicaset和Deployment的区别是什么?3、Deployment和Statefulset的区别是什么?4、Job和Cronjob的区别是什么&#xf…

【FAQ】统一扫码服务常见问题及解答

1.隐私政策是怎么样的?收集哪些信息? 关于Scan Kit的隐私政策及收集的信息,请查看SDK隐私安全说明。 Android:SDK隐私安全说明 iOS:SDK隐私安全说明 2.如何使用多码识别?多码模式下如何实现指定条码&am…

vue生命周期的理解?

目录标题 一、什么是生命周期?二、生命周期的流程图: 一、什么是生命周期? Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译版、挂载Dom ->染、更新 ->渲染、卸载 等一系列过程,称这是Vue的生…

简单清晰了解B树和B+树

一.学习背景 在MySQL的学习中,我们了解到了索引的知识,而关于MySQL索引背后的数据结构,我们在这里进行学习. 首先,我们要了解到的是,MySQL的索引用到的数据结构为B树. 使用B树是因为,在数据量大的时候,内存不够用,大部分数据只能存放在磁盘上,只有需要…

【Linux命令行与Shell脚本编程】第七章 Linux文件权限

Linux命令行与Shell脚本编程 第七章 Linux文件权限 文章目录 Linux命令行与Shell脚本编程七,Linux文件权限7.1,Linux的安全性7.1.1,用户信息 /etc/passwd文件7.1.2,用户密码 /etc/shadow文件7.1.3,useradd 添加新用户7.1.4,userdel 删除用户7.1.5, 修改用户1,usermod2,passwd…

Hystrix Dashboard图形化监控

👉🏻 SpringCloud 入门实战系列不迷路 👈🏻: SpringCloud 入门实战(一)什么是SpringCloud?SpringCloud 入门实战(二)-SpringCloud项目搭建SpringCloud 入门实…

【云计算•云原生】1.什么是云计算?它为什么这么火?

文章目录 1.云计算基础什么是云计算云计算的分类开源软件、自由软件、免费软件 2.云计算机制云基础设施机制云管理机制云安全机制基本云架构 3.虚拟化技术服务器虚拟化服务器虚拟化技术CPU虚拟化内存虚拟化设备和I/O虚拟化存储虚拟化网络虚拟化桌面虚拟化 KVM 4.网络与存储基础…