网络
域名
域名是为了解决 IP 地址难以记忆并为人们提供了方便记忆的地址。
域名的结构
一个域名是由几部分(有可能只是一部分,也许是两部分,三部分…)组成的简单结构,它被点分隔,不同于中文书写顺序,它需要从右到左阅读。

TLD(Top-Level Domain,顶级域名),顶级域名可以告诉用户域名所提供的服务类型。最通用的顶级域名(.com, .org, .net)不需要 web 服务器满足严格的标准,但一些顶级域名则执行更严格的政策。比如:
- 地区的顶级域名,如.us,.fr,或.sh,可以要求必须提供给定语言的服务器或者托管在指定国家。这些 TLD 通常表明对应的网页服务从属于何种语言或哪个地区。
- 包含.gov 的顶级域名只能被政府部门使用。
- .edu 只能为教育或研究机构使用。
顶级域名既可以包含拉丁字母,也可以包含特殊字符。顶级域名最长可以达到 63 个字符,不过为了使用方便,大多数顶级域名都是两到三个字符。
获取一个域名
过程:
- 去域名注册商的网站。
- 通常那些网站上都有突出的”获得域名”宣传,点击它。
- 按要求仔细填表。一定要仔细检查你是否有将你想要的域名拼错。一旦你给错误域名付款了,便为时已晚!
- 注册商将会在域名正确注册后通知你。数小时之内,所有 DNS 服务器都会收到你的 DNS 信息。
HTTP
HTTP 是超文本传输协议。HTTP协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次HTTP请求。 HTTP会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,HTTP会立即将TCP连接断开,这个过程是很短的。 所以HTTP连接是一种短连接,是一种无状态的连接。
HTTP 常见的状态码有哪些?

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。
- 「200 OK」是最常见的成功状态码,表示一切正常。如果是非
HEAD请求,服务器返回的响应头都会有 body 数据。 - 「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。
- 「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
- 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
- 「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。
- 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。
4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
- 「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。
- 「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。
- 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。
- 「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。
- 「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。
- 「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
- 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。
TCP/IP
TCP 概述
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。
建立一个 TCP 连接是需要客户端与服务端达成上述三个信息的共识。
- Socket:由 IP 地址和端口号组成
- 序列号:用来解决乱序问题等
- 窗口大小:用来做流量控制
UDP 和 TCP 有什么区别呢?分别的应用场景是?
UDP 不提供复杂的控制机制,利用 IP 提供面向「无连接」的通信服务。
UDP 协议真的非常简,头部只有 8 个字节(64 位)。
TCP 和 UDP 区别:
连接:
TCP 是面向连接的传输层协议,传输数据前先要建立连接。
UDP 是不需要连接,即刻传输数据。服务对象:
TCP 是一对一的两点服务,即一条连接只有两个端点。
UDP 支持一对一、一对多、多对多的交互通信可靠性:
TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议,具体可以参见这篇文章:如何基于 UDP 协议实现可靠传输?(opens new window)拥塞控制、流量控制:
TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。首部开销:
TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
UDP 首部只有 8 个字节,并且是固定不变的,开销较小。传输方式:
TCP 是流式传输,没有边界,但保证顺序和可靠。
UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。分片不同:
TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。
TCP 和 UDP 应用场景:
由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
FTP 文件传输;
HTTP / HTTPS;
由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:
包总量较少的通信,如 DNS 、SNMP 等;
视频、音频等多媒体通信;
广播通信;
TCP 连接建立,三次握手过程是怎样的?

第三次握手是可以携带数据的,前两次握手是不可以携带数据的
TCP 断开连接,四次挥手过程是怎样的?

在特定情况下,四次挥手是可以变成三次挥手的,具体情况可以看这篇:TCP 四次挥手,可以变成三次吗?
IP 概述
在 TCP/IP 网络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则无法实现正常的通信。
IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以二进制的方式处理的。
而人类为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4 组,每组以「.」隔开,再将每组转换成十进制。

IP 地址的分类
IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。

A、B、C 分类对应的地址范围、最大主机个数:

DNS
DNS 请求如何工作?
正如我们所看到的,当你想在浏览器中展示一个网页的时候,输入域名比输入 IP 简单多了。让我们看一下这个过程:
- 在你的浏览器地址栏输入
mozilla.org。 - 你的浏览器询问你的计算机是否已经识别此域名所确定的 IP 地址(使用本地 DNS 缓存)。如果是的话,这个域名被转换为 IP 地址,然后浏览器与网络服务器交换内容。结束。
- 如果你的电脑不知道
mozilla.org域名背后的 IP, 它会询问一个 DNS 服务器,这个服务器的工作就是告诉你的电脑已经注册的域名所匹配的 IP。 - 现在电脑知道了要请求的 IP 地址,你的浏览器能够与网络服务器交换内容。




