《网络是怎样连接的》(一)

本文主要取材于 《网络是怎样连接的》 第一章。

简述:在浏览器输入一个网址,浏览器会解析出域名 ,但是直接使用域名无法找到Web服务器。需要使用DNS解析器将域名解析为IP地址 ,然后客户端可以创建套接字,延伸出管道根据IP地址和端口号,去找到对应的Web服务器的套接字完成连接。套接字连接之后相当于客户端和服务端之间生成了管道,就可以收发数据了。

本章共四个章节,(1)生成HTTP请求消息 (2)向DNS服务器查询Web服务器的IP地址(3)全世界DNS服务器的大接力 (4)委托协议栈发送消息

1.生成HTTP消息

当我们在 浏览器输入 网址 例如 :http:// www.lab.glasscom.com/dir/file1.html,浏览器会解析这个网址,解析过程如下,然后得到相应的Web 服务器名字,即 www.lab.glasscom.com,为了得到服务,客户端得找到Web服务器名对应的IP地址在哪里,这时候就需要DNS服务器出现了。

2.向DNS服务器查询Web服务器的IP地址

浏览器生成生成HTTP消息之后,接下来我们需要**委托操作系统将消息发送给Web服务器。在委托操作系统发送消息时,必须要提供的不是通信对象的域名,而是它的IP地址。**因此,在生成HTTP消息之后,下一个步骤就是根据域名查询IP地址。

查询IP地址的方法非常简单,只要询问最近的DNS服务器"www.lab.glasscom.com的IP地址是什么"就可以了,DNS服务器会回答说"该服务器的IP地址为xxx.xxx.xxx.xxx"。

我们的计算机上一定有相应的DNS客户端,而相当于DNS客户端的部分称为DNS解析器,或者简称解析器。通过DNS查询IP地址的操作称为域名解析 ,因此负责执行解析(resolution)这一操作的就叫解析器(resolver)了。解析器实际上是一段程序,它包含在操作系统的Socket库中。

3.全世界DNS服务器的大接力

第2部分讲了 DNS来解析域名得到IP地址,然而一个DNS服务器无法存储所有的域名和IP对,那么怎么办呢?

以下个域名为例,www.lab.glasscom.com这个域名如果按照公司里的组织结构来说,大概就是"com事业集团glasscom部lab科的www"这样。其中,相当于一个层级的部分称为域。因此,com域的下一层是glasscom域,再下一层是lab域,再下面才是www这个名字。 所有的上一级机构知道下一层机构的位置。

因此 客户端只要能够找到任意一台DNS服务器,就可以通过它找到根域DNS服务器,然后再一路顺藤摸瓜找到位于下层的某台目标DNS服务器(图1.15)。分配给根域DNS服务器的IP地址在全世界仅有13个,而且这些地址几乎不发生变化,因此将这些地址保存在所有的DNS服务器中也并不是一件难事。

4.委托协议栈发送消息

知道了IP地址之后**,就可以委托操作系统内部的协议栈向这个目标IP地址**,也就是我们要访问的Web服务器发送消息了。要发送给Web服务器的HTTP消息是一种数字信息(digital data),因此也可以说是委托协议栈来发送数字信息。收发数字信息这一操作不仅限于浏览器,对于各种使用网络的应用程序来说都是共通的。

向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用Socket库中的程序组件

在收发数据之前,客户端和服务器之间需要建立起管道。那么管道如何建立呢?

建立管道的关键在于管道两端的数据出入口,这些出入口称为套接字。

首先,服务器一方先创建套接字,等待客户端连接。

客户端有需求时,会创建套接字,然后从该套接字延伸出管道,接到服务器的套接字上,管道连接就完成了。当套接字连接起来之后,剩下的事情就简单了。只要将数据送入套接字,数据就会被发送到对方的套接字中。当然,应用程序无法直接控制套接字,因此还是要通过Socket库委托协议栈来完成这个操作

收发数据操作:

(1)创建套接字(创建套接字阶段)(2)将管道连接到服务器端的套接字上(连接阶段)(3)收发数据(通信阶段)(4)断开管道并删除套接字(断开阶段)

套接字:套接字是用来区分不同的服务的,例如一台计算机客户端可以同时访问多个Web服务器,那么就需要创建多个套接字。在计算机内部,是使用描述符来区分不同的套接字。

在将管道连接到服务的套接字时,应用程序通过调用Socket库中的名为connect的程序组件来完成这一操作。这里的要点是当调用connect时,需要指定描述符、服务器IP地址和端口号这3个参数。

描述符让协议栈知道使用哪一个套接字去连接, IP地址是找到相应的服务器,端口号是为了找到服务器对应的套接字。

描述符是用来在一台计算机内部识别套接字的机制,那么端口号就是用来让通信的另一方能够识别出套接字的机制。

问题:问什么不统一使用描述符或者 端口来识别套接字呢?

先保留问题,答案可能在6.2.3章节。

相关推荐
安步当歌38 分钟前
【WebRTC】视频发送链路中类的简单分析(下)
网络·音视频·webrtc·视频编解码·video-codec
米饭是菜qy1 小时前
TCP 三次握手意义及为什么是三次握手
服务器·网络·tcp/ip
yaoxin5211231 小时前
第十九章 TCP 客户端 服务器通信 - 数据包模式
服务器·网络·tcp/ip
鹿鸣天涯2 小时前
‌华为交换机在Spine-Leaf架构中的使用场景
运维·服务器·网络
星海幻影2 小时前
网络基础-超文本协议与内外网划分(超长版)
服务器·网络·安全
WeeJot嵌入式2 小时前
网络百问百答(一)
网络
湖南罗泽南2 小时前
p2p网络介绍
网络·网络协议·p2p
IPdodo全球网络3 小时前
解析“ChatGPT网络错误”:从网络专线到IP地址的根源与解决方案
网络·tcp/ip·chatgpt
腾科张老师4 小时前
为什么要使用Ansible实现Linux管理自动化?
linux·网络·学习·自动化·ansible
Sweet_vinegar4 小时前
Wireshark
网络·测试工具·安全·wireshark·ctf·buuctf