网络基础相关内容

帅爆太阳的男人

1,网络基础相关的知识

  • 1.1>架构
    • 1.1.1>c/s架构:client客户端和server服务器端
      • 优势:能充分发挥pc机的性能
    • 1.1架构.2>b/s架构:browser浏览器和server服务器,隶属于c/s架构
      • b/s架构 统一了应用的接口
  • 1.2>通信的事:
    • 1.2.1>同一台电脑上两个py程序通信:打开一个文件
    • 1.2.2>两个电脑通信:连一个网线
    • 1.2.3>多个电脑通信:
  • eg:电脑1(源)要找电脑2(目标)
    • 电脑1首先发送一个请求帧,里边包含(电脑1的IP地址:192.168.1.1,电脑1的mac的地址:xxxxx,寻求目标的IP地址为192.168.1.2de 主机)把这条请求帧交给交换机,交换机以广播的形式传给其他所有的主机
    • 所有主机接收到消息后,都会对比自己的IP地址,当目标主机的的IP地址和区广播的IP地址一致时,回复给交换机(回复的内容包括自己的IP地址和mac地址)
  • 此时交换机以单播的形式返回给源主机

2,知识点

  • 2.1>mac地址:是一个物理地址,全球唯一,是有网卡制造商分配的,类似于身份证
  • 2.2>IP地址:是一个四位点分十进制,它表示了计算机在网络中的位置,类似于学号
  • 2.3>交换机的通信方式:
    • 广播:放射状信息(吼一嗓子)
    • 单播:一对一
    • 组播:一对多
  • 2.4>arp协议:通过目标IP地址来获取目标的mac地址的一个协议
  • 2.5>端口:操作系统为本机上每一个运行的程序都随机分配一个端口(程序级别的),其他电脑上的程序可以通过端口获取到这个程序(类似于文件句柄),IP地址+端口  能唯一找到某台电脑上的某一个服务程序
  • 2.6>路由器:链接不同网段,路由
  • 2.7>网关:类似于 一个局域网的出口和入口
  • 2.8>网段:一个局域网内的IP地址范围
  • 2.9>子网掩码:子网掩码和IP地址得到网段 (255)
  • 2.10>osi五层模型:
    • 应用层    :http/https/ftp
    • 传输层    :tcp/udp      四层交换机/四层路由器
    • 网络层    :IP协议      路由器/三层交换机
    • 数据链路层  :arp协议       以太网交换机/网卡/网桥
    • 物理层    :传输电信号    网线/光纤/集线器

3,socket模块

  • socket又叫套接字,有很多种类型
  • 3.1>AF_UNIX基于文件类型的套接字(早期socket是源自unix系统而研发的一个功能,主要是为了用一台电脑上,多个程序直接通信),unix的中心思想是:一切皆文件
  • 3.2>AF_INET基于网络类型的套接字
    • type:一种是基于TCP协议   SOCK_STREAM
    • 一种是基于UDP协议    SOCK_SYREM
  • TCP协议:可靠的,面向连接的,面向字节流形式的传输方式
  • UDP协议:不可靠的,不面向连接的,面向数据报的传输方式,但是它快

 

4,client和server代码

  • server服务端:
import socket

sk = socket.socket()  # 括号里不用传参数,默认是基于网络型的套接字,协议:TPC(好比买了一部手机)

sk.bind(("192.168.12.37",8008))  # 买一张手机卡(里边以元组的形式包括IP地址,端口,的端口的范围是:0-65535,但是0-1023i操作系统用的,不要用,所以的端口的数字在范围内可以随便给)

sk.listen()  # 不用传参数,表示同时能接收的连接(相当于开机)

conn,addr = sk.accept()  # 等待接收客户端的连接,是一种阻塞等待(相当于等待开机)

while 1:
    mas_c = conn.resv(1024)  # 建立起联系然后接收客户端发送的消息(conn里边包括客户端的消息)括号里必须给一个参数是字节数的倍数这个数尽量大一点,保证一次都接收完
    print("mas_c".encode("utf-8"),addr)
    massage = input(">>>")
    conn.send(massage.encode("utf-8"))

conn.close()

sk.close()
  • client客户端
import socket

sk = socket.socket()  # 建立通信的条件

sk.connect(("192.168.12.37",8008))  # .和要通信的主机连接

while 1:
    mass = input(">>>")
    sk.send(mass.encode("utf-8"))
    mas_c = sk.resv(1024)
    print(mas_c.decode("utf-8"))

sk.close()
原文地址:https://www.cnblogs.com/ljc-0923/p/9505979.html