linux网络编程的入门

一、基本概念

网络编程:设计一个能够通过网络与另一个进程进行通信的程序,进程可以简单理解为运行中的程序。其中一端叫客户端(通信双方中主动发起请求的这一方,必须知道服务端在哪里)、另一端是服务端(通信双方中被动接收请求的这一方是服务端,必须告诉客户端自己在哪里,通常都是一个固定地址)。

路由器:局域网和外部网络通信的出入口。

路由器对内管理子网(局域网),可以在路由器中设置子网的网段,设置有线端口的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,撤消连接。

 

 

 

推荐:

https://blog.csdn.net/tennysonsky/article/details/44239133?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.nonecase

补充说明:

最近正在学习linux网络编程的相关知识,对网络上的相关资料进行整理,属于“搬运工”,如有侵权,请告知,我将及时删除,部分内容为个人理解,如有出错,请指教,欢迎大家探讨学习!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值