# 网络，第 1 部分：简介

> 原文：<https://github.com/angrave/SystemProgramming/wiki/Networking%2C-Part-1%3A-Introduction>

警告：很明显，页面是 _ 而不是 _ 完整的 IP，UDP 或 TCP 描述！相反，它只是一个简短的介绍，足以让我们在以后的讲座中建立这些概念。

## 什么是“IP4”“IP6”？

以下是互联网协议（IP）的“30 秒”介绍 - 这是从一台机器向另一台机器发送信息包（“数据报”）的主要方式。

“IP4”，或者更准确地说，“IPv4”是因特网协议的第 4 版，其描述了如何通过网络从一台机器向另一台机器发送信息包。目前，互联网上大约 95％的数据包都是 IPv4 数据包。 IPv4 的一个重要限制是源和目标地址限制为 32 位（IPv4 是在连接到同一网络的 40 亿设备的想法是不可想象的时候设计的 - 或者至少不值得使数据包大小更大）

每个 IPv4 数据包包括一个非常小的标头 - 通常为 20 个字节（更确切地说，“八位字节”），包括源和目标地址。

从概念上讲，源地址和目标地址可以分为两部分：网络号（高位）和低位表示该网络上的特定主机号。

较新的分组协议“IPv6”解决了 IPv4 的许多限制（例如，使路由表更简单和 128 位地址），但是不到 5％的网络流量是基于 IPv6 的。

机器可以具有 IPv6 地址和 IPv4 地址。

## “没有像 127.0.0.1 这样的地方”！

特殊的 IPv4 地址是`127.0.0.1`，也称为 localhost。发送到 127.0.0.1 的数据包永远不会离开机器;地址被指定为同一台机器。

注意，32 位地址被分成 4 个八位字节，即点表示法中的每个数字可以是 0-255（含）。但是，IPv4 地址也可以写为整数。

## ......和......“没有像 0：0：0：0：0：0：0：1 那样的地方？”

IPv6 中的 128 位本地主机地址是`0:0:0:0:0:0:0:1`，可以缩写形式写入`::1`

## 什么是港口？

要使用 IPv4（或 IPv6）将数据报（数据包）发送到 Internet 上的主机，您需要指定主机地址和端口。端口是无符号的 16 位数（即最大端口号是 65535）。

进程可以侦听特定端口上的传入数据包。但是，只有具有超级用户（root）访问权限的进程才能侦听端口＆lt; 1024.任何进程都可以侦听 1024 或更高的端口。

常用端口是端口 80：端口 80 用于未加密的 http 请求（即网页）。例如，如果 Web 浏览器连接到 [http://www.bbc.com/](http://www.bbc.com/) ，则它将连接到端口 80。

## 什么是 UDP？什么时候使用？

UDP 是一种建立在 IPv4 和 IPv6 之上的无连接协议。它使用起来非常简单：确定目标地址和端口并发送数据包！但是，网络不保证数据包是否会到达。如果网络拥塞，可能会丢弃数据包（也称为数据报）。数据包可能会重复或无序到达。

在两个远程数据中心之间，通常会看到 3％的数据包丢失。

UDP 的典型用例是接收最新数据比接收所有数据更重要。例如，游戏可以发送玩家位置的连续更新。流视频信号可以使用 UDP 发送图片更新

## 什么是 TCP？什么时候使用？

TCP 是基于连接的协议，它建立在 IPv4 和 IPv6 之上（因此可以描述为“TCP / IP”或“TCP over IP”）。 TCP 在两台机器之间创建 _ 管道 _ 并抽象出互联网的低级别数据包性质：因此，在大多数情况下，从一台机器发送的字节最终将到达另一端而不会出现重复或数据丢失。

TCP 将自动管理重发数据包，忽略重复数据包，重新排列无序数据包以及更改数据包发送速率。

TCP 的三次握手称为 SYN，SYN-ACK 和 ACK。此页面上的图表有助于理解 TCP 握手。 [TCP 握手](http://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml)

当今因特网上的大多数服务（例如，web 服务）使用 TCP，因为它隐藏了因特网的较低的分组级特性的复杂性。