【网络】网络的基本结构与特征
一. 网络通信的基本元素
1.IP地址
a. 概念
IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主机的⽹络地址。
就像我们发送快递⼀样,需要知道对⽅的收货地址,快递员才能将包裹送到⽬的地。
b. 格式
IP地址是⼀个32位的⼆进制数,通常被分割为4个“8位⼆进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。
通常⽤==“点分⼗进制”==的⽅式来表⽰,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的⼗进制整数)。如:192.138.0.1。
2. 端口号
a. 概念
在⽹络通信中,IP地址⽤于标识主机⽹络地址,端⼝号可以标识主机中发送数据、接收数据的进程。简单说,端⼝号⽤于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。
b. 格式
端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收⽹络数据。
3.协议
⽹络通信传输的数据类型可能有多种:图⽚,视频,⽂本等。基于⽹络数据传输,需要使⽤协议来规定双⽅的数据格式。
a. 概念
协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在⽹络上传输的数据包的格式。
二. TCP/IP 五/四层网络协议
1.五元组
在TCP/IP协议中,⽤五元组来标识⼀个⽹络通信:
- 源IP:标识源主机
- 源端⼝号:标识源主机中该次通信发送数据的进程
- ⽬的IP:标识⽬的主机
- ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双⽅约定的数据格式
2.四/五层协议
- 应⽤层:负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。
- 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到⽬标主机。
- ⽹络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹路层。
- 数据链路层(网卡层):负责设备之间的数据帧的传送和识别。交换机(Switch)⼯作在数据链路层。
- 物理层:负责光/电信号的传递⽅式。集线器(Hub)⼯作在物理层。(四层协议不含)
问:为什么网络协议要分层?
分层最⼤的好处,类似于⾯向接⼝编程:定义好两层间的接⼝规范,让双⽅遵循这个规范来对接。
在代码中,类似于定义好⼀个接⼝,⼀⽅为接⼝的实现类(提供⽅,提供服务),⼀⽅为接⼝的使⽤类(使⽤⽅,使⽤服务):
• 对于使⽤⽅来说,并不关⼼提供⽅是如何实现的,只需要使⽤接⼝即可
• 对于提供⽅来说,利⽤封装的特性,隐藏了实现的细节,只需要开放接⼝即可。
这样能更好的扩展和维护。
也就是说,后续在进行网络编程时,面向传输层协议提供给应用层的接口进行编程即可,无需关注网络层,数据链路层以及物理层是如何工作的。
3.封装和分用
a. 封装
- TCP/UDP首部中承载的最重要的信息就是源端口和目的端口;
- IP首部中承载的最关键的信息就是源IP和目的IP;
b. 分用
对于实际中的情况,两台通信的主机一般不会是由网线直连的。而是通过一系列的交换机/路由器进行数据转发:
对于交换机,只封装分用到数据链路层;对于路由器,只封装分用到网络层。
4.网络传输单位术语
- 包(packet) IP数据包
- 段(segment) TCP数据段
- 报(datagram) UDP数据报
- 帧(frame) 以太网数据帧
三. TCP/UDP的特点
TCP | UDP |
---|---|
有连接 | 无连接 |
可靠传输 | 不可靠传输 |
面向字节流 | 面向数据报 |
全双工 | 全双工 |
- 此处的有/无连接不是真实意义上的连接,而是虚拟的连接,例如:打电话就是有连接,发微信就是无连接;
- 此处的可靠传输指的是发送的数据对方收没收到,发送方可以清楚的感知到;
- 全双工相对于半双工,一个通道可以双向通信就是全双工,只能单向通信就是半双工。
此处TCP/UDP的特点会在后面的网络编程中体现出来,后续我们再细细说来。