网络基础知识

1.定义:

网络通信本质上是一种进程间通信,是位于网络中不同主机上的进程之间的通信,属于 IPC 的一种,通常称为 socket IPC。

(1)硬件层:网卡设备,收发网络数据
(2)驱动层:网卡驱动(Linux 内核网卡驱动代码)
(3)应用层:上层应用程序(调用 socket 接口或更高级别接口实现网络相关应用程序)
 

在内核层,提供了网卡驱动程序,可以驱动底层网卡硬件设备,同时向应用层提供 socket 接口。
在应用层,应用程序基于内核提供的 socket 接口进行应用编程,实现自己的网络应用程序。需要注意的是, socket 接口是内核向应用层提供的一套网络编程接口,所以我们学习网络编程其实就是学习 socket 编程,如何基于 socket 接口编写应用程序。
除了 socket 接口之外,在应用层通常还会使用一些更为高级的编程接口,譬如 http、网络控件等,那么这些接口实际上是对 socket 接口的一种更高级别的封装
 

2.传输方式

有线传输 双绞线网线、光纤等

无线传输 WIFI、蓝牙、 ZigBee、 4G/5G/GPRS 
 

3.网络互连模型:

OSI 七层模型

应用层


应用层(Application Layer)是 OSI 参考模型中的最高层,是最靠近用户的一层,为上层用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有: HTTP、 FTP、 TFTP、 SMTP、SNMP、 DNS、 TELNET、 HTTPS、 POP3、 DHCP。


表示层


表示层(Presentation Layer)提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩/解压缩和加密/解密(提供网络的安全性)也是表示层可提供的功能之一。


会话层


会话层(Session Layer)对应主机进程,指本地主机与远程主机正在进行的会话。会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。将不同实体之间表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。


传输层


传输层(Transport Layer)定义传输数据的协议端口号,以及端到端的流控和差错校验。该层建立了主机端到端的连接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括差错校验处理和流控等问题。我们通常说的, TCP、 UDP 协议就工作在这一层,端口号既是这里的“端”。


网络层


进行逻辑地址寻址,实现不同网络之间的路径选择。本层通过 IP 寻址来建立两个节点之间的连接,为源端发送的数据包选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。网络层(Network Layer)也就是通常说的 IP 层。该层包含的协议有: IP(Ipv4、 Ipv6)、 ICMP、 IGMP 等。


数据链路层


数据链路层(Data Link Layer)是 OSI 参考模型中的第二层,负责建立和管理节点间逻辑连接、进行硬件地址寻址、差错检测等功能。将比特组合成字节进而组合成帧,用 MAC 地址访问介质,错误发现但不能纠正。
数据链路层又分为 2 个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。 MAC 子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制; LLC 子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。
数据链路层的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。


物理层


物理层(Physical Layer)是 OSI 参考模型的最低层,物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。

网络数据信号的传输是通过物理层实现的,通过物理介质传输比特流。物理层规定了物理设备标准、电平、传输速率等。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆等,这些都是物理层的传输介质。

                                 

TCP/IP 四层/五层模型
                      

4.数据的封装与拆封

    当用户发送数据时,将数据向下交给传输层,但是在交给传输层之前,应用层相关协议会对用户数据进行封装,譬如 MQTT、 HTTP 等协议,其实就是在用户数据前添加一个应用程序头部,这是处于应用层的操作,最后应用层通过调用传输层接口来将封装好的数据交给传输层。
     传输层会在数据前面加上传输层首部(此处以 TCP 协议为例,图中的传输层首部为 TCP 首部,也可以是 UDP 首部),然后向下交给网络层。

    同样地,网络层会在数据前面加上网络层首部(IP 首部),然后将数据向下交给链路层,链路层会对数据进行最后一次封装,即在数据前面加上链路层首部(此处使用以太网接口为例,对应以太网首部),然后将数据交给网卡。
     最后,由网卡硬件设备将数据转换成物理链路上的电平信号,数据就这样被发送到了网络中。这就是网络数据的发送过程
 

5.IP地址

IP 地址是软件地址,不是硬件地址,硬件 MAC 地址是存储在网卡中。

IPV4与IPV6

传统的 IP 地址是一个 32 位二进制数的地址,也叫 IPv4 地址,由 4 个 8 位字段组成。除了 IPv4 之外,还有 IPv6, IPv6 采用 128 位地址长度, 8 个 16 位字段组成,
在网络通信数据包中, IP 地址以 32 位二进制的形式表示;而在人机交互中,通常使用点分十进制方式表示,譬如 192.168.1.1,这就是点分十进制的表示方式。
IP 地址中的 32 位实际上包含 2 部分,分别为网络地址和主机地址,可通过子网掩码来确定网络地址和主机地址分别占用多少位。
 

IP 地址的分类
 

根据 IP 地址中网络地址和主机地址两部分分别占多少位的不同,将 IP 地址划分为 5 类,分别为 A、B、 C、 D、 E 五类

(1)A 类 IP 地址

从上图中可以看到,一个 A 类 IP 地址由 1 个字节网络地址和 3 个字节主机地址组成,而网络地址的最高位必须为 0,因此可知,网络地址取值范围为 0~127,一共 128 个网络地址。当然,这 128 个网络地址中,其中 3 个网络地址用作特殊用途,因此可用的网络地址有 125 个。
(1) A 类地址的第一字节为网络地址,其它 3 个字节为主机地址;
(2) A 类地址范围为: 1.0.0.1 ~ 127.255.255.254;
(3) A 类地址中设有私有地址和保留地址:
①10.X.X.X 是私有地址,所谓私有地址就是在互联网中不能使用,而被用在局域网中使用的地址
② 127.X.X.X 是保留地址,用作循环测试使用

(2)B 类 IP 地址

一个 B 类 IP 地址由 2 个字节的网络地址和 2 个字节的主机地址组成,网络地址的最高位必须是“10”,因此,网络地址第一个字节的取值范围为 128~191, IP 地址范围从 128.0.0.0 到 191.255.255.255。对于 B 类地址来说,一共拥有 16384 个网络地址,其中可用的网络地址有 16382 个,每个网络地址能容纳约 6 万(2^16-2=65534)多个主机。
(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。
 

(3)C 类 IP 地址

一个 C 类 IP 地址由 3 字节的网络地址和 1 字节的主机地址组成,网络地址的最高位必须是“110”,因此 C 类 IP 地址的第一个字节的取值范围为 192~223。范围从 192.0.0.0 到 223.255.255.255,网络地址可达209 万余个,每个网络地址能容纳 254 个主机。
(1) C 类地址第 1 字节、第 2 字节和第 3 个字节为网络地址,第 4 个个字节为主机地址。另外第 1 个字节的高三位固定为 110。
(2) C 类地址范围为: 192.0.0.1 ~ 223.255.255.254 其中192.168.x.x是私有地址
 

(4)D 类 IP 地址

D 类 IP 地址第一个字节以“1110”开始,它是一个专门保留的地址,它并不指向特定的网络,目前这一类地址被用在多点广播(多播, Multicast),多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
(1)、 D 类地址不分网络地址和主机地址,它的第 1 个字节的高四位固定为 1110。
(2)、 D 类地址范围: 224.0.0.1 ~ 239.255.255.254。
 

(5)E 类 IP 地址

E 类 IP 地址以“llll0”开始,为将来使用保留。全零(“0.0.0.0” )地址对应于当前主机。全“1”的 IP 地
址(“255.255.255.255” )是当前子网的广播地址。
(1)、 E 类地址也不分网络地址和主机地址,它的第 1 个字节的前五位固定为 11110。
(2)、 E 类地址范围: 240.0.0.1 ~ 255.255.255.254。
 

6.特殊的 IP 地址

直接广播地址

直接广播(Direct Broadcast Address):向某个网络上所有的主机发送报文。 TCP/IP 规定,主机号各位全部为“1”的 IP 地址用于广播,叫作广播地址。譬如一个 IP 地址是 192.168.0.181,这是一个 C 类地址,所以它的主机号只有一个字节,那么对主机号全取 1 得到一个广播地址 192.168.0.255,向这个地址发送数据就能让同一网络下的所有主机接收到。

受限广播地址

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

多播地址

多播地址用在一对多的通信中,即一个发送者,多个接收者,不论接受者数量的多少,发送者只发送一次数据包。多播地址属于 D 类地址, D 类地址只能用作目的地址,而不能作为主机中的源地址。

环回地址

环回地址(Loopback Address)是用于网络软件测试以及本机进程之间通信的特殊地址。把 A 类地址中的 127.XXX.XXX.XXX 的所有地址都称为环回地址,主要用来测试网络协议是否工作正常的作用。比如在电脑中使用 ping 命令去 ping 127.1.1.1 就可以测试本地 TCP/IP 协议是否正常。
不能将环回地址作为任何一台主机的 IP 地址使用。

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 的端口。
 

7.如何判断 2 个 IP 地址是否在同一个网段内

网络标识 = IP 地址 & 子网掩码
2 个 IP 地址的网络标识相同,那么它们就处于同一网络。譬如 192.168.1.50 和 192.168.1.100,这 2 个都是 C 类地址,对应的子网掩码为 255.255.255.0,很明显,这两个 IP 地址与子网掩码进行按位与操作时得到的结果(网络标识)是一样的,所以它们处于同一网络。
 

8.TCP/IP 协议

TCP/IP 协议它其实是一个协议族,包含了众多的协议,譬如应用层协议 HTTP、FTP、 MQTT…以及传输层协议 TCP、 UDP 等这些都属于 TCP/IP 协议
 

HTTP 协议

HTTP 超文本传输协议(英文: HyperText Transfer Protocol,缩写: HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 HTTP 是万维网数据通信的基础。 HTTP 的应用最为广泛,譬如大家经常会打开网页浏览器查询资料,通过浏览器便可开启 HTTP 通信。
HTTP 协议工作于客户端(用户)、服务器端(网站)模式下,浏览器作为 HTTP 客户端通过 URL 向HTTP 服务端即 WEB 服务器发送请求。 Web 服务器根据接收到的请求后,向客户端发送响应信息。借助这种浏览器和服务器之间的 HTTP 通信,我们能够足不出户地获取网络中的各种信息。
 

FTP 协议

FTP 协议的英文全称为 File Transfer Protocol,简称为 FTP,它是一种文件传输协议,从一个主机向一个主机传输文件的协议。 FTP 协议同样也是基于客户端-服务器模式,在客户端和服务器之间进行文件传输,譬如我们通常会使用 FTP 协议在两台主机之间进行文件传输, 譬如一台 Ubuntu 系统主机和一台 Windows系统主机,将一台主机作为 FTP 服务器、另一台主机作为 FTP 客户端,建立 FTP 连接之后,客户端可以从服务器下载文件,同样也可以将文件上传至服务器。
FTP 除了基本的文件上传/下载功能外,还有目录操作、权限设置、身份验证等机制,许多网盘的文件传输功能都是基于 FTP 实现的。
 

TCP 协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于 IP 的传输协议。

TCP 连接一旦建立,就可以在连接上进行双向的通信。任何一个主机都可以向另一个主机发送数据,数据是双向流通的,所以 TCP 协议是一个全双工的协议。

① TCP 协议工作在传输层,对上服务 socket 接口,对下调用 IP 层;
② TCP 是一种面向连接的传输协议,通信之前必须通过三次握手与客户端建立连接关系后才可通信;
③ TCP 协议提供可靠传输,不怕丢包、乱序。
TCP 协议如何保证可靠传输?

① TCP 协议采用发送应答机制,即发送端发送的每个 TCP 报文段都必须得到接收方的应答,才能认
为这个 TCP 报文段传输成功。
② TCP 协议采用超时重传机制,发送端在发送出一个 TCP 报文段之后启动定时器,如果在定时时间
内未收到应答,它将重新发送该报文段。
③  由于 TCP 报文段最终是以 IP 数据报发送的,而 IP 数据报到达接收端可能乱序、重复、所以 TCP
协议还会将接收到的 TCP 报文段重排、整理、再交付给应用层。

流量控制

TCP 流量控制主要是针对接收端的处理速度不如发送端发送速度快的问题,消除发送方使接收方缓存溢出的可能性。 TCP 流量控制主要使用滑动窗口协议,滑动窗口是接受数据端使用的窗口大小,用来告诉发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。这个窗口大小就是我们一次传输几个数据。对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送;同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允许接收。这样通过调整发送方窗口和接收方窗口的大小可以实现流量控制。

拥塞控制

流量控制是通过接收方来控制流量的一种方式;而拥塞控制则是通过发送方来控制流量的一种方式。
TCP 拥塞控制的几种方法:慢启动,拥塞避免,快重传和快恢复。
 

TCP 报文格式

TCP 报文由 TCP 首部+数据区域组成,一般 TCP 首部通常为 20 个字节大小


源端口号和目标端口号各占 2 个字节,一个 4 个字节
有时一个 IP 地址和一个端口号也称为 socket(插口)


在 TCP 传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为 300,而且数据共 100 字节,则下一个报文段的序号就是 400;序号是 32bit 的无符号数,序号到达 2^32-1 后从 0 开始。


确认序号占 4 字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;确认序号应该是上次已成功收到数据字节序号+1。只有 ACK 标志为 1 时,确认序号才有效。 TCP 为应用层提供全双工服务,这意味数据能在两个方向上独立地进行传输,因此确认序号通常会与反向数据(即接收端传输给发送端的数据)封装在同一个报文中(即捎带),所以连接的每一端都必须保持每个方向上的传输数据序号准确性。
首部长度字段占 4 个 bit 位,它指出了 TCP 报文段首部长度,以字节为单位,最大能记录15*4=60 字节的首部长度,因此, TCP 报文段首部最大长度为 60 字节。在字段后接下来有 6bit 空间是保留未用的,供以后应用,现在置为 0。
 

6 个标志位: URG/ACK/PSH/RST/SYN/FIN
① URG: 首部中的紧急指针字段标志,如果是 1 表示紧急指针字段有效。
② ACK: 只有当 ACK=1 时,确认序号字段才有效。
③ PSH: 当 PSH=1 时,接收方应该尽快将本报文段立即传送给其应用层。
④ RST: 当 RST=1 时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接。
⑤ SYN: SYN=1, ACK=0 时表示请求建立一个连接,携带 SYN 标志的 TCP 报文段为同步报文段。
⑥ FIN: 为 1 表示发送方没有数据要传输了,要求释放连接。
 

窗口大小占用 2 个字节大小,表示从确认号开始,本报文的发送方可以接收的字节数,即接收窗口大小,用于流量控制。


校验和对整个的 TCP 报文段,包括 TCP 首部和 TCP 数据,以 16 位字进行计算所得。这是一个强制性的字段。


紧急指针本报文段中的紧急数据的最后一个字节的序号。

选项字段的大小是不确定的,最多 40 字节。
 

建立 TCP 连接:三次握手

⚫ 第一次握手
客户端将 TCP 报文标志位 SYN 置为 1,随机产生一个序号值 seq=J,保存在 TCP 首部的序列号(SequenceNumber)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入 SYN_SENT 状态,等待服务器端确认。
⚫ 第二次握手
服务器端收到数据包后由标志位 SYN=1 知道客户端请求建立连接,服务器端将 TCP 报文标志位 SYN和 ACK 都置为 1, ack=J+1,随机产生一个序号值 seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入 SYN_RCVD 状态。
⚫ 第三次握手
客户端收到确认后,检查 ack 是否为 J+1, ACK 是否为 1,如果正确则将标志位 ACK 置为 1, ack=K+1,并将该数据包发送给服务器端,服务器端检查 ack 是否为 K+1, ACK 是否为 1,如果正确则连接建立成功,客户端和服务器端进入 ESTABLISHED 状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
小写的 ack 代表的是头部的确认号 Acknowledge number, ack。
大写的 ACK,则是 TCP 首部的标志位,用于标志的 TCP 包是否对上一个包进行了确认操作,如果确认了,则把 ACK 标志位设置成 1

 

关闭 TCP 连接:四次挥手

UDP 协议

UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议,是一种无连接、不可靠的协议。常用于实时视频的传输,比如直播、网络电话等。
UDP 协议更没有流量控制、拥塞控制等功能,在发送的一端, UDP 只是把上层应用的数据封装到 UDP 报文中,在差错检测方面,仅仅是对数据进行了简单的校验,然后将其封装到 IP 数据报中发送出去。而在接收端,无论是否收到数据,它都不会产生一个应答发送给源主机,并且如果接收到数据发送校验错误,那么接收端就会丢弃该UDP 报文,也不会告诉源主机,这样子传输的数据是无法保障其准确性的,如果想要其准确性,那么就需要应用程序来保障了。

UDP 协议的特点:

①、无连接、不可靠;
②、尽可能提供交付数据服务,出现差错直接丢弃,无反馈;
③、面向报文,发送方的 UDP 拿到上层数据直接添加个 UDP 首部,然后进行校验后就递交给 IP 层,而接收的一方在接收到 UDP 报文后简单进行校验,然后直接去除数据递交给上层应用;
④、速度快,因为 UDP 协议没有 TCP 协议的握手、确认、窗口、重传、拥塞控制等机制, UDP 是一个无状态的传输协议,所以它在传递数据时非常快,即使在网络拥塞的时候 UDP 也不会降低发送的数据。
 

9.端口号的概念

互联网中的每一台主机都需要一个唯一的 IP 地址以标识自己的身份,网络中传输的数据包通过 IP 地址找到对应的目标主机;一台主机通常只有一个 IP 地址,但主机上运行的网络进程却通常不止一个,譬如 Windows 电脑上运行着 QQ、微信、钉钉、网页浏览器等,这些进程都需要进行网
络连接,它们都可通过网络发送/接收数据,那么这里就有一个问题?主机接收到网络数据之后,如何确定该数据是哪个进程对应的接收数据呢?其实就是通常端口号来确定的。
 

作用

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

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值