Python之网络编程网络编程初识
Posted zhangdadayou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之网络编程网络编程初识相关的知识,希望对你有一定的参考价值。
网络编程初识
C/S B/S架构
C/S B/S架构
C: client端 B: browse 浏览器 S: server端
C/S架构: 基于客户端与服务端之间的通信
? QQ, 游戏,皮皮虾, 快手,抖音.
? 优点: 个性化设置,响应速度快,
? 缺点: 开发成本,维护成本高,占用空间,用户固定.
B/S架构: 基于浏览器与服务端之间的通信
? 谷歌浏览器,360浏览器,火狐浏览器等等.
? 优点: 开发维护成本低,占用空间相对低,用户不固定.
? 缺点: 功能单一,没有个性化设置,响应速度相对慢一些.
网络通信原理
80年代,固定电话联系,(还没有推广普通话)
两台电话之间一堆物理连接介质连接.
拨号,锁定对方电话的位置.
由于当时没有统一普通话,所以你如果和河南,山西,广西,福建等朋友进行友好的沟通交流,你必须学当地的方言.
推广普通话,统一交流方式.
两台电话之间一堆物理连接介质连接.
拨号,锁定对方电话的位置.
统一交流方式.
全球范围内交流:
两台电话之间一堆物理连接介质连接.
拨号,锁定对方电话的位置.
统一交流方式.(英语)
话题转回互联网通信:
? 我现在想和美国的一个girl联系.你如何利用计算机联系???
两台计算机要有一堆物理连接介质连接.
找到对方计算机软件位置.
遵循一揽子互联网通信协议.
osi七层协议
osi七层协议
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
物理层:
物理层指的就是网线,光纤,双绞线等等物理连接介质
比特流:bit就是 0101 跟水流一样的源源不断的发送010101001.
数据链路层:
数据链路层对比特流进行分组.
交换机:广域的交换机就是一种在通信系统中完成信息分流交换功能的设备
路由器:路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。
外网(公网)IP,指连接外部互联网的指定网段
内网(局域网)IP 都是假的,DHCP协议: 路由器自动分发的IP地址,网关等等.
以太网协议:对比特流进行合理的分组.
head | data # 数据头|数据
head: 18个字节: 源mac地址 | 目标mac地址| 数据类型
data: 最少46个字节, 最多是1500个字节.
源mac地址 目标mac地址 数据类型 | data
mac地址:计算机上网卡上标注的地址.12位16进制数组成 :前六位是厂商编号,后六位是流水线号.
交换机的mac学习功能:
? 第一次发送消息广播的形式,当学习表记录上端口与mac地址对应关系之后,在发送消息: 单播的形式发送.
计算机的两个通信方式:
单播:单播是客户端与服务器之间的点到点连接。
广播:在广播式网络中,多有联网计算机都共享一个公共信道,当一台计算机利用共享信道发送报文分组时,所有其它计算机都会"收听"到这个分组.
网络层:
IP协议:确定局域网(子网)的位置(四段分十进制)
取值范围 0~255.0~255.0~255.0~255
子网掩码: C类子网掩码: 255.255.255.0
ip地址 + 子网掩码 按位与运算 计算出是否在统一局域网(子网,网段).
C类子网掩码 一个网段最多可以承载多个IP地址?
? 254个 尾部全部为0为网关地址 尾部全部为1为广播地址
ARP协议:通过对方的ip地址获取到对方的mac地址.
总结:
前提:知道目标mac:
? 计算机A 发送一个消息给 计算机B
? 源码mac 目标mac 源IP 目标IP 数据
? 单播的形式发送到交换机,交换机会检测自己的对照表有没有目标mac,如果有,单播传.如果没有,交由上一层:路由器,路由器收到消息,对消息进行分析,要确定目标计算机与本计算机是否在同一网段,如果在同一网段,直接发送给对应的交换机,交换机在单播发给目标mac.
? 如果不是在同一网段: ?
前提:不知道目标mac:
? 计算机A 发送一个消息给 计算机B
? 源码mac 目标mac不知道 源IP 目标IP 数据
? 单播的形式发送到交换机,交换机交由上一层路由器:路由器收到消息,对消息进行分析,要确定目标计算机与本计算机是否在同一网段,如果在同一网段通过 IP以及ARP协议获取到对方的mac地址,然后在通信.
传输层:
端口协议:UDP协议,TCP协议
端口:一共65535端口,0~1023系统的, 自己选取端口8080 以后都可以.
UDP TCP协议
TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、流式协议, 传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;文件传输程序。
UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文(数据包),尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。
TCP协议的三次握手和四次挥手
syn洪水攻击:制造大量的假的无效的IP请求服务器.致使正常的IP访问不了服务器.
三次握手过程说明:
置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN
ACK:表示验证字段
SYN:位数置1,表示建立TCP连接
FIN:位数置1,表示断开TCP连接
1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)
2、由服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。
3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)
四次挥手过程说明:
1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成)
2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程完毕
以上是关于Python之网络编程网络编程初识的主要内容,如果未能解决你的问题,请参考以下文章
Python并发编程之初识异步IO框架:asyncio 上篇