〖Web全栈开发①〗—网络编程基础(上)

news/2024/11/6 14:02:49/

网络编程基础

  • 网络编程
  • 网络编程概述
    • 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协议

  1. TCP/IP协议是目前最成熟并被广泛使用的通信协议之一,TCP/IP协议不仅广泛应用于各种类型的局域网络,也是Internet的协议标准,用于实现不同类型的网络以及不同类型操作系统的主机之间的通信。
  2. 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 地址通常在后台使用。该过程如下所示

  1. 你的设备首先连接到一个已连接到互联网的网络,然后该网络再授予你的设备访问互联网的权限,从而让您的设备间接连接到互联网。
  2. 当你在家时,该网络可能是你的互联网服务提供商 (ISP) 提供的网络。在工作中,它将是你的公司网络。
  3. 你的 IP 地址由 ISP 分配给你的设备。
  4. 你的互联网活动将通过 ISP 传输,他们会使用你的 IP 地址将其路由给你。他们为你提供了互联网访问权限,自然也要由他们负责为设备分配 IP 地址。
  5. 但是,你的 IP 地址可能会更改。例如,打开或关闭调制解调器或路由器可能会更改 IP 地址。您也可以联系你的 ISP,他们可以为你更改 IP 地址。
  6. 在你外出(例如旅行)并随身携带设备时,你在家中使用的 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位为网络位)

网络位相同,相当于是相同的网段

端口

  1. "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,
  2. 其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。
  3. 物理端口又称为接口,是可见端口,计算机背板的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就可以完成。

📌 该函数带有两个参数:

  1. adderss family:可以选择AF_INET(用于internet进程间通信)或者AF_UNIX(用于同一台机器进程间通信)
  2. Type:套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)

2.创建一个tcp socket(tcp套接字)

import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

tcp 介绍

🎯tcp是一种面向连接的、可靠的、基于字节流的通讯协议。

  • 特点

    1. 面向连接,提供了可靠的建立连接和拆除连接的方法
    2. 可靠交付
  • 适用场景

    • 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)

http://www.ppmy.cn/news/68077.html

相关文章

awk命令编辑

awk工作原理 逐行读取文本,默认以空格或tab键分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息…

WINCC和EXCEL的OPC通讯

Option Explicit Option Base 1 Const ServerName “OPCServer.WinCC” Dim WithEvents MyOPCServer As OpcServer Dim WithEvents MyOPCGroup As OPCGroup Dim MyOPCGroupColl As OPCGroups Dim MyOPCItemColl As OPCItems Dim MyOPCItems As OPCItems Dim MyOPCItem As OPCI…

我的服务器被挖矿了,原因竟是。。。

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 挖矿木马应急响应 一、什么是挖矿二、被挖矿主机现象三、挖矿木马处置思路1)隔…

【Linux】RK3399平台开发系列——设备树的学习笔记

学习内容 RK3399平台开发系列讲解(设备树篇)设备树的详解 - 视频介绍 简介 设备树(Device Tree)是用于描述硬件设备和系统关系的树形数据结构,主要用于 Linux 操作系统中的设备驱动程序。在嵌入式系统中&#xff0c…

如何通过品牌矩阵号赋能品牌?

小红书作为年轻人的“消费决策”平台、逐步成为越来越多用户的消费指南,同时也变成众多品牌的营销基地。在小红书运营矩阵账号可以很好的树立品牌形象、增加粉丝粘性、节约广告成本,那么在搭建矩阵的过程中如何管理品牌矩阵号也成为众多品牌必须要思考的…

《程序员面试金典(第6版)》面试题 16.19. 水域大小(深度优先搜索,类似棋盘类问题,八皇后的简化版本,C++)

题目描述 你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到…

KMP匹配算法

目录 一、暴力匹配法动画演示代码实现 二、KMP算法的概念三、KMP算法的应用题目代码实现 一、暴力匹配法 动画演示 时间复杂度为&#xff1a; O ( m ∗ n ) O(m * n) O(m∗n) 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std;int…

前端架构师-week5-脚手架下载升级项目模版功能开发

目录 脚手架下载项目模版功能开发 通过 spinner 实现命令行 loading 效果 项目模版更新功能调试 脚手架下载项目模版功能开发 当作 npm 模块来处理&#xff0c;尝试对它进行下载。 commands/init/ 的 package.json 中注册 models/package/&#xff0c;并在命令行中执行 npm i…