linux网络编程1-基础知识

目录

1、OSI 七层模型

2、TCP/IP模型

3、数据的封装与拆封

4、IP 地址

4.1、IP 地址的编址方式

4.2、点分十进制

4.3、网络地址和主机地址

4.4、IP 地址的分类

4.4.1、A类地址

4.4.2、B 类地址

4.4.3、C类地址

4.4.4、D类地址

4.4.5、E类地址

4.5、特殊的 IP 地址

4.5.1、直接广播地址

4.5.2、受限广播地址

4.5.3、多播地址

4.5.4、环回地址

4.5.5、0.0.0.0 地址

5、TCP

5.1、TCP 协议的特性

5.2、建立 TCP 连接(三次握手)

5.3、关闭 TCP 连接:四次挥手

5.4、TCP状态

6、UDP

7、端口号

7.1、常见服务器的特定端口号


1、OSI 七层模型

应用层 应用层为上层用户提供应用接口,也为用户直接提供各种网络服务。常见应用层的网络服务协议有: HTTP、 FTP、 TFTP、 SMTP、SNMP、 DNS、 TELNET、 HTTPS、 POP3、 DHCP。
表示层 表示层提供各种用于应用层数据的编码和转换功能, 确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要, 该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩/解压缩和加密/解密(提供网络的安全性) 也是表示层可提供的功能之一。
会话层 会话层对应主机进程,指本地主机与远程主机正在进行的会话。 会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
将不同实体之间表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。
传输层 传输层定义传输数据的协议端口号,以及端到端的流控和差错校验。 该层建立了主机端到端的连接, 传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括差错校验处理和流控等问题。我们通常说的, TCP、 UDP 协议就工作在这一层, 端口号既是这里的“端”。
网络层 进行逻辑地址寻址,实现不同网络之间的路径选择。本层通过 IP 寻址来建立两个节点之间的连接,为源端发送的数据包选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。 网络层(Network Layer) 也就是通常说的 IP 层。 该层包含的协议有: IP(Ipv4、 Ipv6)、 ICMP、 IGMP 等。
数据链路层

数据链路层负责建立和管理节点间逻辑连接、进行硬件地址寻址、差错检测等功能。 将比特组合成字节进而组合成帧,用 MAC 地址访问介质,错误发现但不能纠正。

数据链路层又分为 2 个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC) 。

MAC 子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制; LLC 子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。数据链路层的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。

物理层 物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输, 物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

2、TCP/IP模型


linux网络编程1-基础知识_第1张图片

3、数据的封装与拆封

网络通信中, 数据从上层到下层交付时,要进行封装;同理,当目标主机接收到数据时,数据由下层传递给上层时需要进行拆封。这就是数据的封装与拆封。

linux网络编程1-基础知识_第2张图片

4、IP 地址

4.1、IP 地址的编址方式

IPv4地址以 32 位二进制的形式表示(由 4 个 8 位字段组成);

4.2、点分十进制

在人机交互中,通常使用点分十进制方式表示,譬如 192.168.1.1

4.3、网络地址和主机地址

IPv4地址中的 32 位实际上包含 2 部分,分别为网络地址和主机地址,可通过子网掩码来确定网络地址和主机地址分别占用多少位。

4.4、IP 地址的分类

根据 IP 地址中网络地址和主机地址两部分分别占多少位的不同,将 IP 地址划分为 5 类, 分别为 A、B、 C、 D、 E 五类。
linux网络编程1-基础知识_第3张图片

4.4.1、A类地址

网络地址取值范围为 0~127, 一共 128 个网络地址。 
1)A 类地址的第一字节为网络地址,其它 3 个字节为主机地址;
2)A 类地址范围为:0.0.0.1 ~ 127.255.255.254;

3)A 类地址中设有私有地址和保留地址:

私有地址 10.X.X.X 在互联网中不能使用,而被用在局域网中使用的地址。
保留地址 127.X.X.X 用作回环测试使用。

4.4.2、B 类地址

网络地址第一个字节的取值范围为 128~191。
1)B 类地址中第 1 字节和第 2 字节为网络地址,其它 2 个字节为主机地址。
2)B 类地址范围: 128.0.0.1 ~ 191.255.255.254。
3)B 类地址中设有私有地址和保留地址:

私有地址 172.16.0.0 ~ 172.31.255.255
保留地址 169.254.X.X 如果IP 地址是自动获取 IP 地址,而你在网络上又没有找到可用的DHCP 服务器。就会得到其中一个 IP

4.4.3、C类地址

网络地址第一个字节的取值范围为192~223。
1)C 类地址第 1 字节、第 2 字节和第 3 个字节为网络地址,第 4 个个字节为主机地址。
2)C 类地址范围为: 192.0.0.1 ~ 223.255.255.254。

3)C 类地址中的私有地址: 192.168.X.X 是私有地址。

4.4.4、D类地址

D 类 IP 地址是一个专门保留的地址,它并不指向特定的网络,目前这一类地址被用在多播。
1)D 类地址范围: 224.0.0.1 ~ 239.255.255.254。

4.4.5、E类地址

E 类 IP 地址为将来使用保留。 

1)E 类地址范围: 240.0.0.1 ~ 255.255.255.254。

4.5、特殊的 IP 地址

4.5.1、直接广播地址

向某个网络上所有的主机发送报文。 TCP/IP 规定,主机号各位全部为“1”的 IP 地址用于广播,叫作广播地址。向这个地址发送数据就能让同一网络下的所有主机接收到。
1)A 类地址的广播地址为: XXX.255.255.255。
2)B 类地址的广播地址为: XXX.XXX.255.255。
3)C 类地址的广播地址为: XXX.XXX.XXX.255。

4.5.2、受限广播地址

直接广播要求发送方必须广播网络对应的网络号。但有些主机在启动时,往往并不知道本网络的网络号,这时候如果想要向本网络广播,只能采用受限广播地址。
受限广播地址是在本网络内部进行广播的一种广播地址, TCP/IP 规定, 32 比特全为“1”的 IP 地址用于本网络内的广播,也就是 255.255.255.255。

4.5.3、多播地址

多播地址用在一对多的通信中,即一个发送者,多个接收者,不论接受者数量的多少,发送者只发送一次数据包。

多播地址属于 D 类地址, D 类地址只能用作目的地址,而不能作为主机中的源地址。

4.5.4、环回地址

环回地址是用于网络软件测试以及本机进程之间通信的特殊地址。 把 A 类地址中的127.XXX.XXX.XXX 的所有地址都称为环回地址,主要用来测试网络协议是否工作正常的作用。

4.5.5、0.0.0.0 地址

IP 地址 32bit 全为 0 的地址(也就是 0.0.0.0)表示本网络上的本主机,只能用作源地址。
0.0.0.0 不能被ping通, 在服务器中, 0.0.0.0 并不是一个真实的的 IP 地址,它表示本机中所有的IPv4 地址。监听 0.0.0.0 的端口,就是监听本机中所有 IP 的端口。

5、TCP

TCP是一种面向连接的、可靠的、基于 IP 的传输协议。

5.1、TCP 协议的特性

面向连接 通过三次握手建立连接
确认与重传

通过确认应答 ACK 实现可靠的数据传输。

在一定的时间内如果没有收到确认应答,发送端就可以认为数据已经丢失,并进行重发。

全双工 数据是双向流通的
基于字节流而非报文 将数据按字节大小进行编号,接收端通过 ACK 来确认收到的数据编号,通过这种机制能够保证 TCP 协议的有序性和完整性,因此 TCP 能够提供可靠性传输。
流量控制(滑动窗口协议) TCP 流量控制主要是针对接收端的处理速度不如发送端发送速度快的问题,消除发送方使接收方缓存溢出的可能性。 TCP 流量控制主要使用滑动窗口协议,滑动窗口是接受数据端使用的窗口大小,用来告诉发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。这个窗口大小就是我们一次传输几个数据。对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送; 同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允许接收。这样通过调整发送方窗口和接收方窗口的大小可以实现流量控制。
差错控制 TCP 协议除了确认应答与重传机制外, TCP 协议也会采用校验和的方式来检验数据的有效性,主机在接收数据的时候,会将重复的报文丢弃,将乱序的报文重组,发现某段报文丢失了会请求发送方进行重发,因此在 TCP 往上层协议递交的数据是顺序的、无差错的完整数据
拥塞控制 如果网络上的负载(发送到网络上的分组数)大于网络上的容量(网络同时能处理的分组数),就可能引起拥塞,判断网络拥塞的两个因素:延时和吞吐量。拥塞控制机制是:开环(预防)和闭环(消除) 。流量控制是通过接收方来控制流量的一种方式;而拥塞控制则是通过发送方来控制流量的一种方式。TCP 发送方可能因为 IP 网络的拥塞而被遏制, TCP 拥塞控制就是为了解决这个问题(注意和 TCP 流量控制的区别)。
TCP 拥塞控制的几种方法:慢启动,拥塞避免,快重传和快恢复。

5.2、建立 TCP 连接(三次握手)

​​​​​​​linux网络编程1-基础知识_第4张图片

1)第一次握手
客户端将 TCP 报文标志位 SYN 置为 1,随机产生一个序号值 seq=J,保存在 TCP 首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入 SYN_SENT 状态,等待服务器端确认。

2)第二次握手
服务器端收到数据包后由标志位 SYN=1 知道客户端请求建立连接,服务器端将 TCP 报文标志位 SYN和 ACK 都置为 1, ack=J+1,随机产生一个序号值 seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入 SYN_RCVD 状态。

3)第三次握手
客户端收到确认后,检查 ack 是否为 J+1, ACK 是否为 1,如果正确则将标志位 ACK 置为 1, ack=K+1,并将该数据包发送给服务器端,服务器端检查 ack 是否为 K+1, ACK 是否为 1,如果正确则连接建立成功,客户端和服务器端进入 ESTABLISHED 状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。


5.3、关闭 TCP 连接:四次挥手

linux网络编程1-基础知识_第5张图片

1)第一次挥手

Client 端发起挥手请求,向 Server 端发出一个 FIN 报文段主动进行关闭连接, 此时报文段的 FIN 标志位被设置为 1。 此时, Client 端进入 FIN_WAIT_1 状态,这表示 Client 端没有数据要发送给 Server 端了。
2)第二次挥手
Server 端收到了 Client 端发送的 FIN 报文段,向 Client 端返回一个 ACK 报文段, 此时报文段的 ACK标志位被设置为 1。 ack 设为 seq 加 1, Client 端进入 FIN_WAIT_2 状态, Server 端告诉 Client 端,我确认并同意你的关闭请求。
3)第三次挥手
Server 端向 Client 端发送一个 FIN 报文段请求关闭连接, 此时报文段的 FIN 标志位被设置为 1, 同时Client 端进入 LAST_ACK 状态。
4)第四次挥手
Client 端收到 Server 端发送的 FIN 报文段后,向 Server 端发送 ACK 报文段(此时报文段的 ACK 标志位被设置为 1) ,然后 Client 端进入 TIME_WAIT 状态。 Server 端收到 Client 端的 ACK 报文段以后,就关闭连接。此时, Client 端等待 2MSL 的时间后依然没有收到回复,则证明 Server 端已正常关闭,那好, Client端也可以关闭连接了。

5.4、TCP状态

CLOSED 表示一个初始状态
LISTENING 表示服务器端的处于监听状态,等待被客户端连接。
SYN_SENT 状态表示客户端已发送 SYN 报文。
SYN_REVD 表示服务器接受到了 SYN 报文。
ESTABLISHED 表示连接已经建立了
FIN_WAIT_1 和 FIN_WAIT_2 表示等待对方的 FIN 报文。
TIME_WAIT 表示收到了对方的 FIN 报文,并发送出了 ACK 报文,就等 2MSL 后即可回
到 CLOSED 可用状态了。如果 FIN_WAIT_1 状态下,收到了对方同时带 FIN 标志和 ACK 标志的报文时,可以直接进入到 TIME_WAIT 状态,而无须经过 FIN_WAIT_2 状态。
CLOSE_WAIT 表示在等待关闭。
LAST_ACK 它是被动关闭一方在发送 FIN 报文后,最后等待对方的 ACK 报文。当收到 ACK 报
文后,也即可以进入到 CLOSED 状态了

6、UDP

UDP是一种无连接、不可靠的协议。

UDP 协议的特点:

1)无连接、 不可靠;

2)尽可能提供交付数据服务,出现差错直接丢弃,无反馈;

3)面向报文,发送方的 UDP 拿到上层数据直接添加个 UDP 首部,然后进行校验后就递交给 IP 层,而接收的一方在接收到 UDP 报文后简单进行校验,然后直接去除数据递交给上层应用;

4)速度快,因为 UDP 协议没有 TCP 协议的握手、确认、窗口、重传、拥塞控制等机制, UDP 是一个无状态的传输协议,所以它在传递数据时非常快,即使在网络拥塞的时候 UDP 也不会降低发送的数据。

7、端口号

端口号用来在一台主机中唯一标识一个能上网的进程。一台主机通常只有一个 IP 地址,但是可能有多个端口号,每个端口号表示一个能上网的进程。一台拥有 IP 地址的主机可以提供许多服务,比如 Web 服务、 FTP 服务、 SMTP 服务等,这些服务都是能够进行网络通信的进程, IP 地址只能区分网络中不同的主机,并不能区分主机中的这些进程, 显然不能只靠 IP 地址, 因此才有了端口号。 通过“IP 地址+端口号”来区分主机不同的进程。


7.1、常见服务器的特定端口号

服务 端口号 说明
HTTP 服务 80 超文本传输协议
FTP 服务 21 文件传输协议, 使得主机间可以共享文件
SMTP 服务 25 简单邮件传输协议,它帮助每台计算机在发送或中转信件时找到下一个目的地。
TFTP 服务 69 简单文件传输协议,主机之间进行简单文件传输
SSH 服务 22 安全外壳协议, 专为远程登录会话和其他网络服务提供安全性的协议
Telnet 服务 23 终端远程登录协议, 它为用户提供了在本地计算机上完成远程主机工作的能力。
POP3 服务 110 邮局协议版本 3,本协议主要用于支持使用客户端远程管理在服务器上的电子邮件

你可能感兴趣的:(linux,C编程,linux)