1、OSI七层协议

1.七层划分为:应用层,表示层、会话层、传输层、网络层、数据链路层、物理层
2.五层划分:应用层、传输层、网络层、数据链路层、物理层
应用层:
表示层:
会话层:
传输层:四层交换机、四层路由器,TCP协议、UDP协议
网络层:路由器、三层交换机
数据链路层:网桥、以太网交换机、网卡
物理层:中继器、集线器、双绞线

2、软件架构

C/S:  client ===>客户端   server===>服务端
B/S: browser ===>浏览器 server===>服务端
一、CS系统架构
客户端:用户安装的软件
服务端:统一管理数据库的主机中的软件叫做服务端,在后来服务端不只是管理数据,外加处理业务逻辑
1.用户操作系统安装客户端
2.每个用户需要独立安装软件、服务端升级也要每个用户升级
应用领域:QQ、大型网络游戏
二、BS系统架构
1.统一客户端即默认安装用户电脑中的浏览器,访问同种类的网站,具体业务的处理根据相应协议和标准提供通用的服务器程序,在不同的服务器处理。
2.基于BS结构下的程序就要求解决速度问题,而速度问题的核心就是解决海量数据操作和高并发问题,网站复杂架构就是从这两个问题演变出来的。
三、BS架构和CS架构区别
BS技术架构:纯B/S架构,MYSQL数据库,JAVA语言,LINUX操作系统,全球领先的技术,免费正版的数据库,没有病毒的操作系统,经营数据不会被截取和外泄。
CS技术架构:C/S架构,使用VPN连接,费用高,数据慢,容易丢失数据,采用WINDOWS操作系统,Oracle,SQL-Server数据库,用正版费用高,用盗版存在商业风险。
BS核心技术:纯B/S架构,WEB2.0,管理便利,数据实时同步,便于数据分析和总部营销决策、
CS核心技术:C/S架构,数据传输慢,容易丢单,管理非常不便利,可扩展性差

3、TCP协议

TCP协议的三次握手和四次挥手
# 三次握手:建立连接 ,四次挥手:断开连接
TCP协议特点:
1.数据可靠传输
2.速度相对于UDP协议较慢
UDP协议特点:
1.数据不可靠
2.速度相对于TCP协议较快

4、Socket抽象层

一、socket是什么
1.我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
二、本机IP地址:
本机IP地址:127.0.0.1
socket抽象层:就是一个个的对外访问的接口

5、基于TCP协议的套接字编程

注意:先启动服务端再启动客户端

##########################Sever.py##############################
import socket 1.实例化socket对象
# 参数不传递默认代表是TCP协议
server = socket.socket(type=socket.SOCK_STREAM) 2.绑定
server.bind(('127.0.0.1',8001)) # 必须端口在1024之上 3.监听,括号中是半连接池
server.listen(5) 4.接收客户端发来的信息
print('正在等待客户端发来的消息:')
# sock:当次连接对象,addr:客户端的地址。ip+port
sock,addr = server.accept() 5.拿到数据,一次最多接收1024个字节的数据
data = sock.recv(1024)
print(data) 6.发送客户端的数据
sock.send(data.upper()) # 接收客户端发送的数据并转为大写 7.断开连接
sock.close() 8.关闭之后不能在绑定IP地址了
server.close() ##########################Client.py##############################
import socket 1.实例化socket对象
client = socket.socket()
client.connect(('127.0.0.1',8001)) 2.向服务器发送数据
client.send(b'hello boy') 3.接收服务端发来的数据
data = client.recv(1024)
print(data)
client.close()

6、基于UDP协议的套接字编程

# 服务端
import socket # SOCK_STREAM : tcp协议的服务端
# SOCK_DGRAM :udp协议的服务端
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP
server.bind(('127.0.0.1', 8080)) while True:
data, client_addr = server.recvfrom(1024)
print('===>', data, client_addr)
server.sendto(data.upper(), client_addr) server.close() # 客户端
import socket client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP while True:
msg = input('>>: ').strip() # msg=''
client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
data, server_addr = client.recvfrom(1024)
print(data) client.close()

day27 网络编程的更多相关文章

  1. 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议

    Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...

  2. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  3. python select网络编程详细介绍

    刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...

  4. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  5. 猫哥网络编程系列:详解 BAT 面试题

    从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...

  6. 浅谈C#网络编程(一)

    阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...

  7. C++11网络编程

    Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...

  8. Java - 网络编程

    Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh.     参考:  

  9. Linux网络编程-IO复用技术

    IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了.Linux中,提 ...

随机推荐

  1. [转]DDR相关的一些基础知识

    ODT ( On-DieTermination ,片内终结)ODT 也是 DDR2 相对于 DDR1 的关键技术突破,所谓的终结(端接),就是让信号被电路的终端吸 收掉,而不会在电路上形成反射, 造成 ...

  2. 中文NER的那些事儿4. 数据增强在NER的尝试

    这一章我们不聊模型来聊聊数据,解决实际问题时90%的时间其实都是在和数据作斗争,于是无标注,弱标注,少标注,半标注对应的各类解决方案可谓是百花齐放.在第二章我们也尝试通过多目标对抗学习的方式引入额外的 ...

  3. Linux ps -ef 命令输出解释

    UID: 程序拥有者PID:程序的 IDPPID:程序父级程序的 IDC:  CPU 使用的百分比STIME: 程序的启动时间TTY: 登录终端TIME : 程序使用掉 CPU 的时间CMD: 下达的 ...

  4. 『学了就忘』Linux基础命令 — 37、Linux中挂载操作的相关命令

    目录 1.mount命令介绍 (1)mount命令说明 (2)mount命令格式 2.mount命令示例 3.mount -a命令说明 4.-o特殊选项说明 5.exec/noexec选项说明 挂载就 ...

  5. Redis未授权总结

    以前的笔记 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  6. Go defer 原理和源码剖析

    Go 语言中有一个非常有用的保留字 defer,它可以调用一个函数,该函数的执行被推迟到包裹它的函数返回时执行. defer 语句调用的函数,要么是因为包裹它的函数执行了 return 语句,到达了函 ...

  7. 暑假算法练习Day1

    为了加强个人的算法能力,所以准备每天都做适当的算法练习,并在隔天加以回顾. 依托PTA.Leetcode平台进行训练(暂定每天三题C++,对于Leetcode平台上的练习,由于其解题需以类的形式进行提 ...

  8. 菜鸡的Java笔记 第十九 - java 继承

    继承性的主要目的,继承的实现,继承的限制                继承是面向对象中的第二大主要特点,其核心的本质在于:可以将父类的功能一直沿用下去                为什么需要继承? ...

  9. 论文解读(Line)《LINE: Large-scale Information Network Embedding》

    论文题目:<LINE: Large-scale Information Network Embedding>发表时间:  KDD 2015论文作者:  Jian Tang, Meng Qu ...

  10. [luogu3292]幸运数字

    考虑点分治,将询问离线后计算重心到每一个点的线性基,然后再询问重心到每一个点的线性基,时间复杂度为$o(3600q)$,可以过(然而太菜的我写了倍增维护线性基,震惊于倍增和线性基常数之小) 1 #in ...