目录
前言
在一个主机中,我们能进行进程间通信,但是随这时代发展,我们不可能只是在单独的一个主机中传输数据,,因此有很多天才就发明了不同主机间的通信方式。下面我们就简单看一下网络的发展历程,简单了解即可
网络编程的起源与计算机网络的演变密切相关,其发展可以追溯到上世纪60年代和70年代的早期网络研究。
1. ARPANET(1960年代末)
ARPANET(Advanced Research Projects Agency Network)是最早的计算机网络之一,由美国国防部高级研究计划局(ARPA)资助和开发。ARPANET的设计初衷是为了在多个计算机之间进行数据交换和资源共享。- **包交换技术**:ARPANET采用了包交换技术,而不是传统的电路交换技术,这使得网络通信更加高效和可靠。
- **网络协议**:为了使不同的计算机能够互通,ARPANET开发了第一个网络协议——NCP(Network Control Protocol)。这一协议是后来的TCP/IP协议的前身。2. TCP/IP协议的提出(1970年代)
在ARPANET的基础上,Vint Cerf和Bob Kahn于1974年提出了TCP/IP协议(传输控制协议/互联网协议),这为现代互联网奠定了基础。- **TCP(Transmission Control Protocol)**:负责确保数据传输的可靠性。
- **IP(Internet Protocol)**:负责数据包的路由和转发。3. 互联网的诞生(1980年代)
1983年,ARPANET正式切换到使用TCP/IP协议,标志着互联网的正式诞生。此时,网络编程开始进入一个新的阶段,网络通信的标准化和普及使得编写网络程序成为可能。4. 客户端-服务器模型(1980年代末)
随着互联网的普及,客户端-服务器模型成为了网络编程的主要架构。这一模型中,客户端发起请求,服务器响应请求并提供服务。- **套接字(Socket)编程**:客户端和服务器通过套接字进行通信。套接字编程成为了网络编程的基本方法之一。
5. 万维网(WWW)的出现(1990年代初)
1991年,蒂姆·伯纳斯-李(Tim Berners-Lee)提出了万维网(World Wide Web)的概念,并开发了第一个Web浏览器和Web服务器。这一发明极大地推动了网络编程的发展,使得网络应用程序变得更加直观和用户友好。- **HTTP(超文本传输协议)**和**HTML(超文本标记语言)**:成为Web应用程序的基础技术,使得信息的传输和展示变得更加方便。
6. 现代网络编程(2000年代及以后)
进入21世纪后,网络编程的领域得到了极大的扩展,包括Web开发、移动应用开发、云计算、分布式系统等。- **RESTful API**和**GraphQL**:用于创建网络服务和API接口,支持现代Web应用的灵活和高效的数据交换。
- **WebSocket**:支持全双工通信,广泛应用于实时应用,如聊天应用和在线游戏。
- **容器化和微服务架构**:使得网络应用的部署和管理更加灵活和高效。网络编程的发展不仅仅是技术的演变,更是互联网应用模式和用户需求的变化。今天的网络编程涉及的范围非常广泛,涵盖了从底层网络协议到高层Web应用的各种技术。
上面是网络的发展历程,而本文的重点其实就是如何理解网络编程,
一、网络编程的概念
网络编程就是进程间通信,只不过多个进程不一定在同一台主机上,由于不在同一个主机上,不在同一个进程就需要注意通信协议
从网络的发展历程我们也可以知道,为了高效的传输数据,在网络传输中引入了分层的理念,并且为了保证数据传输的精准性,还添加了联网协议来保证数据传输不会出现传输错误,避免数据发送目的地错误。
以下是ISO(国际标准化组织)指定的一个国际标准OSI(开放式通信系统互联参考模型),对通信系统进行标准化,比较偏理想化
定义了7层模式
分层的好处:
1、各层之间相互独立,每一层不需要知道下一层如何实现,仅仅只需要知道该层通过层次间的接口提供服务
2、稳定,当任何一层发生变化时,只要层间接口关系保持不变,则其他层不受影响
3、易于实现和维护
4、促进标准化工作
5、各层之间相互配合,提高传输效率
但是在实际应用当中,我们通常把网络通信分为四层或者五层,这样更容易实现:
这样分层之后,不会对数据传输有任何影响,而且会更容易实现,所以一般采用四层或者五层来进行网络通信
假如你已经知道一些网络的知识基础,我们可以这样理解:
在用户空间中,我们在进程中,也就是在某个应用当中,比如我们在微信当中发送一条消息给朋友或者家人,我们是如何将我们手机里的信息传输到对应手机里来实现通信的呢?
首先,我们在打开微信之后,微信这个进程会运行,然后你输入数据,微信就是应用层。第二步,在传输层中会在数据安装上一个标签,也就是协议,这个协议在传输层中特有的,目的是确定这个消息是发送给微信,而不是其他应用。在网络层中,我们又在数据里面安装上一个协议,这个协议是确保这个消息是发送给哪个手机的。在网络接口层中,我们会在数据中安装一个协议,让数据在手机和基站当中传输,这个传输的过程要重复进行多次,因为从你手机最近的基站到你想要传输的目的地很远,要通过一个又一个基站来进行传输,则要进行多次。
那么在传输层我们安装的协议通常有TCP、DUP协议,在网络层我们通常安装的是IP协议,所以在日常工作中,我们经常提到TCP\IP协议
二、TCP/IP架构体系的各层作用
1、网络接口层(网络访问层)
- 功能:包括ip地址与物理地址的映射(mac地址),以及将上一层的ip保温封装成帧,转换成二进制比特流传输
- mac:主机的物理地址,48bit全球唯一(物理网卡的编号),网络设备的身份标识,由厂商生产确定
- 改变网络环境,ip地址可能发生改变,mac地址不变
- ARP/RARP:地址解析协议/逆向地址解析协议
- ARP:通过ip地址获取对应的mac地址
- RARP:通过MAC地址获取对应的ip地址
- PPP:拨号协议
- MTU:最大传输单元:1500bytes
- MSS:最大报文长度:1460bytes
2、网络层
- 功能:负责在主机之间的通信,在通信中选择数据包传输的路径,即选择路由
- IP:主机的网络地址
- IP协议:
IP协议根据数据包的目的ip地址来决定如何投递数据包
如果数据包不能直接投递给目的主机,那么IP协议就为数据包寻找下一个合适的下一跳路由器
- ICMP协议:
因特网控制管理协议,ping检测网络就是使用这个协议
用于在ip主机、路由器之间传递控制信息
- IGMP协议:
因特网分组管理协议、组播、广播
3、传输层
- 负责提供应用程序之间通信服务,这种服务又称为端对端
- 传输层与网络层不同,传输层只关心通信的起始端 和 目的端,并不在乎数据包的传输中转过程
- TCP:传输控制协议
提供面向连接的,一对一的可靠数据传输协议
- UDP:用户数据报协议
提供无连接的,不可靠的尽力的传输协议,但是效率更高
4、应用层
- 功能:负责处理应用程序逻辑,通信数据的解析与组织
- HTTP/HTTPS协议:
超文本传输协议,万维网数据通信的基础
- http:明文传输,https:加密传输
- SMTP:简单邮件传输协议
- IMAP:交互式邮件存储协议
- DNS:域名解析协议
三、网络通信中常用的专业术语
- 网关:
- 定义:网关是网络中的某台设备的IP地址,
- 举例:
- 你的电脑的网关是路由器的IP地址。
- 路由器的网关则是指它连接到的ISP网络的设备地址。
- IP地址
- IP地址是因特网中主机的标识(IP地址作为主机在网络中的标识),进行通信时每个数据包都必须携带目的IP地址和源IP地址,网络中的路由依靠此信息作为数据包的路由选择
- IP地址是,设置连接到路由器后,由路由器来分配
- 端口号
为了区分一台主机收到的数据包要交给哪个进程处理,为网络应用程序设置一个端口号来区分进程。
程序启动后将端口号与进程绑定在一起
网络通信由IP地址+端口号 来确定通信对象
端口号用2字节无符号整数标表示[1,65535]
TCP和UDP的端口号是相互独立的(使用TCP和使用UDP可以使用同一个端口号)
四、IP地址的分类和划分
IP地址分类:
IPV4:采用4个字节,32bit的无符号整数存储IP地址,共有:2^32 = 42.9亿个
IPV6:采用16个字节,128bit的无符号整数存储IP地址。共有2^128(IPV4与IPV6不兼容)
IP地址的划分:
- 定义:由于IP地址基数比较大,所以为了提高寻径效率,则将IP地址划分成二级IP地址
- 二级IP地址 = 网络号 + 主机号 == IP地址(IP地址分为两段)
- 网络号:确认计算机从属的物理网络地址
- 主机号:确定网络号后,用主机号标识该网络号中的所有主机
因此通常我们将IP地址分为5类IP地址,方便寻找IP地址