day31学习整理-Python网络编程

2019/09/05 学习整理

python 网络编程

网络协议

五层模型

一、物理层

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

物理层字面意思解释:物理传输、硬件、物理特性。在深圳的你与北京的朋友聊天,你的电脑必须要能上网,物理体现是什么?是不是接一根网线,插个路由器,北京的朋友那边是不是也有根网线,也得插个路由器。也就是说计算机与计算机之间的通信,必须要有底层物理层方面的连通,就类似于你打电话,中间是不是必须得连电话线。

中间的物理链接可以是光缆、电缆、双绞线、无线电波。中间传的是电信号,即010101...这些二进制位。

二、数据链路层

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

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

2.1 以太网协议

ethernet规定:一组电信号构成一个数据报,叫做'帧',每一数据帧分成:报头head和数据data两部分

  • head包含:(固定18个字节)
    • 发送者/源地址,6个字节
    • 接收者/目标地址,6个字节
    • 数据类型,6个字节
  • data包含:(最短46字节,最长1500字节)
--
headdata
  • 数据报的具体内容:head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

这就像写信,发送者的地址(源地址)就是你家的地址,接收者地址(目标地址)就是对方的收信地址,你家的路由器就相当于邮局。其实在计算机通信中的源地址和目标地址指的是Mac地址。

2.2 Mac地址

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

151-大白话OSI七层协议-mac网卡1.png?x-oss-process=style/watermark

151-大白话OSI七层协议-mac地址.jpg?x-oss-process=style/watermark

2.3 广播地址

这个数据包封装好以后就往外发,到物理层以后就全部转成二进制,往外发是怎么发的呢?就是靠吼。即“我是nick,我找飞哥要战狼2的片”。这么吼了一嗓子以后,全屋子的人都能听到,这就是广播。

计算机底层,只要在一个教室里(一个局域网),都是靠广播的方式,吼。

151-大白话OSI七层协议-广播.jpg?x-oss-process=style/watermark

广播出去以后,所有人都听得见,所有人都会拆开这个包,读发送者是谁,接收者是谁,只要接收者不是自己就丢弃掉。对计算机来说,它会看自己的Mac地址,飞哥收到以后,他就会把片发给我,发送回来同样采用广播的方式了,靠吼。

同一个教室(同一个局域网)的计算机靠吼来通信,那不同教室的计算机又如何?

比如说局域网1的pc1与局域网2的pc10如何通信?你在教室1(局域网1)吼,教室2(局域网2)的人肯定是听不见的。这就是跨网络进行通信,数据链路层就解决不了这个问题了,这就得靠网络层出面了。

注意:在讲网络层之前,其实基于广播的这种通信就可以实现全世界通信了,你吼一声,如果全世界是一个局域网,全世界的计算机肯定可以听得见,从理论上似乎行得通,如果全世界的计算机都在吼,你想一想,这是不是一个灾难。因此,全世界不能是一个局域网。于是就有了网络层。

三、网络层

网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

网络层的由来:有了ethernet、Mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由 一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到

  • 对于上述的问题这就不仅仅是效率低的问题了,这会是一种灾难

151-大白话OSI七层协议-网络层.jpg?x-oss-process=style/watermark

为了解决上述灾难,网络层定义了一个IP协议,

你想,我是这个教室的一个学生,我想找隔壁教室一个叫老王的学生,我也不认识老王,那怎么办,我吼?老王在另外一个教室肯定是听不到的。找教室的负责人,这个教室的负责人就负责和隔壁教室的负责人说话,说我们教室的有个学生要找你们教室的老王。往外传的东西交给负责人就可以了,内部的话上面已经提到,通过广播的方式,对外的东西广播失效。教室的负责人就是网关,网关即网络关口的意思。

Mac地址是用来标识你这个教室的某个位置,IP地址是用来标识你在哪个教室(哪个局域网)。你要跨网络发包你是不是要知道对方的IP地址,比如你要访问百度,你肯定得知道百度服务器的IP地址。计算机在发包前,会判断你在哪个教室,对方在哪个教室,如果在一个教室,基于Mac地址的广播发包就OK了;如果不在一个教室,即跨网络发包,那么就会把你的包交给教室负责人(网关)来转发。Mac地址及IP地址唯一标识了你在互联网中的位置。

数据链路层中会把网络层的数据包封装到数数据链路层的数据位置,然后再添加上自己的包头,再发给物理层,物理层发给网关,网关再发给对方教室的网关,对方教室的网关收到后在那个教室做广播。

在数据链路层看,数据封装了两层,跟玩俄罗斯套娃有点类似,一层套了一层。

151-大白话OSI七层协议-网络层包.jpg?x-oss-process=style/watermark

最终变成

---
以太网头IP头IP数据

现在来看另一个问题,在吼之前怎么知道对方的Mac地址?这就得靠ARP协议。

ARP协议的由来:在你找飞哥要片之前,你的先干一件事,想办法知道飞哥的Mac地址。即你的机器必须先发一个ARP包出去,ARP也是靠广播的方式发,ARP发送广播包的方式如下:

-源Mac目标Mac源IP目标IP数据部分
发送端主机发送端MacFF:FF:FF:FF:FF:FF172.16.10.10/24172.16.10.11/24数据

局域网中怎么获取对方的Mac地址:

肯定要知道对方的IP地址,这是最基本的,就像你要访问百度,肯定得知道百度的域名,域名就是百度的IP地址。自己的IP可以轻松获得,自己的Mac也轻松获取,目标Mac为12个F,我们叫广播地址,表达的意思是我想要获取这个目标IP地址172.16.10.11的机器的Mac地址。Mac为12个F代表的是一种功能,这个功能就是获取对方的Mac地址,计算机的Mac永远不可能是12个F。假设是在本教室广播,一嗓子吼出去了,所有人开始解包,只有IP地址是172.16.10.11的这个人才会返回他的Mac地址,其他人全部丢弃。发回来源Mac改成飞哥自己的Mac地址,同时把飞哥的Mac地址放在数据部分。

跨网络怎么获取对方的Mac地址:

通过IP地址区分,计算机运算判断出飞哥不在同一个教室,目标IP就变成了网关的IP了。网关的IP在计算机上配死了,可以轻松获取。

-源Mac目标Mac源IP目标IP数据部分
发送端主机发送端MacFF:FF:FF:FF:FF:FF172.16.10.10/24172.16.10.11/24数据
-源Mac目标Mac源IP目标IP数据部分
发送端主机发送端MacFF:FF:FF:FF:FF:FF172.16.10.10/24网关地址数据
-源Mac目标Mac源IP目标IP数据部分
发送端主机发送端Mac网关Mac172.16.10.10/24飞哥的IP数据

注意:网关帮你去找飞哥,但对用户来说,由于速度太快我们根本就感觉不到网关的存在。

3.1 IP协议详解

  • 一个IP地址通常写成四段十进制数,例:172.16.10.1

3.1.1 IP地址的两部分

  1. 网络部分:标识子网
  2. 主机部分:标识主机
  • 注意:单纯的IP地址段只是标识了IP地址的种类,从网络部分或主机部分都无法辨识一个IP所处的子网

例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网

3.2 子网掩码详解

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

比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算

  • 172.16.10.1:10101100.00010000.00001010.000000001
    • 255.255.255.0:11111111.11111111.11111111.00000000
    • AND运算得网络地址结果:10101100.00010000.00001010.000000000->172.16.10.0
  • 172.16.10.2:10101100.00010000.00001010.000000010
    • 255.255.255.0:11111111.11111111.11111111.00000000
    • AND运算得网络地址结果:10101100.00010000.00001010.000000000->172.16.10.0
  • 结果都是172.16.10.0,因此它们在同一个子网络。

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

3.3 IP数据包详解

  • head:长度为20到60字节
  • data:最长为65,515字节

注意:以太网数据包的"数据"部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

---
以太网头IP头IP数据

有了Mac地址+IP地址,我们就能确定世界上独一无二的一台计算机。

3.4 ARP协议详解

arp协议功能:广播的方式发送数据包,获取目标主机的Mac地址

协议工作方式:每台主机IP都是已知的,例如:主机172.16.10.10/24访问172.16.10.11/24

1.首先通过IP地址和子网掩码区分出自己所处的子网

场景数据包地址
同一子网目标主机Mac,目标主机IP
不同子网网关Mac,目标主机IP

2.分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标IP为172.16.10.1,通过arp获取的是网关的Mac)

-源Mac目标Mac源IP目标IP数据部分
发送端主机发送端MacFF:FF:FF:FF:FF:FF172.16.10.10/24172.16.10.11/24数据

3.这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标IP为自己的,就响应,返回自己的Mac

四、传输层

传输层的由来:网络层的IP帮我们区分子网,以太网层的Mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序。

那么我们通过IP和Mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

传输层功能:建立端口到端口的通信

补充:端口范围0-65535,0-1023为系统占用端口

  • 有了Mac地址+IP地址+端口,我们就能确定世界上独一无二的一台计算机上的应用程序

4.1 TCP协议

----
以太网头IP头TCP头数据

4.2 UDP协议

----
以太网头IP头UDP头数据

4.3 TCP报文
4.4 TCP三次握手和四次挥手

151-大白话OSI七层协议-tcp三次握手和四次挥手.jpg?x-oss-process=style/watermark

五、应用层

应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式

应用层功能:规定应用程序的数据格式。

  • 例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

151-大白话OSI七层协议-应用层.jpg?x-oss-process=style/watermark

注意:数据经过以上几层的折腾,已经不成样子了。

151-大白话OSI七层协议-七层数据内容.jpg?x-oss-process=style/watermark

三次握手

1751690-20190905151101360-372645690.jpg

四次挥手

1751690-20190905151107357-1731718336.png

转载于:https://www.cnblogs.com/Wunsch/p/11466176.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值