草庐IT

Python基础之网络编程:2、OSI七层协议

Kkkkangsh 2023-04-19 原文

目录

Python基础之网络编程

一、网络编程前戏

1.什么是网络编程:

​ 网络编程是指基于网络编写代码,能够实现数据的远程交互

2.学习网络编程的目的:

​ 能够开发基于网络,实现与多用户交互的C/S架构的软件

3.网络编程的起源:

​ 最早起源于美国军事领域,早期人们想要实现不同计算机内的数据交互只能使用硬盘拷贝,为了能够更快、更为便捷的实现数据交互,于是就诞生了网络编程

4.网络编程的必备条件:

​ 数据的远程交互

​ 1.早期的电话:需要通过电话线

​ 2.大屁股电脑:需要通过网线

​ 3.笔记本电脑、移动电话:需要通过网卡

实现数据的远程交互必备的基础条条件是:物理连接介质

二、OSI七层协议

1、七层协议简介:

  • OSI七层协议:
    • 规定了所有的计算机在远程数据交互的时候必须经过相同的处理流程、在制造过程中必须拥有相同的功能硬件
  • 包含:
    • 应用层:
      • 与其他计算机进行沟通的应用,它是对应应用程序的通信服务的
    • 表示层:
      • 这一层的主要功能是定义数据格式及加密
    • 会话层:
      • 它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的
    • 传输层:
      • 对传输的数据进行处理、排序
    • 网络层:
      • 对端到端的包传输进行定义
    • 数据链路层:
      • 定义了在单个链路上如何传输数据
    • 物理连接层:
      • 计算机之间需要用到光缆、电缆以及无线电波

最常见的是整合之后的五层或者四层:

​ 五层:应用层、传输层、网络层、数据链路层、物理连接层

​ 四层:应用层、传输层、网络层、网络接口层

接收消息:数据由下往上传递

发送消息:数据由上往下传递

2、五层协议详解:

2、1.物理连接层

主要用于确保计算机之间的物理连接介质
接收数据(bytes类型、二进制)

2、2.数据链路层

1、规定了电信号的分组方式
2、以太网协议
	规定了计算机在出厂的时候都必须有一块网卡、网卡上有一串数字
	该数字相当于是计算机的身份证号码,是独一无二的
	数字特征: 12位16进制数据
    	前6位:厂商编号   后6位:流水线号
	该数字称为:以太网地址/MAC地址

网络相关专业名词

​ 计算机之间想要实现数据交互必须要‘连接’到一起

1、交换机

​ 能够将所有的计算机彼此互联起来

2、广播

​ 首次查找接入同一个交换机的其他计算机 需要向交换机内‘吼一嗓子’

3、单播

​ 首次被查找的计算机回应查找它的计算机,并附带自己的MAC地址

4、广播风暴

​ 接入同一台交换机的多台计算机同时发广播

5、局域网

​ 可以简单理解为由单个交换机组成的网络

​ 在局域网内可以直接使用MAC地址通讯

6、广域网

​ 可以理解为范围更大的局域网

7、互联网

​ 由所有的局域网、广域网连接到一起组成的网络

8、路由器

​ 不同的局域网计算机之间是无法直接实现数据交互的,需要由路由器进行连接

2、3.网络层

IP协议:规定了所有接入互联网的计算机都必须拥有一个IP地址,类似于身份证
	MAC地址可以看成是物理地址,永远也无法修改
	IP地址:是动态分配的,连接到不同场所的网络时IP地址就会改变
 
IP地址特征:
	IPV4:
     点分十进制,由四个点分开的十进制数,单个最大数能够达到255,组合在一起就是255的4次方
    	0.0.0.0
    	255.255.255.255
	IPV6:能够给地球上的每一粒沙子都分配一个IP地址
	IP地址能够跨局域网进行传输

当前的IP地址可以用来标识地球上一台独一无二的计算机

2、4.传输层

PORT协议(端口协议)

	用来标识一台计算机上面的某一个程序
	范围:0-65535
	特征:动态分配(类似于每一次去洗浴中心,拿到的手牌号码)
	建议: 在我们以后编写程序需要使用到端口号时,建议使用8000之后的
    	0-1024      系统默认需要使用
		1024-8000    常见的软件端口号
        
'''
	URL:统一资源定位符(网址)
	网址的本质是由IP和PORT组成的

	IP+PORT:能够定位到全世界独一无二的一台计算机上的某一个程序

	域名解析:将网址解析成IP+PORT

	IP:PORT  实际使用冒号连接
'''

TCP与UDP协议

	两者都是用来规定通讯方式的
	通讯的时候可以随性所欲的聊 也可以遵循一些协议符合要求的聊
	随性所欲的聊:文字、图片、视频、大白话之类。。。
	遵循协议的聊:开头带尊称,首行空两格,用官方话术
'''
	PS:不遵循以上协议也可以聊天,只不过遵循了更合法、合规、合理
'''

1.TCP协议(重要

三次握手建立连接

'''
1、客户端向服务端发送请求建立连接-------:syn = n
2、服务端接收到后反馈允许建立通道-------:ack = n+1
3、服务端向客户端发送建立算共享通道请求----:syn = k
4、客户端同收到后反馈允许建立通道----------: ack = k+1

     第二步和第三步可以看作一步
'''

   	1.TUP协议也可以称为可靠协议(数据不容易丢失)
		数据不容易丢失的原因不适因为拥有双向通道,而是因为有数据反馈机制,给对方发送消息后会保留一个副本,直到对方回应消息收到之后才会删除,否则会在一定时间内反复发送
	2.洪水攻击
    	同一时间拥有大量客户端请求建立连接,会导致服务端一直处于SYN_RCVD(请求连接)状态
	3.服务端如何区分客户端建立链接的请求
    	可以对请求做唯一标识
	

四次挥手断链接

'''
1、客户端向服务端发送断开请求-------: syn = x
2、服务端收到后确认断开-------------: ack = x+1
3、服务端确认是否有消息需要继续发送
4、消息发送后,服务端向客户端发送断开请求----: syn = z
5、客户端收到消息后确认断开---------: syn = z+1

''' 
    1.四次不能合并为为三次
    	需要确认是否还有消息需要发送(TIME_WAIT) 

2.UDP协议
UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。

早期的QQ使用的是纯生的(没有加任何额外功能)UDP协议,导致很容易出现数据丢失,接收不到。现在的QQ自己添加了很多技术和功能。
使用UDP的原因就是因为很简单:快捷、粗暴,只要指定对方的地址就可以发消息了

tcp和udp的对比

  • 上面的TCP协议相当于打电话一样,双方有来有回
  • UDP协议就相当于发短信,信息发出去了,但是不一定有回应,因此也称之为数据报协议、不可靠协议

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快

5.应用层

应用层相当于是程序员自己编写的应用程序
常见的有:HTTP、HTTPS、FTP

有关Python基础之网络编程:2、OSI七层协议的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  4. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  5. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  6. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  7. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  8. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  9. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  10. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

随机推荐