OSI  七层模型

   1 应用层 【提供用户服务,具体功能由特定的程序而定】
2 表示层 【数据的压缩优化,加密】
3 会话层 【建立应用级的连接,选择传输服务】
4 传输层 【提供不同的传输服务,流量控制】
5 网络层 【路由选择,网络互连】
6 链路层 【进行数据转换,具体消息的发送,链路连接】
7 物理层 【物理硬件,接口设定,网卡路由交换机等】
  


cookie
  高内聚 : 模块功能尽可能单一,不要掺杂
  低耦合 : 模块之间尽量减少关联和影响 OSI 模型优点
  1 将工作流程标准化
  2 降低了模块间的耦合度,使每一部分可以单独开发,单独工作
   四层模型
  1 应用层 【:集合了原有的应用层,表示层,会话层】
  2 传输层
  3 网络层
  4 物理链路层

五层模型(TCP/IP模型)
  1 应用层
  2 传输层
  3 网络层
  4 链路层
  5 物理层 数据传输流程
  1 发送端由应用层到物理层逐层添加信息头(首部),最终在物理层发送。
  2 中间经过节点(交换机,路由器等。。)转发,发送到接收端
  3 在接收端根据发送端的每个信息头进行解析,最终消息到应用层展示给用户 网络协议 : 在网络通信中双方都遵循的规定,包括建立什么样的网络结构,消息结构,标识代表什么等。
  应用层协议 : TFTP HTTP DNS SMTP
  传输层协议 : TCP UDP
  网络层 : IP
  物理层   : IEEE 网络相关概念
  网络主机 : 在网络中标识一台计算机 HOST
  本地使用 :'localhost'
        '127.0.0.1'
  网络使用 : '0.0.0.0'
        '本机IP'
IP地址
  网络上确定一台主机网络位置的地址
  IPV4 : 点分十进制 占32位
  IPV6 : 128位 将IP十进制转化为二进制
  > socket.inet_aton('192.168.0.1')
  > 'b\xxxx'
将IP 二进制转化为十进制
 > socket.inet_ntoa('b\xxxx') 域名 :网络服务器地址的名称
  1,方便记忆
  2,名称表达一定的含义 网络端口号
  端口是网络地址的一部分,用于区分一个网络主机上的网络应用
  * 在一个操作系统中不同的网络应用监听不同的端口号
  取值范围 : 1~~65535
          1~~255 : 一些众所周知的通用端口
          256~~1023 :  系统应用端口
          1024 ~~ 65535 :自用端口
          建议使用 >10000的端口
  socket.getservbyname('http') 【返回对应应用的端口信息】
  -->80 网络字节序 传输层服务 面向连接的传输服务
  基于tcp协议的数据传输
  传输特征 : 提供可靠的数据传输,可靠性指数据传输过程中无丢失,无失序,无差错,无重复。
  
  实现手段:
    数据传输断开前都需要进行传输和断开的确认
      三次握手: TCP在数据传输前建立连接的过程
        1 客户端向服务器发送连接请求
        2 服务器收到请求后,回复确认消息,表示允许连接
        3 客户端收到服务器回复,进行最终标志发送确认连接
      
          

      四次挥手: TCP传输在连接断开前进行断开确认的过程
        1 主动发发送报文告知被动方要断开连接
        2 被动方收到请求后立即返回报文告知已经准备断开
        3 被动方准备就绪后再次发送报文告知可以断开
        4 主动方发送消息,确认最终断开         
 
    应用情况 :  适用于传输较大的文件,网络情况良好,需要保证传输可靠性的情况
          比如 :
            网页的获取,文件下载,邮件传输,登录注册
面向无连接的传输服务
  基于UDP协议的传输
    传输特点 : 不保证传输的可靠性,传输过程没有连接和断开的流程,数据收发自由
    应用情况 : 网络情况较差,对传输可靠性要求不高峰,需要提升传输效率。不变连接,需要灵活收发消息。
        比如:网络视频,群聊,广播发送

服务端
  1 创建SOCK对象,流式
    (socket.AF_INET,socket.SOCK_STREAM)
  2 绑定服务地址和端口
  3 监听端口
  4 等待连接
  5 消息收发
  6 关闭
 
import socket,selectors,time
epoll=selectors.DefaultSelector()
host='127.0.0.1'
port=8889
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(10)
while True:
conn, add = s.accept()
try:
while True:
a=conn.recv(1024)
print(a)
if a.decode('utf8')=='##':
break
conn.send(a)
conn.close()
except:
conn.close()
s.close()

客户端
  1 创建SOCK对象
  2 建立连接 connet
  3 消息收发
  4 关闭
 
import socket,time
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8889))
while True:
s.send(bytes('你好',encoding='utf8'))
time.sleep(2)
a=s.recv(1024)
print(a.decode('utf8'))


UDP
套接字传输注意事项
  1 监听套接字存在客户端即可发起连接,但是最终连接的处理需要accept进行处理
  2 如果连接的另外一段,则recv会立即返回空子串不再阻塞
  3 当连接的另一端退出时,再试图send 发送就会产生 BrokenPipeError 网络收发缓冲区
  缓冲区作用: 1 协调收发(处理)速度
         2 减少交互次数
  send和recv 实际上是和缓冲区进行交互,发送缓冲区满时就无法发送,接收缓冲区满时recv才阻塞 TCP粘包
  产生原因:
    tcp 套接字以字节流方式传输,没有消息边界
      发送和接收并不能保证每次发送都及时的被接收
  影响:
      如果每次发送内容表达一个独立的含义此时可能需要处理粘包防止产生歧义
  处理方法
      1 每次发送的消息添加结尾标志(人为增加消息边界)
      2 发送数据结构体
      3 协调收发速度,每次收发后都预留接收时间 UDP
  1 创建数据报套接字
    (sock.AF_INFT,sock.SOCK_DGRAM)
  2 绑定地址 
    bind
  3 消息的收发
  4 conn,addr = s.recvfrom(buffersize)
    参数 :接收UDP消息
    返回值 :data 接收到的数据
         addr 消息发送端的地址   sockfd.sendto(datamaddr)
    功能 :发送UDP消息
    参数 :data 发送的消息 bytes格式
        addr 目标地址
    返回值 :发送的字节数   5 关闭套接字
    socket.close()

网络收发缓冲区
  缓冲区作用: 1 协调收发(处理)速度
         2 减少交互次数
  send和recv 实际上是和缓冲区进行交互,发送缓冲区满时就无法发送,接收缓冲区满时recv才阻塞 TCP粘包
  产生原因:
    tcp 套接字以字节流方式传输,没有消息边界
      发送和接收并不能保证每次发送都及时的被接收
  影响:
      如果每次发送内容表达一个独立的含义此时可能需要处理粘包防止产生歧义
  处理方法
      1 每次发送的消息添加结尾标志(人为增加消息边界)
      2 发送数据结构体
      3 协调收发速度,每次收发后都预留接收时间 UDP
  1 创建数据报套接字
    
  2 绑定地址
    bind
  3 消息的收发
  4 conn,addr = s.recvfrom(buffersize)
    参数 :接收UDP消息
    返回值 :data 接收到的数据
         addr 消息发送端的地址   sockfd.sendto(datamaddr)
    功能 :发送UDP消息
    参数 :data 发送的消息 bytes格式
        addr 目标地址
    返回值 :发送的字节数   5 关闭套接字
    socket.close()


_服务端


——客户端



添加程序第一行
   #!/usr/bin/env python3 TCP套接字编程和UDP套接字编程区别
  1 流式套接字使用字节流的方式传输,数据报套接字以数据报形式传输数据
  2 TCP 会有粘包现象,UDP有消息边界不会形成粘包
  3 TCP 可以保障数据传输完整性,UDP则不保证
  4 TCP 需要进行listen accept 操作UDP不需要
  5 TCP收发消息使用新的套接字,recv send ,udp 使用recvfrom sendto 补充函数
  sendall()
  功能 : 发送 TCP 消息  
  参数 : 要发送的内容,bytes格式
  返回值 : 成功返回None,失败产生异常
 

OSI网络通信工作流程的标准化 ----- 理论的更多相关文章

  1. [信息安全] 3.HTTPS工作流程

    [信息安全]系列博客:http://www.cnblogs.com/linianhui/category/985957.html 0. 简单回顾 在前面两篇博客中介绍了密码相关的一些基本工具,包括(对 ...

  2. 第2章 rsync算法原理和工作流程分析

    本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释. 以下是本文的姊妹篇: 1.rsync(一):基本命令和用法 2.rsync(二):ino ...

  3. [Inside HotSpot] C1编译器工作流程及中间表示

    1. C1编译器线程 C1编译器(aka Client Compiler)的代码位于hotspot\share\c1.C1编译线程(C1 CompilerThread)会阻塞在任务队列,当发现队列有编 ...

  4. rsync算法原理和工作流程分析

    本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释.本文不会介绍如何使用rsync命令(见rsync基本用法),而是详细解释它如何实现高效的增 ...

  5. js.ajax优缺点,工作流程

    1.ajax的优点 Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点: 1.最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好.  2.使用异步方式与服务器通信,不 ...

  6. springmvc 运行原理 Spring ioc的实现原理 Mybatis工作流程 spring AOP实现原理

    SpringMVC的工作原理图: SpringMVC流程 . 用户发送请求至前端控制器DispatcherServlet. . DispatcherServlet收到请求调用HandlerMappin ...

  7. rsync(三)算法原理和工作流程分析

    在开始分析算法原理之前,简单说明下rsync的增量传输功能. 假设待传输文件为A,如果目标路径下没有文件A,则rsync会直接传输文件A,如果目标路径下已存在文件A,则发送端视情况决定是否要传输文件A ...

  8. Kubernetes工作流程--<1>

    Kubernetes工作流程 客户端创建pod 流程: 用户管理员创建 Pod 的请求默认是通过kubectl 客户端管理命令 api server 组件进行交互的,默认会将请求发送给 API Ser ...

  9. [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序]

    [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序] 为何学习socket套接字一定要先学习互联网协议: 1.首先:要想开发一款自己的C/S架构软件,就必须掌握socket ...

随机推荐

  1. MySQL 查询某个数据库中所有包含数据记录的表名

    MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...

  2. 使用jquery 动态创建form 并提交

    $(document).ready(function(){    $("a.delete").click(function(event){        action = this ...

  3. js或者jquery直接下载网页上的图片代码

    1.jquery方式 使用jquery直接下载图片 function downloadImage(src) { var a = $("<a></a>").a ...

  4. Hadoop 3.1.3伪分布式环境安装Hive 3.1.2的异常总结

    背景:hadoop版本为3.1.3, 且以伪分布式形式安装,hive版本为3.1.2,hive为hadoop的一个客户端. 1. 安装简要步骤 (1) 官网下载apache-hive-3.1.2-bi ...

  5. Flutter的布局方法

    重点是什么? Widgets 是用于构建UI的类. Widgets 用于布局和UI元素. 通过简单的widget来构建复杂的widget Flutter布局机制的核心就是widget.在Flutter ...

  6. 10-3 LVM(逻辑卷管理器)

    LVM(逻辑卷管理器) 允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小 允许在多个物理设备间重新组织文件系统 将设备指定为物理卷 用一个或者多个物理卷来创建一个卷组 物理卷是用固定大小的物理 ...

  7. vue项目中请求头为applicationx-www-form-urlencoded的参数传递

    当请求接口的请求头如下图所示时, 前端在传参时需要先新建一个URLSearchParams对象,然后将参数append到这个对象中 const params = new URLSearchParams ...

  8. kali PIN码破解

    airmon-ng start wlan0   //开启网卡airodump-ng wlan0mon    //监听模式,查找开启wps的apreaver -i wlan0mon -b [ap’s m ...

  9. 《C专家编程》读书笔记之第8~11章

    八.为什么程序员无法分清万圣节和圣诞节 1. 整形提升是指char,short int和位段类型(无论signed或unsigned)以及枚举类型将被提升为int或unsigned int(如果int ...

  10. flannel vxlan工作基本原理及常见排障方法

    写在前面 最近用kubeadm鼓捣了几个cluster集群测试用,网络用的flannel.因为这些机器都不是纯净的环境(以前部署过其他的k8s或者有一些特别的设置),所以部署起来遇到了很多问题.看了下 ...