网络互连的目的就是网络通信,即网络数据传输,更具体来说是两台主机上不同进程间基于网络进行的数据传输。
1. 网络通信五元组
不同主机进行数据传输主要依靠网络数据包,一个数据包包括 5 个基本属性,也称作五元组。
网络通信五元组包括:
- 源 IP 地址
- 目的 IP 地址
- 源端口号
- 目的端口号
- 传输协议
以上五个属性共同构成了一个数据包的唯一标识,使一个数据能够从一台主机正确传输到另一台主机。
2. IP
数据在网络传输过程中,如何判断由哪一台主机传送到另一台主机呢?答案其实就是依靠 IP地址!
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址,它使得数据能够在网络中准确路由和传递。
IP地址就好比收/发快递时,需要为快递公司提供的商家发货地址/顾客收件地址,有了这两个地址,快递员才能正确为顾客派发快递,顾客也能在购买商品不满意时为退货提供寄件依据。
IP地址由一系列数字组成,通常以“点分十进制”表示,主要可以分为 IPv4(Internet Protocol version 4) 和 IPv6(Internet Protocol version 6) 两种类型。
其中 IPv4 是一个32位二进制数字(即4个字节),通常被分割为 4 个“8位二进制数字”,如:01100100.00000100.00000101.00000110。
由于二进制数字表示并不直观,因此通常以“点分十进制”来表示一个IP地址,即 a.b.c.d 的形式(其中a、b、c、d均表示0 ~ 255的十进制整数),如:136.25.45.1。
IPv6 则采用 128位二进制数字(即16字节)来表示一台设备的网络地址,它通常被分割为 8 个 “16位二进制数字”,每16位都使用十六进制表示,用 : 来分隔,如2000:0db8:85a3:0000:0000:8a2e:0370:7334。IPv6 的出现主要是为了解决未来 IPv4 地址空间不足的问题。
3. 端口号
在网络通信中,IP地址 主要用于标识网络设备的唯一网络地址,而端口号则用来标识主机中发送数据/接收数据的进程或网络服务,简单来说:端口号用于定位主机中的进程。
端口号的作用类似于购买快递时填写的收件人信息,某个收货地址(IP地址)可能存在大量不同顾客购买的快递,有了收件人信息(端口号),快递员才能准确将快递送达顾客手上。
端口号是一个 0~65535(2个字节)范围的数字,其中 0号端口通常不使用,1 ~ 1023号端口称为“知名端口号”,通常被系统留作特殊用途,如:HTTP协议(80端口)、HTTPS协议(443端口)、SSH协议(22端口)、FTP协议(21端口)等。在网络通信中,某个进程可以通过绑定的端口号来接收或发送网络数据。
注意:一个进行可以同时绑定多个端口号,但一个端口号号只能被一个进程绑定。
4. 协议
什么是协议?
协议是网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。
协议通常由三要素组成:语法、语义、时序。
- 语法:即数据与控制信息的结构或格式。
- 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。
- 时序:即事件实现顺序的详细说明。
协议最终体现为网络传输中数据包的格式。
为什么需要协议?
协议好比一个人为另一个人写一份策划文案,只要做好就能得到相应的奖励,如果文案没有完成或约定的奖励与原先不符,则这次交易就会失败,因此只有双方都遵守约定交易才能顺利达成(网络数据才能被正确传输)。
在真实的网络世界中,数据以光信号或电信号作为媒介,利用信号的“频率”和“强弱”来表示 0、1这样的二进制数字。只有约定好双方的数据格式(即协议),才能保证各式各样的数据被正确传递。
对于一台计算机,生产厂商有很多,计算机操作系统有很多,计算机网络硬件设备也很多,如何让任意两台主机都能顺利完成通信呢?
答案就是约定一个公共的数据传输标准。并且让大家都去遵守这个约定。简单来说,数据传输的约定就是网络协议!
5. 协议分层
为什么需要进行协议分层?
在网络通信中,一条简单的数据(如:“你好,世界”)的传输需要约定好各种数据格式,如果这些数据格式由一个整体的巨大的协议提供支持,协议会显得十分臃肿和复杂,不利于别人理解。因此,将功能各异的协议进行分层,就显得十分必要了。
协议分层最大的好处:简化协议的复杂性,将协议划分为多个功能不同、相对独立的层次,对于每一层的来说只需利用下层提供的服务来完成本层的通信功能,不必关心下层协议具体的实现细节。
OSI七层模型
OSI:即Open System Interconnection,开放系统互连。它将网络协议从上到下分为以下7层:
注意:OSI七层模型既复杂且不实用,因此最终没有落地实现。
TCP/IP 五层模型(四层模型)
TCP/IP 五层模型将OSI七层模型中的表示层、会话层、应用层的功能合并为一层,从上到下具体表现为 以下5层:
-
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程
访问协议(Telnet)等。我们的网络编程主要就是针对应用层。 -
传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发
送到目标主机。 -
网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表
的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。 -
数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上
检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。
有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。 -
物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同
轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理
层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
参考资料出自:TCP/IP四层模型和OSI七层模型的概念
如何理解TCP/IP五层模型?
还是拿网购一件商品来说,应用层表现为该商品的用途,传输层关注快递的发货地址和收货地址,网络层关注这两个地址间的路径规划(如有多少条路径,每条路径经过哪些地方等),数据链路层关注中间两个路径间该使用什么交通工具去运输更加合适,物理层则是公路、铁路等基础设施,为运输提供最基本的保障。
OSI七层模型与TCP/IP五层模型的对比如下:
网络设备所在分层
主机:它的操作系统内核实现了TCP/IP五层模型中的下4层,即传输层到物理层。
路由器:它实现了TCP/IP五层模型中的下3层,即网络层到物理层。
交换机:它实现了TCP/IP五层模型中的下2层,即数据链路层到物理层。
集线器:它只实现了物理层。
6. 两台主机之间的网络通信流程
在了解两台主机间通信的具体流程前,我们需要理解客户端和服务器是什么,请求和响应是什么。
客户端:客户端是指连接到服务器的计算机或设备,用于发送请求或处理服务器提供的服务或数据。客户端可以是任何设备,如个人电脑、智能手机、平板电脑等。
服务器:服务器是一种用于存储、处理和传输数据的计算机系统。它通常用于提供网络服务、存储文件和托管网站。服务器可以是物理设备,也可以是虚拟系统。
请求:请求是客户端向服务器发送的消息,用于请求特定的资源或执行特定操作。
响应:响应是服务器对客户端发送的请求的回复,其中包含请求的结果或执行的操作。
TCP/IP 通讯的流程如下图:
客户端发送的请求数据会从 应用层到数据链路层 会被一层层进行封装,加上数据首部,其中首部信息中包含了类似首部长度、载荷信息和长度、上层协议是什么等信息;当数据包通过传输介质到达目的主机时,数据从下到上又会被一层层解析,去除数据首部信息,并根据这些信息将数据交给不同的协议处理。
封装的过程如下:
分用的过程如下: