网络编程
# IP地址的介绍
IP地址就是表示网络中设备的一个地址,好比现实生活中的家庭地址。
IP地址的作用是表示网络中唯一的一台设备的,也就是说通过IP地址能够找到网络中某台设备。
查看IP地址使用 ipconfig/ifconfig 这个命令
测试网络是否畅通的命令:
ping ip地址
# 端口和端口号的介绍
问题思考
不同电脑上的飞秋之间进行数据通信,它是如何保证把数据传给飞秋而不是给其它软件呢?
其实,每运行一个网络程序都会有一个端口,想要给对应的程序发送数据,找到对应的端口即可。
# 什么是端口
端口是传输数据的通道,好比教室的门,是数据传输必经之路。
那么如何准确找到对应的端口呢?
其实,每个端口都会有一个对应的端口号,好比每个教室的门都有一个门牌号,想要找到端口通过端口号即可。
# 什么端口号
操作系统为了统一管理这么多端口,就对端口进行了编号,这就是端口号,端口号其实就是一个数字,好比我们现实生活中的门牌号。
端口号有65535个。
那么最终飞秋之间进行数据通信的流程是这样的,通过ip地址找到对应的设备,通过端口号找到对应的端口,然后通过端口把数据传输给应用程序。
# 端口号的分类
知名端口号
知名端口号是指中所周知的端口号,范围从0-1023
这些端口号一般固定分配给一些服务,比如21端口分配给FTP服务,25端口分配给SMTP服务,80端口分配给HTTP服务动态端口号
一般程序员开发应用程序使用端口号称为动态端口号,范围是从1024-65535
如果程序员开发的程序没有设置端口号,操作系统会在动态端口号这个范围内随机生成一个给开发的应用程序。
当运行一个程序默认会有一个端口号,当这个程序退出时,所占用的这个端口号就会被释放。
# TCP的介绍
之前我们学习了IP地址和端口号,通过IP地址能够找到对应的设备,然后再通过端口号找到对应的端口,再通过端口把数据传输给应用程序,这里需要注意,数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信,而这个传输协议就是我们今天学习的TCP。
# TCP的概念
TCP简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP通信步骤:
- 创建连接
- 传输数据
- 关闭连接
# TCP的特点
- 面向连接
- 通信双方必须先建立好连接才能进行数据的传输,数据传输完成后,双方必须断开此链接,以释放系统资源
- 可靠传输
- TCP采用发送应答机制
- 超时重传
- 错误校验
- 流量控制和阻塞管理
# Socket介绍
# 问题思考
到目前为止,我们学习了ip地址和端口号还有tcp传输协议,为了保证数据的完整性和可靠性我们使用tcp传输协议进行数据的传输,为了能够找到对应设备我们需要使用ip地址,为了区别某个端口的应用程序接收数据我们需要使用端口号,那么通信数据是如何吃晚餐传输的呢?
使用socket来完成
# socket的概念
socket简称套接字是进程之间通信一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个socket
# socket的作用
负责进程之间的网络数据传输,好比数据的搬运工,不夸张的说,只要跟网络相关的应用程序或者软件都使用到了socket
# TCP网络应用开发流程
TCP网络应用开发分为:
- TCP客户端程序开发
- TCP服务端程序开发
说明:
客户端程序是指运行在用户设备上的程序,服务端程序是指运行在服务器设备上的程序,专门为客户端提供数据服务。
# TCP客户端程序开发流程的介绍
# TCP客户端程序开发
- 创建客户端套接字对象
- 和服务端套接字建立连接
- 发送数据
- 接收数据
- 关闭客户端套接字
# socket类的介绍
导入socket模块 import socket
创建客户端socket对象
socket.socket(AddressFamily, Type)
参数说明:
- AddressFamily表示IP地址类型,分类IPv4和IPv6
- Type表示传输协议类型
方法说明:
- connect((host, port)) 表示和服务端套接字建立连接,host是服务器ip地址,port是应用程序的端口号
- send(data) 表示发送数据,data是二进制数据
- recv(bufersize) 表示接收数据,buffersize是每次接收数据的长度