python网络编程之网络通信协议

一、C/S与B/S架构

B/S架构

B/S架构中省去了客户端的开发,是基于浏览器(Browser)与服务端完成数据的通信

二、网络通信

什么是网络

网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。

网络即一种物理链接介质

什么是通信

通信是人与人之间通过某种媒体进行的信息交流与传递。

通信即数据与信息的传输

什么是网络通信

网络通信是通过网络将各个孤立的设备进行连接,通过信息交换实现人与人,人与计算机,计算机与计算机之间的通信。

网络通信即计算机与计算机之间通过物理介质和某种协议进行的数据与信息的传输

了解了以上知识后我们就可以发现,计算机之间需要完成通信,必要的条件有两个:

  • 物理链接介质
  • 通信协议

物理链接介质我们这里不做深入研究,下面我们来学习一下互联网的通信协议。

三、互联网通信协议

OSI协议

OSI模型是由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。OSI协议根据功能不同,分工不同,被人为的分为七层协议。

实际中还有人划分为五层、四层协议

七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

五层划分为:应用层、传输层、网络层、数据链路层、物理层

四层划分为:应用层、传输层、网络层、网络接口层

为什么要有协议?

协议用来规定数据的组成格式,是的不同的计算机之间可以识别传输的数据。

物理层

主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。在网络通信的过程中,物理层负责发送电信号。一组物理层数据称之为位。

物理链路层:Ethernet

我们知道单纯由0和1组成的电信号没有意义,无法进行识别,这时候我们需要物理链路层,它定义了电信号的分组方式。常见的物理链路层的协议有以太网协议(Ethernet)

以太网协议规定:

  1. 一组数据称之为一个数据帧
  2. 数据帧分为两部分组成:头部 + 数据
    - 而在数据帧的头部中包含了源地址(6bytes)、目标地址 (6bytes)和数据类型(6bytes),其中的源地址和目标地址 均为mac地址。
    - 数据部分包含了网络层的整体数据内容
  3. 接入互联网的主机必须有一张网卡,每张网卡出厂时都有一个唯一的mac地址。
  4. 以太网的工作方式是广播

网络层:IP

网络层走的是IP协议,主要用于划分广播域,每一个广播域需要通过网关将包转发到公网,网关走的是路由协议。

IP协议规定:

  1. 一组数据称之为一个数据包。
  2. 数据包分为头部和数据
    1. 头部包含源地址和目标地址,该地址是IP地址,IP地址分为网络部分和主机部分。主机部分即IP地址,网络部分即子网掩码,用于划分广播域。
    2. 数据包含传输层的整体数据内容

在网络层还有一个非常重要的协议ARP协议,ARP协议是地址解析协议,它是根据IP地址获取物理地址(mac地址)的一个TCP/IP协议。IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。

传输层:TCP/UDP等

TCP/UDP协议是基于端口的一种协议,端口范围是0-65535,期中0-1023端口为系统占用端口。

有了tcp/udp协议后,我们可以通过ip+端口标识全世界范围内独一无二的一个基于网络通信的应用程序,但在基于tcp协议通信之前,必须建立一个双向通信的链接。一般通过三次握手建立一个双向通信的链接。

但在切断链接过程中是通过四次挥手进行切断。因为在切断链接的过程中有可能涉及到仍有一端再进行单向数据传输,只有当数据传输完成后这一向的链接才切断。

应用层:http,ftp等

在应用层我们可以自定义协议,但自定义协议的工程过于庞大,软件开发中我们一般采用http、ftp等已存在的协议。应用层的协议也同样包含头部和数据两部分。

13、python网络编程之网络通信协议相关推荐

  1. 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等

    文章目录 网络编程概述 网络通信要素 要素一IP和端口号 要素二网络协议 TCP网络编程 UDP网络编程 URL网络编程 Java网络编程基础 网络编程概述 Java是Internet上的语言,它从语 ...

  2. 【网络编程】网络基础知识

    前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ ...

  3. 如何连接Linux上的服务器 网络编程,Linux 网络编程 一

    一.网络编程基础 网络编程本身是一门很大的学问,涉及到的东西也很多,尤其是各种协议.先看图: 正如上图所示,网络编程中包含五大层面(也有区分六个层面),从应用层到物理层可以明显看出 越往下越接近计算机 ...

  4. 网络编程:网络协议简介

    这是张富涛的第10篇原创 网络编程:网络协议简介 网络协议在网络编程中是一个比较神秘的概念,今天就由我们揭开它神秘的面纱吧. 1. 什么是网络协议? 网络协议是指对于网络中传输的数据格式的规定.在计算 ...

  5. 【技术分享篇】从网卡到tcpip协议栈,再到应用程序丨tcp/ip网络编程丨网络api的实现原理丨sk_buff的作用

     从网卡 聊到tcp/ip协议栈,再到应用程序 1. posix tcp/ip网络编程 2. 网络api的实现原理 3. sk_buff的作用 [技术分享篇]面试中从网卡 聊到tcpip协议栈,再到应 ...

  6. android网络编程及网络超时处理

    android网络编程及网络超时处理 本文是收录的两篇关于这方面的文章 Android超时机制的处理 由于手机端应用的响应,与当时的无线通信网络状况有很大的关联.而通信网络往往具有不稳定,延迟长的特点 ...

  7. python高级编程之网络编程

    Python高级之网络编程 端口 端口分类 知名端口 动态端口 查看端口 socket简介 电脑上进程之间的通信 什么是socket 创建socket 使用UDP套接字发送数据 使用UDP套接字接受数 ...

  8. python 网络编程_Python网络编程(原书第2版)

    Python网络编程(原书第2版) 作者:(美)埃里克·周(Eric Chou) 著 出版日期:2019年06月 文件大小:54.50M 支持设备: ¥68.00 适用客户端: 言商书局 iPad/i ...

  9. python网络编程案例_Python 网络编程_python网络编程基础_python高级编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

最新文章

  1. 理财周报,致歉还远远不够
  2. 报名 | 腾讯量子实验室发起Alchemy竞赛,推动分子性质的AI预测研发
  3. [云炬创业学笔记]第一章创业是什么测试15
  4. Linkis1.0下载地址
  5. Java反序列化json内存溢出_反序列化JSON时出现线程错误
  6. dbscan聚类算法_一种视频人群流的轨迹聚类方法
  7. c语言将数据写入文件后乱码_html文件的下载,如何使用字节流,如何使用转换流...
  8. fatal: git-write-tree: error building trees
  9. 高通似乎成了台积电和三星在先进工艺上暗战主角
  10. Asp.net 构建可扩展的的Comet Web 应用(一)
  11. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)
  12. springboot - 应用实践(3)springboot的核心
  13. 【3D点云】数据入门(持续更新)
  14. arcgispython空间插值_[转载]ARCGIS中几种空间插值简单比较
  15. 谷歌应用内购神器Freedom原理解析
  16. 基于PyQt5与opencv制作的证件照尺寸变换应用程序
  17. Django创建超级管理员用户步骤
  18. #cs231n#Assignment2:Dropout.ipynb
  19. shipyard docker集群问题
  20. 如何减少PDF文件的大小

热门文章

  1. JS中的JSON.Stringify 方法详解
  2. java 生成uuid
  3. 八人抢答器讲解_八人抢答器_课程设计.doc
  4. 29省市倡导「就地过年」,3000万+人异地过年!创历史新高!
  5. 汽车理论matlab编程,汽车理论课后作业matlab编程详解带注释[10页]
  6. Pascal VOC2012数据集下载
  7. 马博士谈营养(23):又到腊八熬粥时
  8. SDU软件17级大一下离散期末真题(回忆版)
  9. Android编译出现com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536错误解决办法
  10. 构建 PHP运行环境