zoukankan      html  css  js  c++  java
  • Python之协议

    网络编程

    理论知识很重要,只有记忆和理解了理论,才能更好的组织代码逻辑的编写。

    一:基础知识

    1.生活中到处都是Client Server架构(C/S架构),B/S也是C/S的一种,浏览器就是Client端。

    2.一台电脑装上操作系统之后,就可以玩单机游戏了,只要不联网,只能自己玩,想一起玩必须联网,进入互联网互相交流,交换信息。

    互联网模拟的也是人,电脑模拟的是一个人,互联网模拟的是一群人,而协议就是这群人交流所使用的语言。

    3.互联网的本质就是一系列的协议,协议是大家约定好的标准,大家都遵守,可以视为计算机交流所使用的“语言”。

    4.互联网的功能:电仪计算机如何接入internet,以及通信标准

    二:osi七层协议

    os是管理、控制,计算机硬件与计软件的计算机程序,是直接运行在裸机上的系统软件,任何应用软件都必须在os的支持下才能运行。

    app--->os---->硬件

    互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层,用户可以感知到的只用应用层。

    自上而下,每一层都依赖下一层,每层都有特定的协议,越往上越接近用户,越往下越接近硬件。

    1.物理层主要完成计算机硬件的互联,例如电缆、光缆、双绞线、无限电波,主要基于电器特性发送高低电压(电信号),高压1,低压0.

    2.数据链路层单纯的电信号没有任何意义,必须规定好电信号多少位一组,每组分别代表什么意思,因此数据链路层完成电信号的定义与分组。

    早期每个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议,ethernet,linux网卡中的eth0,eth1,eth就是以太网的意思。

    以太网协议规定:一组电信号构成一个数据包,叫做桢,每一个数据帧分成数据报头和数据两部分

    head  data

    head包含:(固定18个字节)

    • 发送者/源地址,6个字节
    • 接收者/目标地址,6个字节
    • 数据类型,6个字节

    data包含:(最短46字节,最长1500字节)

    • 数据包的具体内容

    head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

    mac地址:

    head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址

    mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

    广播:

    有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)

    ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

    每层运行常见物理设备

    OSI七层协议数据传输的封包与解包过程 

    用户只能感知到应用层,搞清楚每层的协议,就基本理解了互联网通信的原理

    每个上层依赖它的下一层,越往上越靠近用户,越往下越靠近硬件。

    物理层:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。

    数据链路层:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思,

        数据链路层的功能:定义了电信号的分组方式。

    传输层:建立端口间的通信

    网络层:ip协议找到网络中的计算机

    应用层:用户使用的都是应用层,大家都可以开发应用程序,类别也是千差万别,数据也是千差万别。

    更加详细的参考:https://www.cnblogs.com/linhaifeng/articles/5937962.html

    二:Socket套接字

    开发者从应用层组织数据,面向Socket就可以了开发了,无需了解下面层的具体协议如何组装,让socket去组装,你只需要准备原始数据即可。

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

    所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

    分类

    刚开始套接字用来一台计算机不同进程间通信

    基于文件类型的套接字家族  AF_UNIX

    基于网络类型的套接字家族   AF_INET  

    我们只关心网络通信,因此只用AF_INET

     

    看十遍不如自己写一遍!巩固基础,纵横开拓!
  • 相关阅读:
    数列分段
    2020-01-21 数组 最大子序和
    2020-01-21 数组
    补 2020-01-20 数组 删除排序数组中的重复项
    补2020-01-19 数组 两数之和
    2020-01-18 刷题 螺旋矩阵 II
    2020-01-16 刷题 长度最小的子数组
    2020-01-15 刷题 移除元素
    2020-01-14 QT学习记录
    2020-01-14 数组刷题-1
  • 原文地址:https://www.cnblogs.com/gyxpy/p/12933468.html
Copyright © 2011-2022 走看看