网络

网络

域名

域名是为了解决 IP 地址难以记忆并为人们提供了方便记忆的地址。

域名的结构

一个域名是由几部分(有可能只是一部分,也许是两部分,三部分…)组成的简单结构,它被点分隔,不同于中文书写顺序,它需要从右到左阅读。

TLD(Top-Level Domain,顶级域名),顶级域名可以告诉用户域名所提供的服务类型。最通用的顶级域名(.com, .org, .net)不需要 web 服务器满足严格的标准,但一些顶级域名则执行更严格的政策。比如:

  • 地区的顶级域名,如.us,.fr,或.sh,可以要求必须提供给定语言的服务器或者托管在指定国家。这些 TLD 通常表明对应的网页服务从属于何种语言或哪个地区。
  • 包含.gov 的顶级域名只能被政府部门使用。
  • .edu 只能为教育或研究机构使用。

顶级域名既可以包含拉丁字母,也可以包含特殊字符。顶级域名最长可以达到 63 个字符,不过为了使用方便,大多数顶级域名都是两到三个字符。

获取一个域名

过程:

  1. 去域名注册商的网站。
  2. 通常那些网站上都有突出的”获得域名”宣传,点击它。
  3. 按要求仔细填表。一定要仔细检查你是否有将你想要的域名拼错。一旦你给错误域名付款了,便为时已晚!
  4. 注册商将会在域名正确注册后通知你。数小时之内,所有 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 区别:

  1. 连接:
    TCP 是面向连接的传输层协议,传输数据前先要建立连接。
    UDP 是不需要连接,即刻传输数据。

  2. 服务对象:
    TCP 是一对一的两点服务,即一条连接只有两个端点。
    UDP 支持一对一、一对多、多对多的交互通信

  3. 可靠性:
    TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
    UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议,具体可以参见这篇文章:如何基于 UDP 协议实现可靠传输?(opens new window)

  4. 拥塞控制、流量控制:
    TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
    UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

  5. 首部开销:
    TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
    UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

  6. 传输方式:
    TCP 是流式传输,没有边界,但保证顺序和可靠。
    UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

  7. 分片不同:
    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 简单多了。让我们看一下这个过程:

  1. 在你的浏览器地址栏输入mozilla.org
  2. 你的浏览器询问你的计算机是否已经识别此域名所确定的 IP 地址(使用本地 DNS 缓存)。如果是的话,这个域名被转换为 IP 地址,然后浏览器与网络服务器交换内容。结束。
  3. 如果你的电脑不知道 mozilla.org 域名背后的 IP, 它会询问一个 DNS 服务器,这个服务器的工作就是告诉你的电脑已经注册的域名所匹配的 IP。
  4. 现在电脑知道了要请求的 IP 地址,你的浏览器能够与网络服务器交换内容。

作者

冷冷

发布于

2019-09-29

更新于

2019-10-07

许可协议

CC BY-NC-SA 4.0

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×