Python学习笔记--网络通信--理论基础
1.是不是越底层越牛逼?
- 不是
- 只要创造价值都厉害。
2.学习套接字编程是为了?
- 为了开发一个C/S或B/S架构的软件
- C/S架构是指
- 客户端,服务端,都自己写。
- 要写两个。
- B/S架构是指
- 服务端,自己写。
- 只需要写一个,服务端。
- 那么客户端呢?借用浏览器,来展示。
- C/S架构是指
3.互联网是?
- 互联网 = 物理连接介质 + 通信协议
- 物理连接介质:
- 网线,路由器,交换机等。
- 通信协议:
- 就是标准。
- 物理连接介质:
4.osi是指?
- Open Systems Interconnection 开放网络互联
5.osi 7层是指?
- 基于OSI模型的网络体系结构中的七个层次。
6.第一层:物理层?
- 硬件是:光纤,电缆等
- 通信方式:电信号(01高低电平)
-
7.第二层:数据链路层?
- 硬件:网卡(提供mac),以太网路由交换机(基于以太网通信),交换机(集线器)
- 通信协议:以太网协议。
- 通信方式:广播 (靠吼)
- 本层的意义:规定了电信号01代表什么含义。
- 统一的标准是:以太网协议。
-
以太网协议的规定是?
- 一组电信号叫帧,
- 一帧 = head+data
- head (18字节)= 发送者地址(6位字节)+ 接受者地址(6位字节)+ 数据类型(6位字节)
- data = 最短(46字节) or 最长(1500字节)
- 所以,一帧数据最短是64字节,最长是1518字节。超过最大字节就分片发送。
-
-
发送者地址?接受者地址?
- 统一用mac来表示。
- Media Access Control Address 直译是,媒体访问控制地址。
-
mac地址是?
- 每块网卡出厂时都被烧制上一个世界唯一的mac地址。
- 通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
- 图示:
- 图示:
-
8.第三层:网络层
- 硬件:路由器。
- 通信方式:IP协议。
-
为什么要有网络层?
- 1.以太网,是广播的形式传播。
- 如果全世界连在一起,都通过以太网传播,是一种灾难。
2.以太网,是基于以太网交换机,而一个以太网交换机插口有上限。
- 一般就有20多个,30来个插口。很难将全世界的所有插口连在一起。
-
- 所以引入网络层,
- 引入一套新的方式解决以太网解决不了的问题。
- 1.以太网,是广播的形式传播。
-
网络层解决的是?
- 引入一套新的方式来解决上一层数据链路层无法解决的问题。
- 具体来讲是:
- 网络层,把每个以太网,作为一个局域网(子网)。
- 这些子网的通信方式是基于IP协议。
-
IP协议是什么?
- IP协议是现在分为第4代和第6代。
- 分别叫IPv4和IPv6
- 常见的是
-
-
IP协议由什么组成?
- IPv4 = ip地址 + 子网掩码
-
IP怎么判定ip_A(192.168.10.2)和ip_B(192.168.10.8)是否属于同一个子网?
- 通过ipA的地址 + A的子网掩码 = 进行AND运算 ---》得到 一个值x (192.168.10.0)
- 再通过ipB的地址 + B的子网掩码 = 进行AND运算 -- 》得到 一个值y (192.168.10.0)
- x = y 他们的结果都是192.168.10.0 所以他们是属于同一个子网。
-
IP的数据包在哪里?
- 直接放在以太网的data里面。
-
提问:MAC+ip 能帮我们定位全世界独一无二的计算机?
- 对的。
-
9.第四层:传输层
- 硬件:四层交换器(能拆4层的设备)
- 通信方式:TCP/UDP协议(基于端口工作)
-
为什么要有传输层?
- 上一层,网络层解决了,所有计算器通信的问题。
- 但计算机,有那么多软件,比如有,QQ,wps,钉钉,Steam等等软件。
- 我QQ的服务端想给小华的电脑上的QQ的客户端传输数据。
- 确实已经可以通过第三层网络层找到小华的电脑,小华的电脑运行了很多软件,如何确定哪个是QQ呢?
- 这就用到了传输层。
-
传输层如何区分软件的?
- 利用端口。
-
端口号的范围是?
- 0 - 65535
-
端口怎么划分的?
- 0-1024的端口,为系统默认分配的。
- 1024以后的端口,为用户设置的。
- 最大为65535
-
提问:mac+ip+端口,能帮我们定位为全世界独一无二的计算机的软件?
- 对的。
-
ARP是什么?
- Address Resolution Protocol 地址解释协议。
-
ARP用来干什么用?
- 帮助我们把IP转换为MAC地址。
- 也就说拿到IP = 拿到MAC
-
提问:原本没有ARP我们想定位,用MAC+IP+port?
- 是的。
-
提问:现在有了ARP我们想定位,只需要用IP+port?
- 对的。
10.第五层:应用层?
- 硬件:无。
- 通信方式:http协议,ftp协议,mail协议,自定义协议(C/S架构)
10.5 总结osi五层?
- 第一层,物理层:电信号。
- 第二层,数据链路层:以太网。(局域网)
- 第三层,网络层:IP协议。(全世界互联)
- 第四层,传输层:TCP/UDP协议。(基于端口,确定唯一电脑软件)
- 第五层,应用层:自定义协议。(常见HTTP,ftp,mail...)
-
11.什么是套接字?
- 当我们写一个应用程序的时候,考虑到他的网络传输。
- 那么就要学习相关的(第四层:传输层;第三层:网络层;第二层:数据链路层;第一层:物理层)
- 这样的话,学习成本很大,并且这四层也是相对固定的东西。
- 所以,有人就跳出来,说,我开发一个东西,叫套接字程序,大家都用我的套接字,就不用过于深入的研究下面这四层了。
- 于是,套接字就出现了。
-
12.TCP协议的是?
- TCP需要建立通路才能通信。
- TCP如何建立通路的呢?
- 第一步:建立C到S的通道。
-
第二步:建立S到C的通路
- 第三步:优化一下。
13.TCP三次握手是怎么回事?
- TCP需要建立连接才能通信。
- 需要建立两个通道,一个是C到S,一个是S到C。
- 建立一个通道,需要一来一回。建立两个通道,是需要两个来回。
- 一个来回,是2段路。两个来回,是4段路。
- 为了简化走的路数,有人说,能不能把中间第2段路,和第3段路,合并到一起?
- 大家说,很有道理。于是,合并到一起了。
- 现在就变成了3段路。也就是3次握手。
14.TCP的四次挥手是什么?
- 此时C-S通路,S-C通路,两条通路都已经建立好。想要断开连接了
- 第一步,C向S请求,断开连接。首先断开C-S的通道。
- 第二步:此时不能立马断开S-C的通道,因为这个通道可能还有数据在传输。
- 第三步:S端发现,数据已经传输结束。所以发送结束信息到C端。
- 图示:
-
我看挥手断开连接,走了4端路,可以像建立连接那样,把中间第2端路,第3端路,合并到一起吗?
- 不可以。
- 因为这两个通路,都是有数据在进行传输的。
- 所以,考虑到保证数据的传输的完整性,不合并到一起。
15.(扩展)建立连接的过程,怎么知道发过来的数据,是建立连接的过程?
- 通过标志位。
- syn标志,发送建立请求的标志位信息。
- ack标志,标志着,确认接收的信息。
-
他们是如何确定信息不被篡改的呢?
-
用暗号,对方收到我的暗号后,在暗号后+1再返回来。
-
这里暗号用seq来表示,暗号内容是:一些字符串。
-
返回的时候,我们可以把这个暗号的信息,跟ack结合起来。
- 比如 发送seq = "abcd"
- 返回来的信息就是 ack = 1 + "abcd"
- 也可以写成 seq = x ; ack = 1+x
16.TCP断开连接呢?
- 跟15同理。
- 发送标志,不叫syn,叫fin
- 如图:
17.TCP的状态是?
- 状态有 Listen | syn_rcvd | ESTABLISHED (已经建立)
- 示例:
-
-
netstat -an
-
18.ARP实现原理?
- APR是帮助我们把IP解析为MAC地址。那么它是如何实现的呢?
- A已知自己的mac和ip,已知B主机的ip,不知道B主机的mac?如何找到B的mac呢?
- 首先,A主机有一个自己的ARP列表。这个表存放的是最近跟A主机通信过的,IP地址和MAC地址的映射关系表。
- A主机会通过先在自己的ARP列表里面找,找到了,结束。没找到,就广播一下(类似学校里的广播找人)
- 广播的时候,会默认B的mac为FFF(多个F),以保证数据头格式正确。
- 如果在局域网内找到,就结束。也就是广播后,有人响应了。响应者会返回它现在所在的位置。结束。
- 如果局域网内没找到。就会通过网关,再去寻找。找到了,就结束。没找到也结束,就是没找到B。
- 举例:就是清华大学,找小明,学校内没找到小明。就会联系高校联盟(网关),让联盟(网关)来找。
- 示例图:
-
- ARP参考资料1:https://zhuanlan.zhihu.com/p/59066874
- ARP参考资料2:https://juejin.cn/post/6969755974261276685
19.TCP和UDP区别是什么?
- 参考资料:https://www.cnblogs.com/linhaifeng/articles/5937962.html
- https://www.cnblogs.com/linhaifeng/articles/6129246.html