29 网络相关知识 socket
Posted gyh412724
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了29 网络相关知识 socket相关的知识,希望对你有一定的参考价值。
主要内容:
1 . 网络基础相关的知识
a : 架构
@C/S架构 : client 客户端和 server服务器端
优势 : 能充分发挥pc机的性能
@B/S架构 : browser浏览器 和server 服务器 隶属于C/S架构
优势 : 统一了应用的接口
b : 通信的知识
@ 同一个电脑上两个py程序通信 : 打开一个文件
@两个电脑的通信: 连接一个网线
@多个电脑通信:
例如 : 电脑一要找电脑二(过程)
1) : 电脑首先发送一个请求帧,其中包含(我的ip地址是192.168.10.104,我的mac地址是xxxxx,我要找的ip地址为192.168.12.4),将此要求发给交换机.
2) :交换机要广播这条消息,给其他的电脑.
3) :目标主机接收到交换机传来的消息后,对比发现自己就是被找的主机, 回复给交换 机信息(我的ip地址是192.168.12.4,我的mac地址是yyyy,请回复给ip地址为192.168.10.104,mac地址为xxxx的主机)
4) :交换机以单薄形式返给源主机.
c : 知识点的总结
@ mac地址 : 是一个物理地址 ,全球唯一 ,类似于身份证
@ ip地址 : 是一个四点分十进制, 它标识了计算机在网络中的位置, 类似于学号.
@ 交换机的通信方式: 广播 : 吼一嗓子 单薄 : 一对一 组播 : 一对多
@ arp协议 : 通过目标ip地址获取目标mac地址的一个协议
@ 端口 : 操作系统为本机上每一个运行的程序都随机分配一个端口,其他电脑上的程序可以通过端口获取到
到这个程序. (ip地址 + 端口 能唯一找到某台电脑上的某一个服务程序)
@ 路由器 : 连接不同网段 , 路由
@ 网关 : 类似于一个局域网的出口和入口
@ 网段 : 一个局域网内的ip地址范围
@ 子网掩码 : 子网掩码 & ip地址 可以得到网段
@ osi 五层模型 :
应用层 : http / https / ftp
传输层 : tcp / udp 四层交换机 / 四层路由器
网络层 : ip协议 路由器 / 三层交换机
数据链路层 : 传输电信号 集线器 / 网线 / 光纤
2 . socket 模块 : 同一台主机上多个应用程序之间的通信,也被成为进程间通讯 (IPC).套接字包括两种 :基于文件类型和 网络类型的套接字
a : socket 是一个模块 又叫套接字.
sk = socket . socket(family = AF_INET , type = SOCK_STREAM)
family : 一种是:AF_UNIX基于文件类型的套接字 (早期socket 是源自于unix系统而研发的一个功能, 主要是为了同一台电脑上,多个程序直接通信) unix系统的中心思想是 : 一切皆文件
一种是 :AF_INET 基于网络类型的套接字
type : 一种是基于TCP协议 SOCK_STREAM
一种是基于UDP协议 DGRAM
b : TCP/ UDP协议的区别 :
tcp 协议 : TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输 程序。UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上
udp协议 : UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。使用UDP的应用:域名 系统 (DNS);视频流;IP语音(VoIP) udp协议在收发数据前,必须和对方建立可靠的连接。
c : 基于tcp协议的socket : tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端
服务端 :
import socket sk = socket.socket() #<socket.socket fd=132, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0> print(sk) sk.bind((‘192.168.12.75‘, 12012)) #把地址绑定到套接字 sk.listen() #侦听客户的请求 conn, addr = sk.accept() #接收客户端的链接 ret = conn.recv(1024) #接收客户端的信息 print(ret) print(‘coon:>>>‘,conn) #<socket.socket fd=464, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘192.168.12.75‘, 12012), raddr=(‘192.168.12.75‘, 13041)> print(‘addr:>>>‘,addr) conn.send(b‘qwertyuiop‘) #向客户端发送信息 #(‘192.168.12.75‘, 13041) conn.close() #关闭客户端套接字 sk.close() #关闭服务器套接字
客户端 :
import socket sk = socket.socket() print(sk) sk.connect((‘192.168.12.75‘,12012)) sk.send(b‘send information‘) s = sk.recv(102) print(s) #接收服务器发送的信息 sk.close()
加入一条socket配置 ,重用ip和端口
#加入一条socket配置,重用ip和端口 import socket from socket import SOL_SOCKET,SO_REUSEADDR sk = socket.socket() sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) sk.bind((‘192.168.12.75‘,8898)) #把地址绑定到套接字 sk.listen() #监听链接 conn,addr = sk.accept() #接受客户端链接 ret = conn.recv(1024) #接收客户端信息 print(ret.decode(‘utf-8‘)) #打印客户端信息 # conn.send(b‘hi‘) #向客户端发送信息 conn.close() #关闭客户端套接字 sk.close() #关闭服务器套接字(可选)
e : 基于dup协议的socket :udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
服务器端 :
import socket udp_sk = socket.socket(type=socket.SOCK_DGRAM) #创建一个服务器的套接字 udp_sk.bind((‘192.168.12.75‘,9000)) #绑定服务器套接字 s = udp_sk.recvfrom(1024) print(s) udp_sk.close()
客户端:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.sendto(b‘serfdf‘,(‘192.168.12.75‘,9000)) sk.close()
3 . 交换机与路由器的区别:
a : 交换机工作在中继层,交换机根据MAC地址寻址。路由器工作在网络层,根据IP地址寻址,路由器可以处理TCP/IP协议,而交换机不可以。
b : 路由器可以给你的局域网自动分配IP,虚拟拨号,就像一个交通警察,指挥着你的电脑该往哪走,你自己不用操心那么多了。交换机只是用来分配网络数据的。
c : .交换机在中继层,交换机根据MAC地址寻址。路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。交换机可以把很多主机连起来,这些主机对外各有各的IP。
以上是关于29 网络相关知识 socket的主要内容,如果未能解决你的问题,请参考以下文章