1.1. 网络
网络就是一种辅助双方或者多方能够连接在一起的工具。
使用网络的目的
就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方。 前面的学习编写的程序都是单机的,即不能和其他电脑上的程序进行通信。 为了让在不同的电脑上运行的软件,之间能够互相传递数据,就需要借助网络的功能。 所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。
1.2. ip地址
ip地址:用来在网络中标记一台电脑,比如192.168.1.1;在本地局域网上是唯一的。
1.3. 端口
端口是通过端口号来标记的,端口号只有整数,范围是从0到65535。 通过ip我们能够找到网络上的一台主机,一台主机上有很多网络应用,这些网络应用在不同端口进行监听,收取发往自己端口的数据。通过ip+端口,我们的应用程序可以在不同主机间通信。
知名端口
知名端口是众所周知的端口号,范围从0到1023
80端口分配给HTTP服务 21端口分配给FTP服务
1.4. tcp-ip
作为新时代标杆的我们,已经离不开手机、离不开网络,对于互联网大家可能耳熟能详,但是计算机网络的出现比互联网要早很多
1.5. 什么是协议
有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了
为了解决不同种族人之间的语言沟通障碍,现规定国际通用语言是英语,这就是一个规定,这就是协议
计算机网络沟通用什么
现在的生活中,不同的计算机只需要能够联网(有线无线都可以)那么就可以相互进行传递数据
那么不同种类之间的计算机到底是怎么进行数据传递的呢?
就像说不同语言的人沟通一样,只要有一种大家都认可都遵守的协议即可,那么这个计算机都遵守的网络通信协议叫做TCP/IP协议
TCP/IP协议(族)
早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容
为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议族(Internet Protocol Suite)就是通用协议标准。
因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议(族)
常用的网络协议如下图所示:
说明:
网际层也称为:网络层 网络接口层也称为:链路层
1.6. Socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少需要两端(socket)。socket本质是编程接口(API),是对TCP/IP或UDP/IP协议的封装,TCP/IP或UDP/IP协议也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
1.7. UDP
UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对方。所以UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。
udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中"写信"(只需将信件投入信箱),不能确认收信人最终是否收到。
udp通信中,服务器客户端通信流程:
server.py
from socket import * from time import ctime HOST = '' PORT = 8888 BUFSIZ = 1024 ADDR = (HOST, PORT) udpSerSock = socket(AF_INET, SOCK_DGRAM) udpSerSock.bind(ADDR) while True: print('waiting for message...') data, addr = udpSerSock.recvfrom(BUFSIZ) content = '[%s] %s' % (bytes(ctime(), "utf-8"), data) udpSerSock.sendto(content.encode("utf-8"), addr) print('...received from and returned to:', addr) udpSerSock.close()