网络编程基础
- 网络编程
- 网络编程概述
- TCP/IP协议
- IP地址
- 什么是IP
- IP组成
- IP 地址使用过程
- 查看IP
- Ip地址分类:
- 子网掩码
- 端口
- socket
- Socket原理
- 1.什么是Socket
- 2.创建一个tcp socket(tcp套接字)
- tcp 介绍
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主
网络编程
网络编程概述
📌 计算机网络:
📜📜计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
📌 网络编程的目的:
- 传播交流信息、数据交换、通信。
📌 想要达到什么效果需要什么:
- 如何准确定位网络上的某台主机。 IP地址+端口。定位到计算机上的某个资源。 找到这台主机,如何传输数据。
- 在网络操作系统中使用的通信协议有TCP/IP、NetBEUI、IPX/SPX、AppleTalk等。
TCP/IP协议
- TCP/IP协议是目前最成熟并被广泛使用的通信协议之一,TCP/IP协议不仅广泛应用于各种类型的局域网络,也是Internet的协议标准,用于实现不同类型的网络以及不同类型操作系统的主机之间的通信。
- TCP/IP事实上是一个协议系列或协议族,目含了100多个协议,包括ARP、ICMP、IGMP、IP、TCP和UDP等多种协议,其中tcp协议和IP协议是最重要的两个协议。
IP地址
什么是IP
🎯IP(Internet Protocol,Internet协议)是一个无连接的协议,主要负责在主机之间寻址,并为数据包设定路由。
- IP 地址是一个唯一地址,用于标识互联网或本地网络上的设备。IP 代表“互联网协议”,它是控制通过互联网或本地网络发送的数据格式的一组规则。它是互联网工作原理中的关键组成部分
IP组成
📜📜 IP 地址是一串由句点分隔的数字。IP 地址表示为一组四个数字,比如 192.158.1.38 就是一个例子。该组合中的每个数字都可以在 0到 255 的范围内。因此,完整的 IP 寻址范围从 0.0.0.0 到 255.255.255.255。
IP 地址使用过程
📌 IP 地址通常在后台使用。该过程如下所示:
- 你的设备首先连接到一个已连接到互联网的网络,然后该网络再授予你的设备访问互联网的权限,从而让您的设备间接连接到互联网。
- 当你在家时,该网络可能是你的互联网服务提供商 (ISP) 提供的网络。在工作中,它将是你的公司网络。
- 你的 IP 地址由 ISP 分配给你的设备。
- 你的互联网活动将通过 ISP 传输,他们会使用你的 IP 地址将其路由给你。他们为你提供了互联网访问权限,自然也要由他们负责为设备分配 IP 地址。
- 但是,你的 IP 地址可能会更改。例如,打开或关闭调制解调器或路由器可能会更改 IP 地址。您也可以联系你的 ISP,他们可以为你更改 IP 地址。
- 在你外出(例如旅行)并随身携带设备时,你在家中使用的 IP 地址并不会跟着你一起走。这是因为,你将使用另一个网络(酒店、机场或咖啡厅等地方的 Wi-Fi)访问互联网,并且将使用由酒店、机场或咖啡厅的 ISP 分配给你的其他(临时)IP 地址。
这个过程也表明,IP 地址存在不同的类型
查看IP
在 Windows 中:
使用命令提示符。
使用 Windows 搜索来搜索“cmd”(不带引号)
在出现的弹出框中,键入“ipconfig”(不带引号)即可获得这些信息。
📌 ip地址通常分为ipv4 和 ipv6 主流使用ipv4
- IPV4:32个二进制位长(4字节),常用点分十进制表示;
- IPV6:128个二进制位长(16字节)常用冒号分隔表示
- 冒号十六进:69DC:8864:FFFF:FFFF:0:1280:8C0A:FFFF
- ipv6作为未来的ip可以容纳所有的电脑
windows使用命令ipconfig 查看ip地址/mac使用命令ifconfig 查看ip地址
ping ip地址 可以快速的检测ip或者网址是否正常访问
Ip地址分类:
全0表示本地地址,全1表示在本地网络中向所有机广播
。A类地址(1. 0. 0. 1-127.255.255.254)
:利用IP地址的第一个字节作为网络地址,最高位为0,其余的三个字节作为主机地址。B类地址(128.0.0.1-191.255.255.254 )
:利用IP地址的前两个字节作为网络地址,最高位为10,其余的两个字节作为主机地址C类地址(192.0.0.1-223.255.255.254 )
:利用IP地址的前三个字节作为网络地址,最高位为110,最后一个字节作为主机地址本地地址localhost(127.0.0.1-127.255.255.254 )
:这是预留的一组IP地址,主要是用来识别主机本身的地址私有地址(10.x.x.x, 172.16.x.x-172.31.x.x, 192.168.x.x )
:局域网所使用的地址段,在公网上不能被路由
子网掩码
ip地址分为网络位和主机位
A–8个网络位+24个主机位
B–16个主机位+16个主机位
C–24个网络位+8个主机位
我们现在用的是ipv4 32位
A:255.0.0.0
B:255.255.0.0
C:255.255.255.0
255.255.255.0 子网掩码 (三个255,代码ip的前3位为网络位)
网络位相同,相当于是相同的网段
端口
- "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,
- 其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。
- 物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。
1.周知端口(Well Known Ports)
- 周知端口是众所周知的端口号,范围从0到1023,其中80端口分配给WWW服务,21端口分配给FTP服务等。我们在IE的地址栏里输入一个网址的时候是不必指定端口号的,因为在默认情况下WWW服务的端口是“80”。
- 网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在
地址栏上指定端口号,方法是在地址后面加上冒号“:”,再加上端口号。比如使用“8080”作为WWW服务的端口,则需要在地址栏里输入“网址:8080”。 - 但是有些系统协议使用固定的端口号,它是不能被改变的,比如139 端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变。
2.注册端口
📜📜端口1024到49151,分配给用户进程或应用程序。这些进程主要是用户选择安装的一些应用程序,而不是已经分配好了公认端口的常用程序。这些端口在没有被服务器资源占用的时候,可以用用户端动态选用为源端口。
3.动态端口(Dynamic Ports)
- 动态端口的范围是从49152到65535。之所以称为动态端口,是因为它 一般不固定分配某种服务,而是动态分配。(微信,qq都是使用动态的)
- 我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP
地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 - 需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访
问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口。
应用程序进行数据通信的流程
- 首先通过IP地址找到对应的设备
- 然后通过端口号找到对应的端口
- 然后通过端口把数据传输给应用程序
📌 端口可以通过命令netstat -n查看
socket
Socket原理
1.什么是Socket
📜📜 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket
这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据
📌 Socket通信的数据传输方式,常用的有两种:
a、SOCK_STREAM:
表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。常见的 http 协议就使用 SOCK_STREAM 传输数据,因为要确保数据的正确性,否则网页不能正常解析。
b、SOCK_DGRAM:
表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。因为 SOCK_DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。
📜📜例如:QQ 视频聊天和语音聊天就使SOCK_DGRAM传输数据,因为首先要保证通信的效率,尽量减小延迟,而数据的正确性是次要的,即使丢失很小的一部分数据,视频和音频也可以正常解析,最多出现噪点或杂音,不会对通信质量有实质的影响
python中使用socket模块的函数socket就可以完成。
📌 该函数带有两个参数:
adderss family
:可以选择AF_INET(用于internet进程间通信)或者AF_UNIX(用于同一台机器进程间通信)Type
:套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)
2.创建一个tcp socket(tcp套接字)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp 介绍
🎯tcp是一种面向连接的、可靠的、基于字节流的通讯协议。
-
特点
- 面向连接,提供了可靠的建立连接和拆除连接的方法
- 可靠交付
-
适用场景
- TCP常用于不可靠的互联网中为应用程序提供面向连接的,可靠的,端到端字节流服务。
-
举例
- 远程控制
- 邮件
- 点对点文件传输
"""
通过socket开发tcp服务端程序步骤
1.创建服务端套接字对象
2.绑定端口号
"""
# 1.创建服务端套接字对象
# socket 类
import socket
# 创建服务端socket对象
# socket.socket(AddressFamily, Type)
# AddressFamily 表示ip地址类型, AF_INET ipv4和 AF_INET6 ipv6
# Type 表示传输协议类型 SOCK_STREAM tcp流
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 给程序绑定端口号, 端口号 bind() ip 和 端口
tcp_server_socket.bind(("", 8989))
# 设置监听
# 128:最大等待建立连接的个数.
# listen后的套接字只能负责接收客户端的连接请求,不能收发信息. 收发消息使用返回的这个新套接字来完成
tcp_server_socket.listen(128)