1.UDP
·使用网络能够把多方链接在一起,然后可以进行数据传递
·所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信
UDP可以随时发送,没有接收者也可以发送。
2.tcp/ip简介
作为新时代标杆的我们,已经离不开手机、离不开网络,对于互联网大家可能耳熟能详,但是计算机网络的出现比互联网要早很多
2.1什么是协议
有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了
为了解决不同种族人之间的语言沟通障碍,现规定国际通用语言是英语,这就是一个规定,这就是协议
2.2 计算机网络沟通用什么
那么不同种类之间的计算机到底是怎么进行数据传递的呢?
就像说不同语言的人沟通一样,只要有一种大家都认可都遵守的协议即可,那么这个计算机都遵守的网络通信协议叫做TCP/IP协议
2.3 TCP/IP协议(族)
早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容
为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(Internet Protocol Suite)就是通用协议标准。
因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议
常用的网络协议如下图所示:
说明:
网际层也称为:网络层
网络接口层也称为:链路层
3.端口
3.1.什么是端口
端口就好一个房子的门,是出入这间房子的必经之路。
如果一个进程需要收发网络数据,那么就需要有这样的端口
在linux系统中,端口可以有65536(2的16次方)个之多!
既然有这么多,操作系统为了统一管理,所以进行了编号,这就是端口号
3.2端口号
端口是通过端口号来标记的,端口号只有整数,范围是从0到65535
端口号不是随意使用的,而是按照一定的规定进行分配。
3.3 知名端口(Well Known Ports)
知名端口是众所周知的端口号,范围从0到1023
如: 80端口分配给HTTP服务
21端口分配给FTP服务
一般情况下,如果一个程序需要使用知名端口的需要有root权限
3.4 动态端口(Dynamic Ports)
动态端口的范围是从1024到65535
之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。
动态分配是指当一个系统进程或应用程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。
当这个进程关闭时,同时也就释放了所占用的端口号。
3.5 怎样查看端口 ?
用“netstat-ano” “ps -aux”查看端口状态
3.6 小总结
端口有什么用呢 ? 我们知道,一台拥有IP地址的主机可以提供许多服务,比如HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口。
4.ip地址
4.1 什么是地址?
地址就是用来标记地点的
4.2 ip地址的作用
ip地址:用来在网络中标记一台电脑的一串数字,比如192.168.1.1;在本地局域网上是惟一的。
4.3 ip地址的分类
每一个IP地址包括两部分:网络地址和主机地址
5. 子掩网码的作用
子网掩码不能单独存在,它必须结合IP地址一起使用。
子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分子网掩码的设定必须遵循一定的规则。
与IP地址相同,子网掩码的长度也是32位,
6.socket简介(套接字)
6.1.本地的进程间通信(IPC)有很多种方式,例如
·队列
·同步(互斥锁、条件变量等)
以上通信方式都是在一台机器上不同进程之间的通信方式,那么问题来了
网络中进程之间如何通信?
6.2网络中进程之间如何通信
首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!
在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。
其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。
这样利用ip地址,协议,端口就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互
6.3什么是socket
socket(简称套接字)是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:
它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的
6.4创建socket
在Python中 使用socket模块的函数socket就可以完成:
socket.socket (AddressFamily, Type)
说明:
函数socket.socket创建一个socket,返回该socket的描述符,该函数带有两个参数:
·Address Family:可以选择AF_INET(用于Internet进程间通信) 或者AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET
·Type:套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)或者SOCK_DGRAM(数据报套接字,主要用于UDP协议)
7.UDP介绍
UDP ---用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
UDP特点:
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。
【适用情况】
UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,比如
·语音广播
·视频
·TFTP(简单文件传送)
·SNMP(简单网络管理协议)
·RIP(路由信息协议,如报告股票市场,航空信息)
·DNS(域名解释)
注重速度流畅:
UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。
8.1.1.1udp网络程序-发送数据
socket函数
mySocket = socket(family, type)
函数socket()的参数family用于设置网络通信的域,函数socket()根据这个参数选择通信协议的族。通信协议族在文件sys/socket.h中定义。
函数socket()的参数type用于设置套接字通信的类型,主要有SOCKET_STREAM(流式套接字)、SOCK——DGRAM(数据包套接字)等。
并不是所有的协议族都实现了这些协议类型,例如,AF_INET协议族就没有实现SOCK_SEQPACKET协议类型。
创建一个udp客户端程序的流程是简单,具体步骤如下:
1.创建客户端套接字
2.发送/接收数据
3.关闭套接字
代码如下:
from socket import *
#1.创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
#2.准备接收方的地址
sendAddr = ('192.168.11.74', 7788)
#3.从键盘获取数据
sendData = input("请输入要发送的数据:")
#4.发送数据到指定的电脑上
udpSocket.sendto(sendData.encode('gbk'), sendAddr)
#5.关闭套接字
udpSocket.close()
9.网络程序-发送接收
发送:
接收:
接收并发送:
udp应用:给飞秋发消息:
udp广播:
聊天:
udp总结
1. udp是TCP/IP协议族中的一种协议能够完成不同机器上的程序间的数据通信
2. udp服务器、客户端
·udp的服务器和客户端的区分:往往是通过请求服务和提供服务来进行区分
·请求服务的一方称为:客户端
·提供服务的一方称为:服务器
3. udp绑定问题
·一般情况下,服务器端,需要绑定端口,目的是为了让其他的客户端能够正确发送到此进程
·客户端,一般不需要绑定,而是让操作系统随机分配,这样就不会因为需要绑定的端口被占用而导致程序无法运行的情况