网络基础知识
网络通信概述
网络通信是一种进程间通信,发生在网络中不同主机上的进程之间,属于IPC的一种形式,通常称为socket IPC
- Socket IPC是一种基于套接字的进程间通信机制,使用标准的网络编程接口,可以在不同主机上的进程之间实现数据的传输和交换
网络通信解决了不同主机上应用程序之间的通信问题
网络通信可以分为三个层次
-
硬件层:包括网卡设备,负责收发网络数据
-
驱动层:包括网卡驱动程序,驱动底层网卡硬件设备,并向应用层提供socket接口
-
应用层:包括上层应用程序,通过调用socket接口或更高级别的接口实现网络相关应用程序
-
在应用层,应用程序使用内核提供的socket接口进行网络编程,实现自己的网络应用程序
-
应用层通常还会使用更高级别的编程接口(如http、网络控件),这些接口实际上是对socket接口的封装
-
-
网络连接
网络通信需要建立网络连接,两台主机之间才能进行数据传输,可以通过有线传输(如网线、光纤)或无线传输(如WIFI、蓝牙、4G/5G/GPRS)实现
网络通信涉及大量的网络协议(如TCP/IP协议族)
网络互连模型:OSI 七层模型
OSI七层模型
-
OSI七层模型是国际标准化组织(ISO)制定的计算机或通信系统间网络互联的标准体系,也被称为OSI参考模型或七层模型。它是网络互连的模型
-
OSI七层模型的分层是为了应对网络通信的复杂性,每一层实现不同的功能
-
应用层(Application Layer)是最高层,为上层用户提供应用接口和各种网络服务,如HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、HTTPS、POP3、DHCP等
-
表示层(Presentation Layer)提供数据编码、转换功能,确保应用层数据能被其他系统的应用层识别,还包括数据压缩、解压缩和加密、解密等功能
-
会话层(Session Layer)负责建立、管理和终止表示层实体之间的通信会话,协调应用程序之间的服务请求和响应
-
传输层(Transport Layer)定义传输数据的协议端口号,建立主机端到端的连接,为上层协议提供可靠和透明的数据传输服务,包括差错校验和流控等
-
网络层(Network Layer)进行逻辑地址寻址,实现不同网络之间的路径选择,通过IP寻址建立节点之间的连接,包括IP、ICMP、IGMP等协议
-
数据链路层(Data Link Layer)负责建立和管理节点间的逻辑连接,进行硬件地址寻址和差错检测,将比特组合成帧,并处理接收端发回的确认帧信息
-
物理层(Physical Layer)是最低层,提供物理连接和透明传输比特流的功能,规定物理设备标准、传输速率等,利用传输介质传输比特流
-
-
OSI参考模型的层次划分是为了提供一种通用的标准化结构,便于不同厂商和系统之间的互操作性和协作
-
除了OSI七层模型,还有TCP/IP四层模型和五层模型,这些模型也被广泛使用于网络通信中
TCP/IP 四层/五层模型
-
TCP/IP模型是OSI模型的简化版本。OSI模型包括七个层次,而TCP/IP模型将OSI模型的最上三层(应用层、表示层和会话层)合并为一个层,即应用层
- OSI 七层模型与 TCP/IP 五层模型
-
TCP/IP五层模型包括:应用层、传输层、网络层、数据链路层以及物理层。这与OSI模型的应用层、传输层、网络层、数据链路层和物理层对应
-
TCP/IP四层模型与五层模型的唯一区别在于将数据链路层和物理层合并为网络接口层。四层模型包括:应用层、传输层、网络层以及网络接口层
- OSI 模型与 TCP/IP 模型
-
在实际应用中,通常使用TCP/IP四层模型。五层模型主要用于介绍网络原理和理论,而四层模型更贴近实际应用
数据的封装与拆封
-
在网络通信中,数据从上层到下层交付时要进行封装
-
目标主机接收到数据时,数据由下层传递给上层需要进行拆封
-
封装和拆封是数据传递过程中不可或缺的步骤
-
数据的封装
-
应用层封装
-
当用户发送数据,数据首先交给传输层
-
在交给传输层之前,应用层协议(如MQTT、HTTP)会对数据进行封装
-
应用层在用户数据前添加应用程序头部
-
经过封装后的数据通过传输层接口交给传输层
-
-
传输层封装
-
传输层在数据前加上传输层首部(如TCP首部或UDP首部)
-
然后将数据交给网络层
-
-
网络层封装
-
网络层在数据前加上网络层首部(如IP首部)
-
然后将数据交给链路层
-
-
链路层封装
-
链路层在数据前加上链路层首部(如以太网首部)
-
然后将数据交给网卡
-
-
物理层传输
-
网卡将数据转换成物理链路上的电平信号
-
数据通过物理链路发送到网络中
-
各层协议对数据进行封装的过程可概括为TCP/IP模型中的各层协议封装过程
-
-
-
目标主机的数据拆封
-
目标主机接收到数据后,会进行拆封过程
-
每一层的首部被逐层拆解,最终得到用户数据
-
数据接收过程与发送过程正好相反,可概括为TCP/IP模型中的各层协议解析过程
-
-
IP 地址
概述
-
Internet的互联性
- Internet 使用 TCP/IP 协议在全球范围内实现不同硬件结构、操作系统和网络系统的主机之间的互联
-
IP 地址的作用
-
在 Internet 上,每个节点依靠唯一的 IP 地址相互区分和联系
-
IP 地址用于标识互联网中每台主机的身份
-
-
IP 地址的分配
-
设计人员为每个接入网络中的主机分配一个 IP 地址(Internet Protocol Address)
-
只有合法的 IP 地址才能接入互联网并与其他主机进行网络通信
-
-
IP 地址与硬件地址的区别
-
IP 地址是软件地址,不是硬件地址
-
硬件 MAC 地址存储在网卡中,应用于局域网中寻找目标主机
-
IP 地址的编址方式
-
IP 地址的唯一性
- 互联网中的每一台主机都需要一个唯一的 IP 地址来标识自己的身份
-
IP 地址的定义和编址方式
-
传统的 IP 地址是一个 32 位二进制数的地址,称为 IPv4 地址,由 4 个 8 位字段组成
-
除了 IPv4,还有 IPv6,它采用 128 位地址长度,由 8 个 16 位字段组成
-
-
IP 地址的表示方式
-
在网络通信数据包中,IP 地址以 32 位二进制的形式表示
-
在人机交互中,通常使用点分十进制方式表示,例如 192.168.1.1
-
-
IP 地址的组成
-
IP 地址中的 32 位实际上包含两部分:网络地址和主机地址
-
网络地址和主机地址的具体分配可通过子网掩码来确定
-
IP 地址的分类
-
IP 地址根据网络地址和主机地址的分配方式被划分为 5 类:A、B、C、D、E
-
5 类 IP 地址的划分
-
A 类 IP 地址
-
由 1 个字节的网络地址和 3 个字节的主机地址组成
-
网络地址的最高位必须为 0,取值范围为 0~127,共 128 个网络地址,其中 3 个用于特殊用途,可用网络地址为 125 个
-
范围:1.0.0.1 ~ 127.255.255.254
-
私有地址:10.X.X.X;保留地址:127.X.X.X
-
-
B 类 IP 地址
-
由 2 个字节的网络地址和 2 个字节的主机地址组成
-
网络地址的最高位必须是“10”,取值范围为 128~191
-
范围:128.0.0.1 ~ 191.255.255.254
-
私有地址:172.16.0.0 ~ 172.31.255.255;保留地址:169.254.X.X
-
-
C 类 IP 地址
-
由 3 个字节的网络地址和 1 个字节的主机地址组成
-
网络地址的最高位必须是“110”,取值范围为 192~223
-
范围:192.0.0.1 ~ 223.255.255.254
-
私有地址:192.168.X.X
-
-
D 类 IP 地址
-
第一个字节以“1110”开始,用于多点广播(多播)
-
不分网络地址和主机地址
-
范围:224.0.0.1 ~ 239.255.255.254
-
-
E 类 IP 地址
-
第一个字节以“1110”开始,为将来使用保留
-
不分网络地址和主机地址
-
范围:240.0.0.1 ~ 255.255.255.254
-
-
-
私有地址和保留地址
-
A 类:10.0.0.0~10.255.255.255
-
B 类:172.16.0.0~172.31.255.255
-
C 类:192.168.0.0~192.168.255.255
-
-
各类地址的适用范围
-
A 类:适用于规模特别大的网络,如 IBM 公司的网络
-
B 类:适用于一般的中型网络
-
C 类:适用于小型网络,如一般的局域网和校园网
-
D 类:用于多点广播
-
E 类:为将来使用保留
-
特殊的 IP 地址
-
这些 IP 地址不能分配给任何一个网络的主机使用
-
直接广播地址
-
用于向某个网络上的所有主机发送报文
-
主机号全部为“1”的 IP 地址用于广播,称为广播地址
-
例如,C 类地址 192.168.0.181 的广播地址为 192.168.0.255
-
A、B、C 类地址的广播地址结构:
-
A 类:XXX.255.255.255(例如:120.255.255.255)
-
B 类:XXX.XXX.255.255(例如:139.22.255.255)
-
C 类:XXX.XXX.XXX.255(例如:203.120.16.255)
-
-
-
受限广播地址
-
用于在本网络内部的广播
-
当主机不知道本网络的网络号时使用
-
32 比特全为“1”的 IP 地址用于本网络内的广播,即 255.255.255.255
-
-
多播地址
-
用于一对多的通信,即一个发送者,多个接收者
-
多播地址属于 D 类地址
-
D 类地址只能用作目的地址,不能作为主机中的源地址
-
-
环回地址
-
用于网络软件测试及本机进程之间的通信
-
A 类地址中 127.XXX.XXX.XXX 的所有地址为环回地址
-
测试网络协议是否正常,例如使用 ping 127.1.1.1 测试本地 TCP/IP 协议是否正常
-
不能将环回地址作为任何一台主机的 IP 地址使用
-
-
0.0.0.0 地址
-
32 bit 全为 0 的地址,即 0.0.0.0,表示本网络上的本主机,只能用作源地址
-
不能 ping 通 0.0.0.0
-
在服务器中,0.0.0.0 并不是一个真实的 IP 地址,它表示本机中所有的 IPv4 地址
-
监听 0.0.0.0 的端口,即监听本机中所有 IP 的端口
-
如何判断 2 个 IP 地址是否在同一个网段内
-
通过网络标识进行判断
-
网络标识的定义
-
网络标识 = IP 地址 & 子网掩码
-
这里“&”表示按位与操作
-
-
判断标准
- 如果两个 IP 地址的网络标识相同,则它们处于同一个网络
-
例子说明
-
IP 地址:192.168.1.50 和 192.168.1.100
-
这两个 IP 地址都是 C 类地址,对应的子网掩码为 255.255.255.0
-
按位与操作
-
192.168.1.50 & 255.255.255.0 = 192.168.1.0
-
192.168.1.100 & 255.255.255.0 = 192.168.1.0
-
-
结果:两个 IP 地址与子网掩码进行按位与操作得到的网络标识是一样的(192.168.1.0),所以它们处于同一个网络
-
TCP/IP 协议
TCP/IP 是一个协议族(protocol suite),包含了众多的协议
协议层的例子
-
应用层协议:HTTP、FTP、MQTT 等
-
HTTP 协议
-
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议
-
HTTP 的作用
- HTTP 是万维网数据通信的基础
-
HTTP 的广泛应用
-
HTTP 应用最为广泛的例子是通过网页浏览器查询资料
-
浏览器能够开启 HTTP 通信
-
-
HTTP 协议的工作模式
-
HTTP 协议在客户端(用户)和服务器端(网站)模式下工作
-
浏览器作为 HTTP 客户端,通过 URL 向 HTTP 服务端即 Web 服务器发送请求
-
Web 服务器根据接收到的请求,向客户端发送响应信息
-
-
HTTP 通信的功能
- 借助浏览器和服务器之间的 HTTP 通信,人们能够获取网络中的各种信息,而无需离开家
-
-
FTP 协议
-
FTP(File Transfer Protocol,文件传输协议)是一种用于在两个主机之间传输文件的协议
-
FTP 的工作模式
-
FTP 协议基于客户端-服务器模式
-
在客户端和服务器之间进行文件传输
-
-
-
典型应用示例
-
使用 FTP 协议在两台主机(例如一台 Ubuntu 系统主机和一台 Windows 系统主机)之间进行文件传输
-
将一台主机作为 FTP 服务器,另一台主机作为 FTP 客户端
-
建立 FTP 连接后,客户端可以从服务器下载文件,也可以将文件上传至服务器
-
-
FTP 的功能
-
基本的文件上传和下载功能
-
目录操作功能
-
权限设置功能
-
身份验证机制
-
-
许多网盘的文件传输功能都是基于 FTP 实现的
-
-
传输层协议:TCP、UDP 等
TCP/IP 协议的涵义
- TCP/IP 协议并不是指某一个具体的网络协议,而是一个协议族
网络通信中使用的协议
-
网络通信涉及的网络协议非常多
-
对于应用开发来说,更多使用的是应用层协议,例如 HTTP、FTP、SMTP 等
TCP 协议
概述
-
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于 IP 的传输协议
-
TCP 协议的工作层
-
TCP 协议工作在传输层
-
对上服务 socket 接口
-
对下调用 IP 层(网络层)
-
-
TCP 协议的工作特性
-
TCP 是一种面向连接的传输协议
-
在通信之前必须通过三次握手与客户端建立连接关系后才可通信
-
-
TCP 提供的功能
-
提供可靠传输
-
不怕丢包和乱序
-
-
重点
-
TCP 协议工作在传输层
-
服务于上层的 socket 接口,调用下层的 IP 层
-
面向连接,通过三次握手建立连接
-
提供可靠的传输,不怕丢包和乱序
-
-
TCP 协议如何保证可靠传输
-
发送应答机制
-
TCP 协议采用发送应答机制
-
发送端发送的每个 TCP 报文段都必须得到接收方的应答
-
只有接收到应答后,才能认为这个 TCP 报文段传输成功
-
-
超时重传机制
-
TCP 协议采用超时重传机制
-
发送端在发送出一个 TCP 报文段后会启动定时器
-
如果在定时时间内未收到应答,发送端将重新发送该报文段
-
-
报文段重排和整理
-
TCP 报文段最终是以 IP 数据报的形式发送的
-
IP 数据报到达接收端时可能会出现乱序或重复的情况
-
TCP 协议会对接收到的 TCP 报文段进行重排和整理,再交付给应用层
-
-
TCP 协议的特性
-
面向连接的
-
TCP 是面向连接的协议
-
在发送数据之前,必须先在双方之间建立一个 TCP 连接
-
通过三次握手建立连接
-
-
确认与重传
-
当数据从主机 A 发送到主机 B 时,主机 B 会返回确认应答
-
TCP 通过确认应答(ACK)实现可靠的数据传输
-
发送端等待确认应答,如果收到则数据成功到达对端;否则认为数据可能丢失
-
如果在一定时间内没有收到确认应答,发送端会重发数据
-
-
全双工通信
-
TCP 连接一旦建立,可以进行双向通信
-
任何一个主机都可以向另一个主机发送数据
-
数据是双向流通的,TCP 协议是全双工的协议
-
-
基于字节流而非报文
-
数据按字节大小编号,接收端通过 ACK 确认收到的数据编号
-
这种机制保证了 TCP 协议的有序性和完整性,提供可靠传输
-
-
流量控制(滑动窗口协议)
-
针对接收端处理速度不如发送端的问题,防止接收方缓存溢出
-
使用滑动窗口协议控制流量,滑动窗口大小由接收端告诉发送端
-
发送方和接收方各自维持一个窗口,通过调整窗口大小实现流量控制
-
-
差错控制
-
除了确认应答与重传机制,TCP 还采用校验和来检验数据有效性
-
接收主机丢弃重复报文,重组乱序报文,发现丢失的报文请求重发
-
确保递交给上层协议的数据是顺序的、无差错的完整数据
-
-
拥塞控制
-
负载大于网络容量可能引起拥塞,通过延时和吞吐量判断网络拥塞
-
拥塞控制机制包括开环(预防)和闭环(消除)
-
流量控制由接收方控制流量,拥塞控制由发送方控制流量
-
TCP 拥塞控制的方法包括慢启动、拥塞避免、快重传和快恢复
-
TCP 报文格式
-
概述
-
当数据从上层发送到传输层时,数据会被封装为 TCP 数据段
-
封装后的数据段被称为 TCP 报文或 TCP 报文段
-
TCP 报文由两部分组成:TCP 首部和数据区域
-
一般 TCP 首部的大小通常为 20 个字节
-
TCP 报文格式
-
-
源端口号和目标端口号
-
各占 2 个字节,总共 4 个字节
-
每个 TCP 报文都包含源主机和目标主机的端口号
-
用于找到发送端和接收端的应用进程
-
与 IP 首部中的源 IP 地址和目标 IP 地址一起,确定唯一一个 TCP 连接
-
一个 IP 地址和一个端口号也称为 socket(插口)
-
-
序号
-
占 4 个字节
-
标识从发送端向接收端发送的数据字节流
-
表示报文段中第一个数据字节的位置
-
根据数据区域长度,计算出报文最后一个数据的序号
-
TCP 对数据进行按字节编号,序号是 32 位的无符号数
-
序号到达 2^32-1 后从 0 开始
-
-
确认序号
-
占 4 个字节
-
期望收到对方下次发送的数据的第一个字节的序号
-
确认序号 = 上次已成功收到数据字节序号 + 1
-
只有 ACK 标志为 1 时,确认序号才有效
-
TCP 提供全双工服务,确认序号与反向数据通常一起封装在报文中
-
-
首部长度
-
占 4 个 bit 位
-
指出 TCP 报文段首部长度,以字节为单位,最大为 60 字节(15*4)
-
在字段后有 6 个 bit 空间保留未用,置为 0
-
-
6 个标志位
-
URG:紧急指针字段有效时为 1
-
ACK:ACK=1 时,确认序号字段有效
-
PSH:PSH=1 时,接收方应尽快将报文段传送给应用层
-
RST:RST=1 时表示连接错误,需释放连接并重建
-
SYN:SYN=1,ACK=0 表示请求建立连接
-
FIN:FIN=1 表示发送方无数据传输,要求释放连接
-
-
窗口大小
-
占 2 个字节
-
表示从确认号开始,发送方可以接收的字节数
-
用于流量控制
-
-
校验和
-
对整个 TCP 报文段(包括首部和数据)以 16 位计算得出
-
强制性字段
-
-
紧急指针
- 指示本报文段中紧急数据的最后一个字节的序号
-
选项
- 字段大小不确定,最多 40 字节
建立 TCP 连接:三次握手
-
TCP 连接的建立
-
TCP 协议是面向连接的,双方在通信前必须建立连接
-
建立连接的过程称为“三次握手”
-
-
三次握手的具体步骤
-
三次握手示例图
-
第一次握手
-
客户端发送 SYN 报文,标志位 SYN 置为 1,随机产生序号 seq=J
-
客户端进入 SYN_SENT 状态,等待服务器确认
-
-
第二次握手
-
服务器收到 SYN 报文,标志位 SYN 和 ACK 都置为 1,确认号 ack=J+1,随机产生序号 seq=K
-
服务器发送确认报文给客户端,进入 SYN_RCVD 状态
-
-
第三次握手
-
客户端收到确认报文,检查 ack 和 ACK 标志位
-
客户端发送 ACK 报文,标志位 ACK 置为 1,确认号 ack=K+1
-
服务器收到确认报文,检查 ack 和 ACK 标志位,连接建立成功,双方进入 ESTABLISHED 状态
-
-
-
ack 和 ACK 的区别
-
ack:小写的 ack 代表 TCP 首部的确认号 Acknowledge number
-
ACK:大写的 ACK 是 TCP 首部的标志位,用于确认上一个包的操作,确认时置为 1
-
-
握手后的状态
-
握手完成后,客户端和服务器成功建立连接
-
双方都获得彼此的窗口大小、序列号等信息
-
传输 TCP 报文段时,SYN 标志置为 0,只用于发起连接
-
-
三次握手的必要性
-
三次握手类似于电话交流中的确认过程
-
通过三次互相确认,确保双方都能听到对方的声音,保证传输的安全和可靠
-
关闭 TCP 连接:四次挥手
-
四次挥手的定义
-
四次挥手是指关闭 TCP 连接的过程
-
需要客户端和服务端总共发送 4 个包以确认连接的断开
-
-
四次挥手的触发
- 在 socket 编程中,由客户端或服务端任一方执行 close 来触发
-
TCP 连接的全双工特性
-
TCP 连接是全双工的,每个方向必须单独进行关闭
-
一方发送 FIN 表示该方向没有数据流动,但仍可发送数据,直到该方向也发送 FIN
-
-
四次挥手的具体步骤
-
四次挥手示意图
-
第一次挥手
- 客户端发送 FIN 报文段,进入 FIN_WAIT_1 状态,表示没有数据要发送给服务器
-
第二次挥手
- 服务器收到 FIN 报文段,返回 ACK 报文段,客户端进入 FIN_WAIT_2 状态,服务器确认并同意关闭请求
-
第三次挥手
- 服务器发送 FIN 报文段,进入 LAST_ACK 状态,请求关闭连接
-
第四次挥手
-
客户端收到 FIN 报文段,返回 ACK 报文段,进入 TIME_WAIT 状态
-
服务器收到 ACK 报文段后关闭连接
-
客户端等待 2MSL 时间后,确认服务器已关闭,客户端也关闭连接
-
-
-
数据传输和连接关闭
-
TCP 数据传输整个过程
-
在正式进行数据传输之前,需要先建立 TCP 连接
-
成功建立连接后,双方可以进行数据传输
-
不再需要传输数据时,关闭连接即可
-
TCP 状态说明
-
TCP 协议状态简介
-
在建立连接、断开连接以及数据传输过程中,TCP 协议会呈现不同的状态
-
不同状态采取的动作不同,需要处理各状态之间的关系
-
-
CLOSED 状态
- 初始状态
-
LISTENING 状态
-
服务器端的某个 SOCKET 监听客户端的连接请求
-
能接受连接,处于监听状态,等待客户端连接
-
-
SYN_SENT 状态(客户端状态)
-
客户端调用 connect() 函数连接时,发送 SYN 报文请求建立连接
-
进入 SYN_SENT 状态,等待服务器发送三次握手中的第 2 个报文
-
-
SYN_REVD 状态(服务端状态)
-
服务器接受到了 SYN 报文
-
三次握手过程中的中间状态,短暂状态
-
收到客户端的 ACK 报文后进入 ESTABLISHED 状态
-
-
ESTABLISHED 状态
- 连接已经建立
-
FIN_WAIT_1 和 FIN_WAIT_2 状态
-
FIN_WAIT_1
-
表示等待对方的 FIN 报文
-
当 SOCKET 在 ESTABLISHED 状态时,主动关闭连接,发送 FIN 报文,进入 FIN_WAIT_1 状态
-
-
FIN_WAIT_2
-
收到对方的 ACK 报文后进入 FIN_WAIT_2 状态
-
表示等待对方的 FIN 报文
-
FIN_WAIT_1 状态较少见,而 FIN_WAIT_2 状态常见
-
-
-
TIME_WAIT 状态
-
收到了对方的 FIN 报文,并发送 ACK 报文,等待 2MSL 后进入 CLOSED 状态
-
如果在 FIN_WAIT_1 状态收到带 FIN 和 ACK 标志的报文,直接进入 TIME_WAIT 状态,无须经过 FIN_WAIT_2 状态
-
-
CLOSE_WAIT 状态
-
表示在等待关闭
-
当对方 close 一个 SOCKET 后发送 FIN 报文,系统回应 ACK 报文,进入 CLOSE_WAIT 状态
-
需要考虑是否还有数据发送给对方,没有的话可以关闭 SOCKET,发送 FIN 报文
-
-
LAST_ACK 状态
-
被动关闭一方在发送 FIN 报文后,等待对方的 ACK 报文
-
收到 ACK 报文后进入 CLOSED 状态
-
UDP 协议
-
UDP 协议简介
-
UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议
-
它是一种无连接、不可靠的协议,工作在传输层
-
实现简单的数据传输功能,通过 IP 层发送数据
-
-
数据传输特性
-
数据在网络中传输,无法预知到达顺序
-
应用程序需要对数据进行排序处理
-
-
缺乏控制功能
-
UDP 没有流量控制和拥塞控制功能
-
发送端只是简单地封装上层应用的数据,并进行简单校验,然后发送
-
-
接收端行为
-
接收端不会对收到的数据产生应答
-
如果接收到校验错误的数据,接收端会丢弃该 UDP 报文,不通知源主机
-
无法保障数据传输的准确性,需要应用程序保障
-
-
UDP 协议特点
-
无连接、不可靠
- 不建立连接,不保证数据交付
-
尽可能提供交付数据服务
- 出现差错直接丢弃,无反馈
-
面向报文
-
发送方直接将上层数据封装为 UDP 报文,进行校验后递交给 IP 层
-
接收方简单校验后,将数据递交给上层应用
-
-
速度快
-
没有 TCP 的握手、确认、窗口、重传、拥塞控制等机制
-
UDP 是无状态的传输协议,数据传递非常快,即使在网络拥塞时也不会降低发送速度
-
-
-
优缺点及应用场合
-
缺点
- 无连接、不可靠,可能会出现数据丢失或顺序错误
-
优点
-
实时性好,速度快
-
传输错误概率小,适用于对传输速度有要求且可容忍差错的场合
-
-
应用
-
实时视频传输、直播、网络电话等
-
即使出现数据丢失(如视频卡帧),也不会造成重大影响
-
-
端口号的概念
IP 地址的作用
-
互联网中的每一台主机需要一个唯一的 IP 地址来标识其身份
-
数据包通过 IP 地址找到对应的目标主机
主机和进程的关系
-
一台主机通常只有一个 IP 地址
-
主机上运行的网络进程可能有多个(例如 Windows 电脑上的 QQ、微信、钉钉、网页浏览器等)
数据包的进程分配
-
主机接收到网络数据后,需要确定数据对应的接收进程
-
端口号用于确定哪个进程接收数据
端口号的定义
-
端口号是一个数字编号,用于唯一标识一个能进行网络通信的进程
-
端口号的范围为 0~65535
-
每个端口号表示一个能上网的进程
IP 地址和端口号的结合
-
一台主机可以有多个端口号,提供多个服务(如 Web 服务、FTP 服务、SMTP 服务等)
-
IP 地址只能区分不同主机,但不能区分主机中的不同进程
-
通过“IP 地址+端口号”来区分主机上的不同进程