网络编程学习1

202 阅读4分钟

主要用于记录对于极客时间上盛老师课程的学习.

GNU

GNU软件包括—操作系统内核、编辑器、shell、编译器、链接器和汇编器等等

GNU 在自由软件基金会统一组织下,相继推出了编译器 GCC、调试器 GDB、Bash Shell 等运行于用户空间的程序。正是这些软件为 Linux 操作系统的开发创造了一个合适的环境,比如编译器 GCC、Bash Shell 就是 Linux 能够诞生的基础之一。

网络编程模型

客户端-服务器模型:

为什么要区别出服务器和客户端?
因为二者的编程模型是不同的. 服务器端需要在一开始就监听在一个众所周知的端口上,而客户端相对简单,它需要向服务器端的监听端口发起连接请求.

需要注意:无论是客户端,还是服务器端,它们运行的单位都是进程(process),而不是机器。一个客户端,比如我们的手机终端,同一个时刻可以建立多个到不同服务器的连接,比如同时打游戏,上知乎,逛天猫;而服务器端更是可能在一台机器上部署运行了多个服务,比如同时开启了 SSH 服务和 HTTP 服务。

IP和端口

IP可以看作一个酒店的地址(唯一的),而端口可以看作该酒店中的房间号(每个连接的端口号不同),端口号是一个16位的整数,最多为65536. 当一个客户端发起连接请求时,客户端的端口是由操作系统内核临时分配的,称为临时端口;然而,前面也提到过,服务器端的端口通常是一个众所周知的端口。

套接字对:一个连接可以通过客户端-服务器端的IP地址和端口唯一确定,这就叫做套接字对.

(clientaddr:clientport, serveraddr:serverport)

客户端-服务器端连接.png

保留网段(私有地址)

保留网段.png 一组IP共同的部分就是网络,而一组IP不同的部分就是主机. 网络地址有多少位可以通过子网掩码来决定,通过将IP地址和子网掩码进行"与"操作即可得到网络的值,子网掩码一般看起来像是 255.255.255.0(二进制为 11111111.11111111.11111111.00000000),比如你的 IP 是 192.0.2.12,使用这个子网掩码时,你的网络就会是 192.0.2.12 与 255.255.255.0 所得到的值:192.0.2.0,192.0.2.0 就是这个网络的值。

数据报和字节流

TCP,又被叫做字节流套接字(Stream Socket),当然,UDP 也有一个类似的叫法, 数据报套接字(Datagram Socket),一般分别以“SOCK_STREAM”与“SOCK_DGRAM”分别来表示 TCP 和 UDP 套接字。Datagram Sockets 有时称为“无连接的 sockets”(connectionless sockets)。Stream sockets 是可靠的、双向连接的通讯串流。比如以“1-2-3”的顺序将字节流输出到套接字上,它们在另一端一定会以“1-2-3”的顺序抵达,而且不会出错。
广播或多播时(向网络中的多个节点同时发送信息),选择UDP是很合适的.

CIDR(无类域间路由)

将 IP 地址分为 A 类、B 类、C 类后,会造成 IP 地址的部分浪费。例如,一些连续的 IP 地址,一部分属于 A 类地址,另一部分属于 B 类地址。为了使这些地址聚合以方便管理,出现了 CIDR(无类域间路由)。
无类域间路由(Classless Inter-Domain Routing,CIDR)可以将路由集中起来,在路由表中更灵活地定义地址。它不区分 A 类、B 类、C 类地址,而是使用 CIDR 前缀的值指定地址中作为网络 ID 的位数。这个前缀可以位于地址空间的任何位置,让管理者能够以更灵活的方式定义子网,以简便的形式指定地址中网络 ID 部分和主机 ID 部分。

CIDR 标记使用一个斜线/分隔符,后面跟一个十进制数值表示地址中网络部分所占的位数。例如,205.123.196.183/25 中的 25 表示地址中 25 位用于网络 ID,相应的掩码为 255.255.255.128。

子网划分

子网划分是通过借用ip地址的若干位主机位来充当子网地址的从而将原来的网络分为若干个彼此隔离的子网实现的

子网划分.png

arp协议通过ip地址获取目标主机的mac地址这一过程使用的是广播的方式,这个广播地址就是通过子网地址与子网掩码计算而来的,只有计算出的这一子网内的主机才能收到这个arp广播包.