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。

 

猜你喜欢

转载自www.cnblogs.com/gyh412724/p/9457731.html
29