# 网络,第 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,因为它隐藏了因特网的较低的分组级特性的复杂性。
- UIUC CS241 系统编程中文讲义
- 0. 简介
- #Informal 词汇表
- #Piazza:何时以及如何寻求帮助
- 编程技巧,第 1 部分
- 系统编程短篇小说和歌曲
- 1.学习 C
- C 编程,第 1 部分:简介
- C 编程,第 2 部分:文本输入和输出
- C 编程,第 3 部分:常见问题
- C 编程,第 4 部分:字符串和结构
- C 编程,第 5 部分:调试
- C 编程,复习题
- 2.进程
- 进程,第 1 部分:简介
- 分叉,第 1 部分:简介
- 分叉,第 2 部分:Fork,Exec,等等
- 进程控制,第 1 部分:使用信号等待宏
- 进程复习题
- 3.内存和分配器
- 内存,第 1 部分:堆内存简介
- 内存,第 2 部分:实现内存分配器
- 内存,第 3 部分:粉碎堆栈示例
- 内存复习题
- 4.介绍 Pthreads
- Pthreads,第 1 部分:简介
- Pthreads,第 2 部分:实践中的用法
- Pthreads,第 3 部分:并行问题(奖金)
- Pthread 复习题
- 5.同步
- 同步,第 1 部分:互斥锁
- 同步,第 2 部分:计算信号量
- 同步,第 3 部分:使用互斥锁和信号量
- 同步,第 4 部分:临界区问题
- 同步,第 5 部分:条件变量
- 同步,第 6 部分:实现障碍
- 同步,第 7 部分:读者编写器问题
- 同步,第 8 部分:环形缓冲区示例
- 同步复习题
- 6.死锁
- 死锁,第 1 部分:资源分配图
- 死锁,第 2 部分:死锁条件
- 死锁,第 3 部分:餐饮哲学家
- 死锁复习题
- 7.进程间通信&amp;调度
- 虚拟内存,第 1 部分:虚拟内存简介
- 管道,第 1 部分:管道介绍
- 管道,第 2 部分:管道编程秘密
- 文件,第 1 部分:使用文件
- 调度,第 1 部分:调度过程
- 调度,第 2 部分:调度过程:算法
- IPC 复习题
- 8.网络
- POSIX,第 1 部分:错误处理
- 网络,第 1 部分:简介
- 网络,第 2 部分:使用 getaddrinfo
- 网络,第 3 部分:构建一个简单的 TCP 客户端
- 网络,第 4 部分:构建一个简单的 TCP 服务器
- 网络,第 5 部分:关闭端口,重用端口和其他技巧
- 网络,第 6 部分:创建 UDP 服务器
- 网络,第 7 部分:非阻塞 I O,select()和 epoll
- RPC,第 1 部分:远程过程调用简介
- 网络复习题
- 9.文件系统
- 文件系统,第 1 部分:简介
- 文件系统,第 2 部分:文件是 inode(其他一切只是数据...)
- 文件系统,第 3 部分:权限
- 文件系统,第 4 部分:使用目录
- 文件系统,第 5 部分:虚拟文件系统
- 文件系统,第 6 部分:内存映射文件和共享内存
- 文件系统,第 7 部分:可扩展且可靠的文件系统
- 文件系统,第 8 部分:从 Android 设备中删除预装的恶意软件
- 文件系统,第 9 部分:磁盘块示例
- 文件系统复习题
- 10.信号
- 过程控制,第 1 部分:使用信号等待宏
- 信号,第 2 部分:待处理的信号和信号掩码
- 信号,第 3 部分:提高信号
- 信号,第 4 部分:信号
- 信号复习题
- 考试练习题
- 考试主题
- C 编程:复习题
- 多线程编程:复习题
- 同步概念:复习题
- 记忆:复习题
- 管道:复习题
- 文件系统:复习题
- 网络:复习题
- 信号:复习题
- 系统编程笑话