Python 网络基础

软件开发的架构

'''
我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:

第一种是应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用

第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用

这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构
'''
C/S架构
'''
C/S即:Client与Server ,中文意思:客户端与服务器端架构,
	这种架构也是从用户层面(也可以是物理层面)来划分的。

这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,
	才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。
'''

在这里插入图片描述

B/S架构
'''
B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。

Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,
只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。
'''

在这里插入图片描述

基础网络概念

以太网:局域网与交换机

在这里插入图片描述

广播
'''
主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,
所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。
有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,
但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,
禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
'''
ip地址与ip协议

规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,
广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
范围0.0.0.0-255.255.255.255
一个ip地址通常写成四段十进制数,例:172.16.10.1

a类网   10.0.0.0~10.255.255.255

b类网   172.16.0.0~172.31.255.255

c类网   192.168.0.0~192.168.255.255
# IP 地址
'''
IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),
是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,
它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。
IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,
其中,a,b,c,d都是0~255之间的十进制整数。
例:点分十进IP地址(100.4.5.6),实际上是32位二进制数
(01100100.00000100.00000101.00000110)。
'''
'''
IP: 192.168.13.84
          IPv4
               00000000.00000000.00000000.00000000
               0~255    0~255    0~255    0~255
          IPv6
               00000000.00000000.00000000.00000000.00000000.00000000
     子网掩码:255.255.255.0 掩盖住前面几位
     192.168.13.84
     255.255.255.0

     192.168.12.84
     255.255.255.0

     网关IP:192.168.13.1 一般是选取最后的第一位,其中0和255是保留的
          局域网内用交换机保持通信,局域网与局域网间用路由器保持通信
'''

在这里插入图片描述

'''
保留的 192.168.13.0 被称为网络地址,是 IP地址与网关进行 与运算得到的
(两个都为1则为1,其余情况都为0)
     这种情况下,前面的3位区域一定和IP地址相同,最后一位区域一定是0
     保留的 192.168.13.255 被称为广播地址


     局域网内、城域网、广域网:
          广播:目标IP 要发送的内容 自己的IP 遵循一个arp协议
          单播:接收到广播内容后,确认是自己的,只要 回复内容 和 目标IP即可 
          广播风暴:局域网内 用户过多 广播范围大 子网减轻了风暴
          arp协议:为了找到某个机器,发送内容所遵守的一种协议
'''
mac地址
'''
head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,
	发送端和接收端的地址便是指网卡的地址,即mac地址。

mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,
	通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
'''
arp协议:查询IP地址和MAC地址的对应关系
'''
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
  主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,
  	并接收返回消息,以此确定目标的物理地址。
  收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,
  	下次请求时直接查询ARP缓存以节约资源。
  地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,
  	其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;
  	由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,
  	这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
  	相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。 
'''
DNS 域名解析
'''
网络连接:
          - 域名解析
          www.luffycity.com  47.95.64.113
          www.oldboyedu.com  101.200.195.98
          - 连接
          sk = socket.socket()
          sk.connect(('47.95.64.113',80))
          ...
     	问题来了,域名和IP的对应关系在哪里?
          本地:
               Win本地电脑:
               C:\Windows\System32\drivers\etc\hosts
               11.11.11.11 luffycicy.com
               Linux/Mac电脑:
               /etc/hosts

          DNS服务器:全球顶级DNS服务器13台
               www.luffycity.com  47.95.64.113


     创业:
          a. 租一个服务器+公网IP
          b. 租域名
          域名+IP解析
'''
'''
总结:
     1. DHCP,自动位局域网内容电脑分配IP。
     2. 网关,路由器中连接交换机的口。
     3. IP,4个点分的十进制表示  192.11.111.11
     4. 子网掩码,
          IP: 192.168.13.99
          掩码:255.255.255.0

          将挡住的IP位数作为网段。
          未挡住的部分作为可变的值。
     5. 局域网/城域网/广域网
     6. arp协议
     7. DNS
'''
广域网与路由器

在这里插入图片描述

路由器
'''
路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,
以最佳路径,按前后顺序发送信号。 路由器是互联网络的枢纽,"交通警察"。
目前路由器已经广泛应用于各行各业,各种不同档次的产品已成为实现各种骨干网内部连接、
骨干网间互联和骨干网与互联网互联互通业务的主力军。
路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。
这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。
  路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,
  所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,
  可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,
  它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,
  路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。  
'''
局域网
'''
局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。
一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、
工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,
可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
'''
子网掩码
'''
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,
也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。
比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,
那么子网络掩码就是11111111.11111111.11111111.00000000,
写成十进制就是255.255.255.0。

知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。
方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),
然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。 
'''
比如,已知IP地址172.16.10.1172.16.10.2的子网掩码都是255.255.255.0,
请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,

172.16.10.110101100.00010000.00001010.000000001
255255.255.255.011111111.11111111.11111111.000000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

 

172.16.10.210101100.00010000.00001010.00000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是172.16.10.0,因此它们在同一个子网络。

总结:IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络

tcp协议和udp协议

用于应用程序之间的通信。如果说ip地址和mac地址帮我们确定唯一的一台机器,
那么我们怎么找到一台机器上的一个软件呢?

端口
'''
我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,
这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?
显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。
实际上是通过“IP地址+端口号”来区分不同的服务的。
'''
'''
端口,是什么?为什么要有?
     用户来访问时,端口是为了将同一个电脑上的不同程序进行隔离。
     IP是找电脑
     端口是找电脑上的程序

示例:
    MySQL是一个软件,软件帮助我们在硬盘上进行文件操作。默认端口:3306
    Redis是一个软件,软件帮助我们在内存里进行数据操作。默认端口:6379
    网站默认端口:80 ,访问时:http://www.luffycity.com:80
    网站默认端口:443 ,访问时:https://www.luffycity.com:443
范围:
     1 - 65535
    系统保留:1-1024
    一般情况下使用:8000、8001
'''
TCP协议
'''
	当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。
	这个请求必须被送到一个确切的地址。在双方“握手”之后,
	TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。

  这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。
'''

在这里插入图片描述

TCP的三次握手
'''
TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,
等待对方回答SYN+ACK[1],并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接。[1] 
TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
'''
TCP的四次挥手
'''
建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。
(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。
	该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,
	放在已排队等候该应用进程接收的任何其他数据之后,因为,
	FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。
	这导致它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。[1] 
	既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。
注意:
(1) “通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,
	步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。[2] 
(2) 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,
	这称为“半关闭”(half-close)。
(3) 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地
	(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。
	无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,
	但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。[2] 
'''

简化分析

'''
socket客户端向服务端发起连接请求:三次握手
    client.connect((....))
    客户端                 服务端
    我能打你吗
                                来呀来呀
    好的,我这就来
————————————————————————————
    client.send('发送数据')
    收发数据             收发数据 

客户端和服务端断开连接:四次挥手
    client.close() 或 conn.close()
————————————————————————————
    我要断开连接
                            断开就断开,等我处理一些手头的事情
                            ...
    我处理完了,断开吧。
    拜拜
————————————————————————————
补充:断开连接时,反应到代码上:抛出异常/发送空内容;
'''
UDP协议

当应用程序希望通过UDP与一个应用程序通信时,传输数据之前源端和终端不建立
接。当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

tcp和udp的对比
'''
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,
	必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,
	检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,
	它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。
	由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,
	故而传输速度很快。
'''
'''
现在Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,
他们对应着Internet上一些常见的服务。这些常见的服务可以分为使用TCP端口(面向连接)
和使用UDP端口(面向无连接)两种。 
说到TCP和UDP,首先要明白“连接”和“无连接”的含义,他们的关系可以用一个形象地比喻来说明,
	就是打电话和写信。两个人如果要通话,首先要建立连接——即打电话时的拨号,
	等待响应后——即接听电话后,才能相互传递信息,最后还要断开连接——即挂电话。
	写信就比较简单了,填写好收信人的地址后将信投入邮筒,收信人就可以收到了。
	从这个分析可以看出,建立连接可以在需要痛心地双方建立一个传递信息的通道,
	在发送方发送请求连接信息接收方响应后,由于是在接受方响应后才开始传递信息,
	而且是在一个通道中传送,因此接受方能比较完整地收到发送方发出的信息,
	即信息传递的可靠性比较高。但也正因为需要建立连接,使资源开销加大(在建立连接前必须等待接受方响应,
	传输信息过程中必须确认信息是否传到及断开连接时发出相应的信号等),独占一个通道,
	在断开连接钱不能建立另一个连接,即两人在通话过程中第三方不能打入电话。
	而无连接是一开始就发送信息(严格说来,这是没有开始、结束的),只是一次性的传递,
	是先不需要接受方的响应,因而在一定程度上也无法保证信息传递的可靠性了,就像写信一样,
	我们只是将信寄出去,却不能保证收信人一定可以收到。 
TCP是面向连接的,有比较高的可靠性, 一些要求比较高的服务一般使用这个协议,
	如FTP、Telnet、SMTP、HTTP、POP3等。
而UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。
	对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器使用8000端口,
	侦听是否有信息传来,客户端使用4000端口,向外发送信息
	(这也就不难理解在一般的显IP的QQ版本中显示好友的IP地址信息中端口常为4000或其后续端口的原因了),
	即QQ程序既接受服务又提供服务,在以后的QQ版本中也支持使用TCP协议了。
'''

互联网协议与osi模型

互联网协议按照功能不同分为:osi七层 或 tcp/ip五层 或 tcp/ip四层
ip四层							ip五层或tcp                               osi七层或tcp

在这里插入图片描述

'''
(网络接口层 或叫 物理层 )
————————————————————————————-——————
自己写的代码:自己代码+框架
    应用层:使用软件。 打开软件或网站
    表示层:看到数据,如图片和视频。 生产数据:szwwd
    会话层:保持登录或链接状态。 应用会偷偷携带一点其他数据:令牌 19rRNAwf8GVe6xyT9kJPIu5SlQc

socket模块:
    传输层:TCP/UDP         [TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]
    网络层:IP         【IP】【[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]】
    数据链路层:MAC     [MAC][【IP】【[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]】]
    物理层,将数据转换成电信号发送
'''
每层运行常见物理设备

在这里插入图片描述

每层运行常见的协议

在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值