一、基本概念
网络编程:设计一个能够通过网络与另一个进程进行通信的程序,进程可以简单理解为运行中的程序。其中一端叫客户端(通信双方中主动发起请求的这一方,必须知道服务端在哪里)、另一端是服务端(通信双方中被动接收请求的这一方是服务端,必须告诉客户端自己在哪里,通常都是一个固定地址)。
路由器:局域网和外部网络通信的出入口。
路由器对内管理子网(局域网),可以在路由器中设置子网的网段,设置有线端口的IP地址,设置dhcp功能等,因此局域网的IP地址是路由器决定的;路由器对外实现联网,联网方式取决于外部网络(如ADSL拨号上网、宽带帐号、局域网等)。这时候路由器又相当于是更高层级网络的其中一个节点而已。
路由器的主要功能是为经过路由器的每个数据包寻找一条最佳路径(路由)并转发出去,作为外网和内网数据传输的桥梁。
DHCP动态主机配置协议:前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。
DHCP运行分为四个基本过程,分别为发现阶段、提供IP、选择IP租约和确认IP租约。
套接字Socket:网络连接的一个端点。每个套接字都有相应的套接字地址,由一个32位的因特网地址和一个16位的端口号组成,用“IP地址:端口号”来表示,如:192.168.181.129:9999,其中“192.168.181.129”表示IP地址,“9999”表示端口号。Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。
每一个Socket都用一个半相关描述:{协议,本地地址,本地端口}
一个完整的Socket则用一个相关描述:{协议,本地地址,本地端口,远程地址,远程端口}
IP地址是在IP协议中用来标识网络中不同主机的地址,分为IPv4和IPv6。
端口号是具有网络功能的应用软件的标识号,端口号用来标识一个进程,告诉操作系统当前的这个数据要交给哪一个进程来处理,IP地址+端口号能够标识网络上的某一台主机的某一个进程。
TCP/IP网络协议
TCP/IP协议族是当今互联网最基础的四层网络协议系统。
数据链路层:负责帧数据的传递。(经过数据链路层封装的数据称为帧)
网络层:负责数据怎样传递过去
传输层:负责传输数据的控制(准确性、安全性)
应用层:负责数据的展示和获取
传输层协议: 包括TCP/UDP两种协议 需要用户告诉操作系统,到底传输层应该用哪个协议
UDP (用户数据报协议) :无连接,不可靠;面向数据报;传输性能高,但是不保证可靠传输
适用场景:实时性要求极高,但是安全性要求不是很高的场景—视频传输
TCP (传输控制协议):面向连接, 可靠传输;面向字节流;输性能较低,但是保证可靠传输
适用场景:安全性要求极高—文件传输。
基于UDP协议的socket客户端与服务端的通信编程
- 客户端: 1. 创建套接字–> 2. 为套接字绑定地址(客户端不推荐主动绑定) --> 3. 发送数据–> 4.接收数据–> 5.关闭套接字
- 服务端: 1. 创建套接字–>2.为套接字绑定地址–>3. 接收数据–>4.发送数据–>5.关闭套接字
- 如下图
服务端:建立socket,申明自身的port和IP,并绑定到socket,使用listen监听,然后不断用accept去查看是否有连接。如果有,捕获socket,并通过recv获取消息的内容,通信完成后调用closeSocket关闭这个对应accept到的socket。如果不需要等待任何客户端连接,那么用closeSocket直接关闭自身的socket。
客户端:建立socket,通过端口号和地址确定目标服务器,使用Connect连接到服务器,send发送消息,等待处理,通信完成后调用closeSocket关闭socket。
基于TCP协议的socket客户端与服务端的通信编程
- 客户端: 1. 创建套接字–> 2.绑定地址(不推荐主动绑定)–> 3.向服务端发起连接–> 4.发送数据–> 5. 接收数据–> 6.关闭套接字
- 服务端: 1. 创建套接字–> 2.绑定地址–> 3.开始监听–> 4.获取已完成连接–> 5.通过获取的已完成连接socket接收数据–> 6.通过获取的已完成连接socket发送数据–> 7.关闭套接字
- 如下图
DNS(Domain Name Service 域名服务)
DHCP(dynamic host configuration protocl,动态主机配置协议)
形象化比喻
将电话系统与面向连接的Socket机制类比,电话的通话双方相当于两个需要通信的进程
通话双方所处的地区相当于一个网络,比如局域网、域域网、广域网
区号是他们的网络地址,分为ipv4和ipv6
区内一个单位的交换机相当于一台主机,主机位每个用户分配的局内号码"电话号码”相当于socket。
任何用户在通话之前,首先要占有一部电话机,相当于申请一个Socket号;同时要知道对方的电话号码,相当于对方有一个 Socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是向电话机发出信号和从电话机接受信号的过程,相当于向Socket发送数据和从Socket接受数据。通话结束后,一方挂起电话机,相当于关闭Socket,撤消连接。
推荐:
补充说明:
最近正在学习linux网络编程的相关知识,对网络上的相关资料进行整理,属于“搬运工”,如有侵权,请告知,我将及时删除,部分内容为个人理解,如有出错,请指教,欢迎大家探讨学习!