网络编程

Posted lhy979

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。

一.网络基础的相关知识

1.架构

(1)C/S 架构:client客户端 和 server服务器端

优点:能充分发挥PC机(电脑)的性能

(2)B/S 架构:browser浏览器 和 server服务器端   (隶属于C/S架构)

优点:统一了应用的接口

2.通信

(1)同一台电脑上的两个py程序通信  (比如:文件操作)

(2)两个电脑如何通信:连接一个网线

(3)多个电脑通信:交换机

  两个电脑通信步骤:

    (1)电脑一(源主机)要找电脑二(目标主机),先发送一个请求帧(源主机的ip地址:(192.168.12.1),mac是xxx,我要找ip地址为:(192,168,12,2)的主机),交给交换机

    (2)交换机以广播的形式群发,除了给电脑一(源主机)之外的所有机器

    (3)电脑二(目标主机)收到消息后,以单播的形式(我的ip地址是:(192.168.2),mac是yyy),请回复给ip为(192.168.1),mac为xxx的主机)回复给交换机,交换机再回复给电脑一(源主机)

3.相关知识点:

1.网卡

  mac地址(物理地址)   也就类似于人的身份证号

  mac地址全球唯一(可以唯一识别某一台电脑)

  mac地址是网卡制造商给的

2.ip地址

  ip地址是一个四位点分十进制,它标识了计算机在网络中的位置     也就类似于学生证号

3.arp协议

  通过目标ip地址获取到目标mac地址的一个协议

4.端口的概念

  操作系统OS为本机上每一个运行的程序都随机分配一个端口,其它电脑上的程序可以通过端口获取到这个程序

  ip地址+端口:能唯一找到某一台电脑上的某一个服务程序

5.交换机的通信方式

  广播的形式:吼一嗓子(类似于大喇叭)

  单播:一对一

  多播:一对多

6.路由器

  连接不同网段(ip地址范围) ,路由(里面有一个路由表:网段和网关)

7.网关

  类似于一个局域网的出口和入口

8.网段

  一个局域网内的ip地址范围

9.子网掩码

  子网掩码 &(and) ip地址  得到网段

例如:

           ip地址:  192.168.12.104   ==>   1100 0000. 1010 1000. 0000 1010. 0110 1000
          
           &

          子网掩码: 255.255.255.0    ==>   1111 1111. 1111 1111. 1111 1111. 0000 0000
 
          网段:                                  1100 0000. 1010 1000. 0000 1010. 0000 0000

                                                    196.             168.            12.               0 
 

10.osi 五层模型

 

osi五层模型

        每层运行常见的协议

每层运行常见的物理设备

应用层

http,https,ftp

 

传输层

tcp协议,udp协议

四层交换机,四层路由器

网络层

ip协议

路由器,三层交换机

数据链路层

arp协议(与mac地址相关)

网桥,以太网交换机(二层交换机),网卡

物理层

传输电信号

网线,光纤,集线器

以太网交换机:不能跨网段传输
网桥:可以帮你实现跨网段的传输过程
ftp:上传文件,下载文件的协议
http:上网协议

二.socket模块

1.socket层

 socket:套接字
技术分享图片

 2.socket的其中两种类型:

(1)AF_UNIX:

    基于文件类型的套接字(早期socket是源于unix系统而研发的一个功能,主要是为了同一台电脑上,多个程序直接通信)
  unix系统的中心思想:一切皆文件

(2)AF_INET:

    基于网络类型的套接字
 

3.tcp协议和udp协议 :

  tup协议:可靠的,面向连接的,面向字节流形式的传输方式   (SOCK_STREAM)

  udp协议:不可靠的,不面向连接的,面向数据报的传输方式,但是速度快  (SOCK_DGRAM)

 4.tcp协议通信:第一次通信的例子

服务器端:

import socket
import time
sk = socket.socket()# 不传参数,默认使用基于网络类型的套接字, 协议 : TCP

sk.bind((‘192.168.12.104‘,18080))# 端口的范围是0-65535 但是 0-1023 这些你别用
sk.listen()# 同时能接受的连接

print(123)
conn,addr = sk.accept()# 等待接受客户端的连接 阻塞等待
print(456)
print(‘conn:‘,conn)
print(‘addr:‘,type(addr))

time.sleep(20)

conn.close()
sk.close()

 客户端:

import socket
import time
sk = socket.socket()

sk.connect((‘192.168.12.104‘,18080))# 连接

time.sleep(20)

sk.close()

 5.tcp协议:第二个通信的例子

 服务器端:

import socket
import time
sk = socket.socket()# 我买一个新手机

sk.bind((‘192.168.12.104‘,18080))# 我买一个手机卡

sk.listen()# 开机

print(123)
conn,addr = sk.accept()# 等待朋友给我打电话


msg_r = conn.recv(10)# 接受数据,接受10个字节
print(msg_r.decode(‘utf-8‘),addr)


conn.close()# 挂断电话
sk.close() # 关机

 客户端:

import socket
import time
sk = socket.socket()

sk.connect((‘192.168.12.104‘,18080))# 连接

sk.send(‘中文‘.encode(‘utf-8‘))

sk.close()
 
 
 
 
 
 
 
 
 

 






















































以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?