挑灯夜读——Java基础:网络连接—探索浏览器

本文详细探讨了网络连接的过程,从浏览器输入URL开始,解析URL的各个组成部分,包括协议、域名、端口和参数。接着讲解了HTTP协议的基本原理和请求消息的生成。此外,还阐述了IP地址与域名并用的原因,以及DNS服务器在解析域名到IP地址中的作用。最后,简要提及了DNS查询和解析器的工作原理。
摘要由CSDN通过智能技术生成

网络是怎样连接的(一)

第一弹:探索浏览器内部
  • 随着夜读小王子的视线,一起来想一想,我们的这个万维的网络世界,如此复杂。那么我们是怎样准确的访问某个网站,该网站的服务器又是如何准确的找到我们这个主机的地址,将我们要访问的内容发送到我们的设备上?
  • 就像我看这本书之前,就是在一次三次握手、四次挥手的问题中,产生了思考,经过简单的了解后,虽然知道了这些规则的原理和后面的规则。但是不满足这样的小部分理解,我想打开网络连接这个大门。
  • 于是,这个大门就被一本《网络是怎样连接的》书打开了!
  • 话不多说,倘若想要花费较短的时间来学习这方面的知识,建议看完,如果想详细了解,请到某宝或者某当购买。
第一步:生成请求消息
  • 我们随着一个一个的步骤来了解整个连接的过程。如下:
  • 1:输入我们的网址
https://editor.csdn.net/md?not_checkout=1&articleId=117914158
//这是我博客的网址
  • 既然我们输入了地址,那么我们就必须知道输入的地址如何组成对吧。那么我们是否在某些地方看到过这样的网址:
127.0.0.1:8080
//这是我们的本地服务器的地址端口,很常见对吧,这就是我们的网址原型
  • 其实,我们输入的所有的网址都是这样的形式组成,就像我们输入www.baidu.com,看似输入简单,其实它的IP地址可能是
234.23.12.43:1234
//当然这样不是准确的IP和端口,而且可能也不在我们国家
  • [附带知识]:其实我们的很多好的IP已经被发达国家占有了,不同的国家或地区会分到一段区间,当然因为我们加入互联网的时代不是很早,所以分到了不是很靠前的区间,而且很多很简短的域名也被很多国家提前注册了,比如www.a.com,想一想这样的网址,多好记。当然如果你在几十年前就注册了这个域名,并且使用权在你手上,那么你怕是要暴富。
  • 好了,回归主题。我们输入了网址:
//还是就我的博客网址作分析
https[1]://editor.csdn.net[2]/md[3]?not_checkout=1&articleId=117914158[4]
//前面的https就是我们的加密协议,它是相对于http加了密,它们是一个超文本传输协议
  • [1] 超文本传输协议:那么我就不得不提其它协议:ftp:文件传送协议,这个一本会出现在我们需要下载或者上传数据资源。mailto:电子邮件传输协议,后面就是我们输入的邮箱地址了。file:读取客户端本地文件的协议。news:阅读新闻组的文章时。
  • [2] web服务器域名:前面的英文是编辑者.csdn官网.net后缀名,就和我们的.com、.cn后缀名一样。
  • [3] md是我们的文件路径名,相对于我们存储的文件路径一样,想象成我们的这个编辑文章的网址就放在该网站服务器的某个文件夹下。
  • [4] ?和&是不同的概念,?后面的内容简单来讲,就是我们后面会将一组参数发送给服务器,这个参数可以是我们自己设置,当然这里已经分到了以恶搞数组,分别是not_checkout = 1和articleId=117914158。也就是说我们在上传我们文章时,服务器需要两个参数来分类保存,这个参数是我们某些方式生成的。&当然不用再解释了,就是一个and条件,就是我们多个参数要一起传进去,否则会出现错误。
  • 当然我们也看到了,网址会有出现省略的部分,例如www或者端口号,还有用户名、密码、计算机名等
  • 2:浏览器解析解析URL
URL老是听说,但是它的全称叫统一资源定位符,也就是Uniform Resource Locator
  • 也就是我们上面的网址,当我们输入地址后,是一串英文字符,这个英文字符电脑可不是直接就去找相应的服务器,为什么不直接用baidu来搜索我们的服务器,毕竟这也是英文字符,计算机不就是美国发明的吗?
  • 一开始确实会有这种想法,但是存在即合理,他之所以会转换解析,可是一群对计算机通信极其了解的人创建,其思考的机制指定谨慎,不然为何不改变呢?
  • 那就是传输成本问题!
  • 英文字符和数字,谁占有的字节数最多,一个b字符和2谁的字节数多,不言而喻。倘若用英文字符来传输至服务器,不仅传输成本、延迟都会高于数字。
  • 好了,当然上面已经提到了,其实就是按照——协议——域名——端口——目录——参数的形式,当然不是所有的信息都会出现在网址中,会出现省略的情况。
  • 3、省略文件名的情况
  • 就是说一般情况下我们都会访问某个域名下的dir目录,也就是说,我们输入:
//这是我们输入的网址
http://www.baidu.com/
//其实它的网址应该是
http://www.baidu.com/index.html
  • 就是说,它的主页面是第二个形式,但是我们不用输入这样的网址也能访问主页,这就是我们的省略模式。
  • 这样也是为使用者考虑,避免输入时,老是输入后面的文件名,会不会很麻烦。这就是前辈们慎重考虑得出的结论。
  • 4、HTTP基本原理
  • 说到这里我们是否对HTTP还不是很理解,他这个协议到底是什么原理,形式又是怎样的,下面我们就阿里一一了解:
    在这里插入图片描述
  • 其中第一步就是客户端,也就是浏览器发送请求消息,携带着我们的方法和URI(统一资源标识符),到达我们的服务器,服务器给出响应消息,这些消息携带者我们网页的内容,也携带者状态码(状态码就是我们访问失败会出现的404等等,他们每一个数字代表不同的访问内心,例如1开头代表告知请求进度和情况
  • 第一步中间的方法,就是我们浏览器请求的消息是什么?如果我们需要访问这个网页,就会执行下一个网页显示的任务,所以正确的请求消息十分重要。
  • HTTP的方法
  • HTTP会有一些方法,比如get、post、head、put等,他们都是我们要执行的一些命令的方法,其中常用的get为获取URI文件内容,也就是我们客户端获取服务器中文件内容。而post是发送命令,将我们的信息从客户端发送到服务器。
  • 5、生成请求消息
  • 我们现在也知道了URL的含义,解析了它的内容,下面就是我们的消息生成了。
<方法><空格><URI><空格><HTTP版本>
//其实上面这一行请求消息就已经可以大致了解我们需要干什么了,假如我们没有什么信息需要上传给服务器
,就不会有其他内容了,但是倘若需要发送消息时下面接:
<字段名><字段值>//这是消息头
<空格>
<消息体> //这是我们携带的消息体,通过网页表单发送
  • 下面是我们的响应消息发送:
<HTTP版本><空格><状态码><空格><响应短语> 
<字段名><字段值> //这是消息头
<空格>
<消息体>
  • 还有各种HTTP头字段,想继续了解的可以自行查找。
  • 6、收到响应
  • 既然服务器已经收到了我们客户端发送的请求,那么服务器就会发送一段响应消息给我们的客户端,这个消息就是状态码加一些消息体携带的信息。
  • 而状态码就是我们所说的客户端访问服务器的一个结果反馈,如下:
状态码含义
1**告知请求的处理进度和情况
2**成功
3**需要进一步操作
4**客户端错误
5**服务器错误
  • 以上就是我们的整个生成HTTP消息的过程,是不是理解起来就没有那么难了,下面我们接着聊,生成了消息后继续做什么?
向DNS服务器查询Web服务器的IP地址
  • 1、IP地址的基本知识
  • 为什么要提IP的基本知识呢?因为我们在前面已经讲过了,IP地址其实一串32个比特、4个字节的数字,而不使用字符串诸如:
www.baidu.com
  • 而是使用123.13.12.32是因为它的占有字符少,对我们的服务器来讲,确实减少了不少的压力,虽然现在的服务器访问容量越来越大,但是有个更小的为什么不去使用。
//IP地址
123.23.42.124
//子网掩码
/255.255.255.0
  • 前面的IP地址可能我们使用的较少,但是我们至少还听说过过,或者一些学校地内网什么的,还使用过。但是其子网掩码就基本没有使用过了,而子网掩码的作用就是和IP地址一起使用。子网掩码的作用就是来分析出我们的IP地址是什么?
  • 我们前一段是在浏览器中输入了我们的网址,但是浏览器不能拿着网址就去找服务器啊!那么浏览器会如何做呢?肯定有一段很复杂的过程!这个过程会在后面提到,但是我们的IP地址被送到指定的解析器(对域名进行解析的地方),解析后得到一个如上所示的IP地址,那就是我们寻找指定服务器的地图。IP地址就像我们的快递填写的地址,它能找到指定的位置就靠这个了。这里会牵扯TCP/IP的概念,而这个TCP/IP的结构就像如下这样:
    在这里插入图片描述
  • 这里的作用就是我们会将拿到的IP地址传到最近的一个路由器中,再层层上传至服务器,这里的路由器可能不止两个,还可能更多。总而言之,就是会有集线器把我们的客户端汇总,然后上传至路由器,然后到服务器。其中子网,可以理解为我们上面所讲的快递地址,路由器会根据地址判断要去哪儿,然后找到正确的方向,发送过去。
  • 上面讲到过子网掩码的知识,下面继续深入:

10.11.23.12/255.255.255.0
IP地址主体/子网掩码
这里就将IP地址主体分为了两端,前面三个10、11、23代表的是网络号,后面则是主机号。
这里的子网掩码就是来让计算机区分的
主机号可以为0,这代表整个子网
而当主机号为1时,就代表了其向子网上所以设备发送包,也就是我们所说的 “广播”。

  • 好了上面的IP地址和子网掩码的内容已经介绍了,下面我们开始学习域名和IP地址并用的理由
  • 2、域名和IP地址并用的原因

我们在前面讲过,我们在寻找服务器时不使用域名是因为我们传输的成本大于IP,那么我们为什么输入时不直接输入IP,而是域名?这样不是会省掉很大的一段解析时间吗?

  • 上面的这个问题也是我思考到的一个问题,但是很快被我的思绪否决了,那就是这个IP你记得住吗?百度、搜狗、网易、华为、阿里、腾讯等等等等,莫非你要带个笔记本一一记下来,我觉得大可不必。那么直接记起域名就行了,而大公司的域名一般都是公司名称的拼音,所以很简单的事情不是吗?
  • 只是,我们来解析这个域名有专门的东西,这个东西就叫做DNS(域名服务器 Domain Name System),那么我们想要将请求发送给DNS,就是通过的DNS客户端发送给DNS服务器的,而这个发送的DNS客户端就是我们Socket库里面的一段程序,它也就是解析器,所以这样的解释就不会让我们觉得很虚无缥缈了。

你需要将域名发送给DNS服务器就好了,他会反馈给你一段IP,这个解析过程就像你在问路。
A:你好!请问一下,百度服务器怎么走(IP地址是什么)?
B:好了,我查了查,你沿着XX走到XX(123.12.124.12)
A就是我们发送域名的系统,这个系统可不是浏览器直接发送的,因为它不具有这样的功能,是操作系统给它代发的,相当于浏览器是一个买家,但是它不需要自己干快递啊,直接找专门干快递的就行。
B就是我们的域名服务器DNS

  • 好了,域名服务器也知道了,那么就说说我们的Socket包吧,假若我们曾经编写过网络通信方面的代码,一定记得:在这里插入图片描述
  • 是否看到了这样熟悉的影子,这就是我们所说的一个封装好的解析器,也就是一个类。
  • 4、通过解析器向DNS服务器
  • 这个解析器内部是由C语言写成的,这个内部大概就是我们发出的HTTP请求消息一样:
<内存地址>=gethostbyname("www.baidu.com");
  • 以上就是我们的解析器的调用方法,当然,内容示例不止这一点点,还有我们经常所说的消息头什么的。其实编码的内容不是很多,想了解更多的内容,还需要继续深入,诸如我们的解析器内部原理。
  • 5、解析器内部原理
  • 第一步:我们的应用程序就是web浏览器收到了一个网址
  • 第二步:其通过Socket生成发送给DNS服务器发送查询消息
  • 第三步:操作系统内部的协议栈发送UDP消息
  • 第四步:将其送入我们的DNS服务器(当前这中间会有一个网卡的信息传递作用)

下面就是我们的DNS解析过程,这里的内部原理比较复杂,也会在后面提到,所以这里就先不讲。

  • 那么我们是否想到了这样的一个问题,既然我们要发送到DNS服务器,那么这传输的第一个服务器的IP是什么

:当然这也是个问题,所以在我们设置时,会有一个首选的DNS服务器设置。这就解决了。

  • 好了,我看着,好像编辑的次数已经很多了,我们休息一下,然后继续下一节的全世界的DNS服务器接力
个人感悟:
  • 今天是个比较平凡的一天,除了打完了第二针疫苗,还有就是收到了中国平安的offer(实习生,Java)。然后就是收到了字节的面试邀请,以及腾讯科技的面试邀请。
  • 这章内容其实看着还是比较多,但是它的知识理解起来还是可以接受的,毕竟这是消化一次后的总结结果,希望有不同意见,一起交流交流!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米店不卖你

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值