C/S架构,网络通讯流程.初识socket

网络通讯:使用本身的电脑和别人的电脑进行练习并发送消息或者文件等操做。socket就是网络通讯的工具。
一、
C/S架构:客户端(client)/服务端(server)架构
                客户端:指与服务器相应,为客户提供本地服务的程序。
                服务端:广义:指网络中能对其余机器提供某些服务的计算机系统。
        B/S架构:浏览器(browser)/服务端(server)
 
软件C\S架构:浏览器,QQ、,微信,
硬件C\S架构:打印机
 
 
二、 网络通讯的整个流程
 ①流程图

 

流程描述:
第一步:打开浏览器,想要请求访问京东,在地址栏输入网址:www.jd.com.(www.jd.com是域名,就是一个IP         地址的名称,IP地址很差记,因此就有了域名
第二步:先将请求信息发给交换机,而后交给了路由器,路由发给DNS服务器,经过DNS协议去找咱们要访问的京东的IP地址:
第三步:查到的京东服务器对应的IP地址以后,路由器经过路由协议找到路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器
第四步:京东的路由器发给了京东网站的服务器上
第五步:当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫作端口号,当你的电脑收到京东发过来的消息的时候,你的电鸟经过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,而后页面会显示京东的网站信息
 
② 内部组件的信息
 
      集线器(HUB):将全部的电脑联通起来,属于数据通讯系统中的基础设备
       交换机:交换式的集线器,多台机器之间的网络通讯。工做方式分为单播,组播,广播
                单播:客户端与服务器之间的点到点链接,将信息发送给对应的一个机器。
                广播:将要找的机器的信息发给局域网内的全部的机器
      网卡:接受处理电信号,电脑插网线的地方叫作网卡,网卡提供了网络的接口
      MAC地址(物理地址):1C-1B-0D-74-43-9A ,长度为48为2进制,一般由12为16进制数表示( 前三位厂商编号,后三位生产流水号),全球惟一的,也就是网络设备的身份证号,可是不能用MAC地址来找寻机器。
    IP地址:由4个点分十进制组成,由点分割的四个十进制的数,在计算机中则由二进制组成,以下
ipv4  它能够设置成静态的,也能够自动获取
二进制:00000000.00000000.00000000.00000000  - 11111111.11111111.11111111.11111111,
十进制:0.0.0.0 - 255.255.255.255

ipv6 python

0.0.0.0.0.0 - 255.255.255.255.255.255

  

127.0.0.1 是回送地址,指本地机,通常用来测试使用,主要用于网络软件测试一级本地机进程间通讯。不管什么程序,一旦使用会送地址发送数据,协议软件当即返回,不进行任何网络传输(来自百度百科)
 
IP地址段:192.168.12.0 - 192.168.12.255  同一IP地址段,称为同一子网,以广播的形式通讯。
 
子网掩码:   表示子网络特征的一个参数,255.255.255.0。判断任意两个IP地址是否处在同一子网络。方法时将两个IP地址域子网掩码分别进行and运算(两个数位都为1,运算结果为1,不然为0)。而后比较结果是否相同,若是是的话就标名他们在同一个自网络,不然就不是。
 
好比:已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?二者与子网掩码分别进行AND运算,
   172.16.10.1:10101100.00010000.00001010.000000001
  255255.255.255.0:11111111.11111111.11111111.00000000
  AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
  172.16.10.2:10101100.00010000.00001010.000000010
  255.255.255.0:11111111.11111111.11111111.00000000
  AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

  结果都是172.16.10.0,所以它们在同一个子网络。

  

IP地址域子网掩码按位 与 获得网段地址
255.255.255.0
192.168.13.253
11111111.11111111.11111111.00000000
11000000.10101000.00001101.11111101
11000000.10101000.00001101.00000000  # 局域网网段

192.168.13.0   #  这样求出了一个网段地址

 

DHCP协议:自动获取IP地址
Arp协议:广播的方式发送数据包,经过IP地址获取目标主机mac地址,IP地址不固定,mac是全球惟一的DNS:域名解析 
域名:www.jd.com
DNS服务端:{'www.jd.com':173.1.49.0}
NAT转换:网络地址转换
路由器:转发消息,管理内网
路由协议:计算转发消息的最优路径
端口:标识某个应用程序
端口映射:0-65535 找到提供服务的程序
IP地址+端口:可以惟一锁定一台电脑和这个电脑上的某个应用程序
网关:把关用的,全部对外的请求,都要通过网关
NAT技术:网络地址转换,内网IP地址转换位公网或者说外网的IP地址 
广播风暴:广播数据充斥网络没法处理,并占用大量网络带宽,致使正常业务不能运行。(之前经过mac地址就能够通讯,mac地址通讯时广播的形式,当全部的电脑都经过这种形式通讯,就会西港城广播风暴,会阻塞网络,信息也变得很不安全,由于全部人均可以收到你打的信息。
为了不广播风暴:分了多个局域网,而后经过路由器连起来
 
内网和外网
 
内网:内网就是局域网,局域网就是固定在一个地理区域内由两台以上的电脑用网线和其余网络设备搭建而成的一个封闭的计算机组。能够是邻居之间的2台电脑,也能够是一张大楼内的全部电脑。局域网能够是独立封闭运行的,也能够是和外网相链接的。
 
外网:广域网是一种低于跨度很是大的网络集合,它是由无数各局域网+独立服务器构成的。注:此处所说的局域网既能够是小型的广域网,也能够是局域网。
 
实际上,从规模上来看咱们很难区分局域网和广域网,由于大小都是相对的,因此真正的局域网和广域网的区分是经过IP地址来实现的。
任何一台电脑要上网,都必须在网络上邮一个惟一的IP地址。在局域网内,这个IP地址是惟一的,可是在另外一个局域网内,这个IP地址仍然可以用。
在广域网中,全部的IP地址都是惟一的。
 
只有内网的IP地址你是不可以上网的,上网必须要一个外网地址,这个外网地址又称为公网地址,这个公网地址是全球惟一的,它在你的对外出口的路由器上,也就是你的外网网关地址。
 

 三、初识socket浏览器

 

socket:用于网络通讯的模块,独立于语言安全

 

经过下面简单的代码看一下,socket
 
服务端:
import socket
# 建立一个socket对象
server = socket.socket()
# 给程序设置一个IP地址和端口号
ip_port = ('127.0.0.1',8080)
# 绑定IP地址和端口号
server.bind(ip_port)
# 监听IP地址和端口
server.listen()

# 等待创建链接,conn时链接通道,addr是客户端地址
conn,addr = server.accept()
# 服务端经过conn链接通道来收发消息,经过recv方法,recv里面的参数是字节 1024B=1KB
from_client_msg = conn.recv(1024)

print('zhoyou say:',from_client_msg.decode('utf-8'))

# 回复消息:经过send方法,参数必须是字节类型的
conn.send('what?'.encode('utf-8'))

# 关闭通道
conn.close()
# 关闭socket对象,
server.close()
server01.py

客户端:服务器

import socket
# 建立一个socket对象
client = socket.socket()
# 找到服务器的IP地址和端口
server_ip_port = ('127.0.0.1',8080)
# 链接服务端的应用程序,经过connect方法,参数是服务端的IP地址和端口,
client.connect(server_ip_port)

# 发消息,用send方法,可是调用者是client的socket的对象
client.send('明天是周末吗?'.encode('utf-8'))

from_server_msg = client.recv(1024)

print('孙翔说:',from_server_msg.decode('utf-8'))
client.close()
client01.py

 

两个例子:微信

一、连续对话:server收一个发一个,client发一个收一个网络

服务端:架构

import socket

server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()

conn,addr = server.accept()

while 1:
    from_client_msg = conn.recv(1024)
    print('来着星空的消息:',from_client_msg.decode('utf-8'))
    to_client_msg = input('大海:')
    conn.send(to_client_msg.encode('utf-8'))
talk_server.py

客户端:并发

import socket
client = socket.socket()
client.connect(('127.0.0.1',8080))

while 1:
    to_server_msg = input('星空说:')
    client.send(to_server_msg.encode('utf-8'))
    from_server_msg = client.recv(1024)
    print('来自大海的消息:',from_server_msg.decode('utf-8'))
talk_client.py

二、时间:server端:接收时间戳,转化成而格式化时间,client:每隔10秒钟把时间戳发给server端,time.time()  socket

服务端:ide

import time
import socket

server = socket.socket()

ip_port = ('127.0.0.1',8090)
server.bind(ip_port)
server.listen()

conn,addr = server.accept()

while 1:
    from_client_time = conn.recv(1024)
    from_clienttime_str = from_client_time.decode('utf-8')
    time_float = float(from_clienttime_str)
    time_stru = time.localtime(time_float)
    time_strf = time.strftime('%Y_%m-%d  %H:%M:%S',time_stru)
    print(time_strf)
time_server.py

客户端:

import time
import socket

client = socket.socket()
client.connect(('127.0.0.1',8090))
while 1:

    client.send(str(time.time()).encode('utf-8'))
    time.sleep(1)
time_client.py
相关文章
相关标签/搜索