但是由于 IP 地址由一串数字组成,不够语义化,为方便你记忆,我们将 IP 地址映射为域名,于是就有这样一个服务,维护了 IP 和域名的映射关系,它就是非常重要的基础设施——DNS 服务器 。DNS 服务器是一个分布式数据库,分布在世界各地 。
为提高效率,DNS 是按照一定的结构进行组织的,不同层次之间按照英文句点. 来分割 。
在域名中,我们的层级关系是按照从左到右、从低到高排列的,不同层级由低到高维护了一个树形结构,最高一级的根节点为 root 节点,就是我们所谓的根域名服务器,因此 cosmos.com 完整的域名应该是 cosmos.com.,后面的 . 相当于.root 。
但是所有域名的顶级域名都一样,因此被省略;再下一级.com 为顶级域名;再下一级的 cosmos 为权威域名 。
因为这是一个树形结构,所以客户端只要请求到一个 DNS 服务器,就可以一层层递归和迭代查找到所有的 DNS 服务器了 。按照由高到低的优先级,DNS 域名解析的过程排列如下 。
DNS解析 > 浏览器DNS缓存 > hosts文件 > 本地DNS服务器 > ISP DNS服务器
操作系统协议栈(传输层和网络层)已经根据 URL 拿到需要请求的唯一地址了,接下来就要委托操作系统将 HTTP 报文发送出去了,这个过程由操作系统中的协议栈负责处理 。
TCP/IP 协议栈是现在使用最广泛的网络协议栈,Internet 就是建立在 TCP/IP 协议栈基础上的 。除 TCP/IP 协议栈外,我们的操作系统内核可以支持多个不同的协议栈,如后续我们将会用到的 LwIp 。
协议栈内部分为几部分,分别承担着不同的作用 。
协议栈的上半部分负责和应用层通过套接字(Socket)进行交互,它可以是 TCP 协议或 UDP 协议 。应用层会委托协议栈的上部分完成收发数据的工作
协议栈的下半部分则负责把数据发送给到指定方的 IP 协议,由 IP 协议连接下层的网卡驱动 。
可靠性传输:建立 TCP 连接浏览器通过 DNS 解析拿到 Cosmos 的 IP 地址后,浏览器取出 URL 的端口(HTTP 默认 80,HTTPS 默认 443) 。随即浏览器会委托操作系统协议栈的上半部分创建新的套接字(Socket)向对应的 IP 发起 TCP 连接请求 。
为了确保通信的可靠性,建立 TCP 首先会先进行三次握手的操作,可结合下面的图示理解 。

文章插图
那么 TCP 的三次握手操作,是如何进行的呢?具体的操作步骤如下 。
1.首先浏览器作为客户端会发送一个小的 TCP 分组,这个分组设置了一个特殊的 SYN 标记,用来表示这是一条连接请求 。同时设置初始序列号为 x 赋值给 Seq (这次捕获组的数据为: SYN=1, Seq=1) 。
2.服务器接受到客户端的 SYN 连接后,会选择服务器初始序号 y 。同时向客户端发送含有连接确认(SYN+ACK)、Seq=0(本例中的服务器初始序号)、Ack=1(客户端的序号 x +1)等信息的 TCP 分组 。
3.客户端收到了服务器的确定字段后,向服务器发送带有 ACK=1、Seq=1 (x+1)、Ack=1 (服务器 Ack 信息的拷贝)等字段的 TCP 分组给服务器 。即使是发送一个 TCP 分组,也是一次网络通信,那么对于 TCP 层来说,这一次通信的数据前面就要包含一个 TCP 包头,向下层表明这是个 TCP 数据包 。TCP 包头其实是一个数据结构,我为你准备了一幅图,以便理解 。
下图就是 TCP 的包头,对于 TCP 头部来说,以下几个字段是很重要的,你要格外关注 。
TCP包头图示:

文章插图
首先,源端口号(Source port)和目标端口号(Destinantion port)是不可少的,如果没有这两个端口号,数据就不知道应该发给哪个应用 。
其次,你需要注意的是一串有序数字 Sequence number,这个序号保证了 TCP 报文是有序被接受的,解决网络包的乱序问题 。
之后的 Acknowledgement number 是确认号,只有对方确认收到,否则会一直重发,这个是防止数据包丢失的 。
紧接着还有一些状态位,由于 TCP 是有状态的,是用于维护双方连接的状态,状态发生变更会更新双方的连接状态 。后面还有一个,窗口大小 Window Size,用于流量控制 。
TCP 层封装好了数据包,会将这个 TCP 数据包向下层发送,而 TCP 层的下层就是 IP 层,下面我们一起去瞧一瞧完成目的地定位的 IP 层 。
目的地定位:IP层在IP协议里面需要有源地址IP和目标地址IP:
源地址IP,就是客户端输出的IP地址
目标地址IP,即通过DNS域名解析得到的web服务器ip
推荐阅读
- 使用 Python 进行网络爬虫——从0构建简单爬虫
- 重生的 SDN?云原生网络功能介绍
- 使用树莓派安装OpenVPN,在外部访问家庭内部网络
- 高中女孩早恋家长正确处理 高中女生早恋家长应该怎样处理
- 外蒙古正式脱离中国,成为独立主权国家是在什么时期 当年外蒙古是怎么独立出去的
- 怎样让初中孩子爱上学习
- 初中女孩早恋家长怎么办如何正确处理
- 孩子不想上学可以办休学吗高中 孩子不想上学可以办休学吗
- 怎样处理初中儿子早恋 儿子初中早恋父母该怎么处理
- 高中孩子浮躁怎么办,高中孩子浮躁家长怎么办
