网络编程
1.概述
计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
网络编程的目的:传播交流信息、数据交换、通信。
想要达到什么效果需要什么:
·如何准确定位网络上的某台主机。IP地址+端口。定位到计算机上的某个资源。
·找到这台主机,如何传输数据。
在网络操作系统中使用的通信协议有TCP/IP、NetBEUI、IPX/SPX、AppleTalk等。
2.TCP/IP协议
TCP/IP协议是目前最成熟并被广泛使用的通信协议之一,TCP/IP协议不仅广泛应用于各种类型的局域网络,也是Internet的协议标准,用于实现不同类型的网络以及不同类型操作系统的主机之间的通信。
TCP/IP事实上是一个协议系列或协议族,目含了100多个协议,包括ARP、ICMP、IGMP、IP、TCP和UDP等多种协议,其中tcp协议和IP协议是最重要的两个协议。
3.IP地址
3.1什么是IP
IP(Internet Protocol,Internet协议)是一个无连接的协议,主要负责在主机之间寻址,并为数据包设定路由。
IP 地址是一个唯一地址,用于标识互联网或本地网络上的设备。IP 代表“互联网协议”,它是控制通过互联网或本地网络发送的数据格式的一组规则。它是互联网工作原理中的关键组成部分
3.1.1IP组成
IP 地址是一串由句点分隔的数字。IP 地址表示为一组四个数字,比如 192.158.1.38 就是一个例子。该组合中的每个数字都可以在 0 到 255 的范围内。因此,完整的 IP 寻址范围从 0.0.0.0 到 255.255.255.255。
3.1.2IP 地址使用过程
IP 地址通常在后台使用。该过程如下所示:
- 您的设备首先连接到一个已连接到互联网的网络,然后该网络再授予您的设备访问互联网的权限,从而让您的设备间接连接到互联网。
- 当您在家时,该网络可能是您的互联网服务提供商 (ISP) 提供的网络。在工作中,它将是你的公司网络。
- 你的 IP 地址由 ISP 分配给您的设备。
- 你的互联网活动将通过 ISP 传输,他们会使用你的 IP 地址将其路由给你。他们为您提供了互联网访问权限,自然也要由他们负责为设备分配 IP 地址。
- 但是,您的 IP 地址可能会更改。例如,打开或关闭调制解调器或路由器可能会更改 IP 地址。您也可以联系您的 ISP,他们可以为您更改 IP 地址。
- 在您外出(例如旅行)并随身携带设备时,您在家中使用的 IP 地址并不会跟着您一起走。这是因为,您将使用另一个网络(酒店、机场或咖啡厅等地方的 Wi-Fi)访问互联网,并且将使用由酒店、机场或咖啡厅的 ISP 分配给您的其他(临时)IP 地址。
这个过程也表明,IP 地址存在不同的类型
3.2查看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或者网址是否正常访问
3.3Ip地址分类:
- 全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 ):局域网所使用的地址段,在公网上不能被路由
3.4子网掩码
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位为网络位)
网络位相同,相当于是相同的网段
4.端口
"端口"是英文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查看
5.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协议)
创建一个tcp socket(tcp套接字)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
创建一个udp socket(udp套接字)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
6.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)
小结:
- 网络编程中有两个主要问题:
- 如何准确的定位到网络上的一台或多台主机。(ping命令)
- 找到主机后如何进行通信。
- 网络编程中的要素:
- IP地址和端口号
- 网络通信协议
简单来说,Socket 是网络通信的基石,它允许运行在不同计算机上的程序(或同一台计算机上的不同程序)进行数据交换。你可以把它想象成一个电话插座:想要通话,双方都需要一个插座,并且要正确连接到对方的线上。
- 核心概念:一个经典的比喻
把网络通信比作打电话:
Socket(套接字):就像是电话机。它是你用来通信的设备。
IP 地址:就像是对方的电话号码。用于在网络中唯一地定位一台计算机。
端口(Port):就像是对方公司里的分机号。一台计算机可以同时运行多个网络程序(如浏览器、游戏、邮件客户端),端口号用来指定具体和哪个程序通信。
协议(Protocol,如 TCP/UDP):就像是你们约定好的通话规则。是用中文还是英文?是先问好还是直接说事?TCP 是可靠的有连接协议(像打电话,需要接通,确保对方听到),UDP 是不可靠的无连接协议(像对讲机或发短信,只管发出去,不保证对方收到)。
所以,一个完整的网络连接需要一对 Socket 来定义,即:
(IP地址1:端口1, IP地址2:端口2)
- Socket 的工作流程(以 TCP 为例)
TCP 通信是面向连接的,其过程非常像打电话。它分为服务器端和客户端。
服务器端(接电话的一方)
创建 Socket (socket())
服务器先买一部电话机。
绑定 IP 和端口 (bind())
给这部电话机申请一个固定的电话号码(IP)和分机号(端口),并告诉电信局(操作系统)。这样别人才能找到你。常见的端口如:Web 服务(80)、SSH(22)。
监听 (listen())
把电话机设置为响铃模式,等待别人打进来。
接受连接 (accept())
电话铃响了,拿起电话接听。这个操作会创建一个新的 Socket 专门用于和这个客户端通信。服务器原始的 Socket 继续负责监听等待其他客户端的连接。
数据传输 (recv(), send())
用这个新建立的连接和客户端互相收发数据。
关闭连接 (close())
通话结束,挂断电话。
客户端(打电话的一方)
创建 Socket (socket())
自己也买一部电话机。
连接 (connect())
拨打服务器的电话号码(IP)和分机号(端口)。
数据传输 (send(), recv())
电话接通后,开始互相说话(收发数据)。
关闭连接 (close())
说完再见,挂断电话。

1350

被折叠的 条评论
为什么被折叠?



