网络编程的实质
应用开发中大多都会涉及到网络功能,网络编程是Linux应用开发中非常核心的技术之一。
网络编程的目的是直接或间接地通过网络协议与其他计算机进行通讯。
作为应用开发程序员,我们开发的软件都是应用软件,而应用软件必须运行于操作系统之上,操作系统则运行于硬件之上,应用软件是无法直接操作硬件的,应用软件对硬件的操作必须调用操作系统的接口,由操作系统操控硬件。
网络编程的实质:
1.通过操作相应 API 调度计算机硬件资源,并利用传输管道(网线)进行数据交换的过程。
2.网络编程编写的是传输层面代码,再往下就是操作系统提供的功能,我们在传输层编写 TCP 或 UDP 代码,会调用下层的接口,而这些接口是操作系统提供的。
什么是网络
计算机之间的通信要有:
1.物理链接介质:网线,交换机,路由器等网络设备。
2.互联网协议:客户端按照协议规定的格式组织数据发送,服务端 按照相同的协议解析出来。
按照功能不同,人们将互联网协议分为按照功能不同,人们将互联网协议分为OSI七层或TCP/IP五层或TCP/IP四层
TCP/IP协议:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础。
OSI七层协议:为了解决网络通信中这样不互通的问题,国际标准化组织ISO于1977年成立了一个委员会,在现有网络的基础上,提出了不基于具体机型、操作系统或公司的网络体系结构,称为开放系统互联模型。
socket
我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
网络通信要素
网络通信实现要素:协议、本地地址、本地端口、远程地址、远程端口。
1.socket之传输协议
TCP协议与UDP协议是负责数据封装与打包的协议,它们都是传输层协议。
(1)tcp协议
TCP 是面向连接的通信协议;
通过 3 次握手建立连接,通讯完成时要拆除连接;
由于 TCP 是面向连接的,所以只能用于端到端的通讯,在和一端通讯的同时,不能和其他端通讯;
(2)udp协议
UDP 是面向无连接的通讯协议;
UDP 数据包括目的端口号和源端口号信息;
由于通讯不需要连接,所以可以实现广播发送,并不局限于端到端;
2.IP
在Internet上IP地址和主机名是一一对应的,通过域名解析可以由主机名得到机器的IP,由于机器名更接近自然语言,容易记忆,所以使用比IP地址广泛,但是对机器而言只有IP地址才是有效的标识符。
3. 端口号(portnumber):网络通信时同一机器上的不同进程的标识。
如:80,21,23,25,其中1~1024为系统保留的端口号
网络编程模型
目前较为流行的网络编程模型是客户机/服务器(C/S)结构,C指的是client(客户端软件),S指的是Server(服务器软件)。
以使用TCP协议通讯的socket为例,其交互流程如下: