Python -- 网络编程osi五层协议

8.3 osi七层协议(五层协议)

物理层---> 数据链路层(以太网协议(mac地址)) ---->网络层(IP协议) ----> 传输层(端口协议(TCP,UDP协议)) ---> 应用层:

8.3.1 物理层

一系列的物理连接介质:网线,光纤,电缆

发送的数据就是01010101 比特数据流,这些数据连续不断的收发,拿到这些数据没用,不知道数据代表的意义,数据要进行分组(按照一定规则),数据分组这件事物理层做不了(是数据链路层做的)

# 交换机:将一对电脑连接在一起

交换机对照(网口与MAC地址的)表:
1:    1C-1B-0D-DA-E8-8F
2:    FF-FF-FF-FF-FF-FF
3:    FF-FF-FF-FF-FF-FF
4:    FF-FF-FF-FF-FF-FF
5:    1C-1B-0F-4A-E8-8F

网口1: 出来一条信息:

# 第一次广播的形式发出去.

网口1:源地址: 1C-1B-0D-DA-E8-8F 目标地址: 1C-1B-0F-4A-E8-8F  |   明天放假

2,3,4,5口接收到此消息,查看目标mac地址是否是自己的,

如果5口确定是自己的.记录mac地址

每个网口都广播发送消息一遍之后,对照表就构建好,下次在任意的网口在发消息,就直接以单播的形式发送.

目的: 避免局域网内每一次都广播的形式通信.以后就可以单播,提升效率.

8.3.2 数据链路层: 以太网协议

是按照一定的协议对比特流数据进行分组

以太网协议:就是对数据进行分组

以太网协议如何分组:

  • 一组电信号构成一个数据报,叫做 " 帧 "

  • 每一数据帧分成:报头head 和 数据data 两部分

    数据头: 固定长度18个字节 ---> 包括:源地址,目的地址,数据类型(各占6个字节)

    data数据:46字节 <= data <= 1500字节

    head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

问题一: 为什么数据头要固定?

​ 固定就是一个标准,统一,为了提取源地址以及目标地址

问题二: 以太网协议中源/目标地址如何设置唯一?

​ 网卡:网线直接接触的硬件,网卡上有一个地址--mac地址,是确定计算机唯一性的物理地址

​ mac地址:网卡上12位16进制组成的一串数字:前六位是厂商编号,后六位是流水线号

head(源地址,目标地址,数据类型) | data(内容)

广播:计算机最原始的通信方式就是吼

数据的分组(源地址目标地址) + 广播: 理论上我的计算机就可以通信了.效率太低,每台计算机都需要接收广播的消息,查看是否是给自己的数据.比广播风暴还要严重.

所以: 广播它是有范围的,在同一子网,局域网内是通过广播的方式,发消息.

局域网内: 广播 + 以太网进行通信

服务器: 大黑盒子, 机房声音很大,对温度,湿度,等环境都有要求,双电源,双网卡,系统linux.

​ 详细解释中间环节一些特殊的功能:

​ 数据经过以太网协议封装后,先要从局域网内进行吼.每次发消息,每次都要吼,这样效率也是很低的.(数据给交换机,交换机 在分发出去.)

8.3.3 网络层 : IP协议

IP协议: IP地址 + 子网掩码 确定计算机所在网段,子网,局域网的位置(确定对方的局域网的位置)

广播,mac地址 + IP协议 == 可以找到世界上任意一台计算机.

计算机的通信:计算机的软件与服务器的软件进行通信.

IPV4地址: 四点分十进制

196.168.13.38 取值范围 0255.0255.0255.0255

子网掩码:一般都是C类: 0255.0255.0~255.0

# IP地址 + 子网掩码如何确定局域网的位置?
一个ip: 172.16.10.1 : 10101100.00010000.00001010.00000001

子网掩码: 255.255.255.0 : 11111111.11111111.11111111.00000000
        
AND运算得网络地址结果 : 10101100.00010000.00001010.000000001

网段,子网,局域网 : 172.16.10.0


另一个ip: 172.16.10.2 : 10101100.00010000.00001010.00000010

子网掩码: 255.255.255.0 : 11111111.11111111.11111111.00000000
    
AND运算得网络地址结果:10101100.00010000.00001010.000000001

网段,子网,局域网:  172.16.10.0
    
结果都是172.16.10.0,因此它们在同一个子网络。

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

一般情况下:C类子网掩码,一个局域网能承载多少计算机?

C类子网掩码可以分配的IP数量:254个

一个局域网最多可以分配254个IP地址(同一个局域网内的IP地址不能重复) 可以连接254台计算机

通过IP地址与子网掩码可以确定对方计算机是否和自己的计算机在同一子网

如果确定在同一子网:通过广播 + 单播就可以通信

如果不确定在同一子网:

ARP协议: 就是通过对方的IP地址获取到对方的MAC地址.

如果两个用户进行第一次通信的时候,你不可能知道对方的mac地址,但是你必须要知道对方的IP地址

IP + APR协议可以获取对方的MAC地址

8.3.4 传输层:端口协议(UDP , TCP协议)

传输层:应用软件接收数据的接口

端口协议:封装端口,确定软件在计算机的位置

mac地址 + 广播形式 + IP地址 + 端口 == 可以找到世界上任意一台计算机对应的软件位置

IP地址 + 端口 == 可以找到世界上任意一台计算机对应的软件位置

端口 : 0~65535 端口号

​ 1~1023 系统占用的端口号 1024~8000之内:一般都是由软件占用

8.3.5应用层:软件自己定义的协议.

App发送数据

将数据按照自己定义的协议进行分装 , http FTP协议等

8.4 TCP协议的三次握手,四次挥手

客户端与服务端第一次建立通信联系需要三次 ' 握手 '

客户端向服务端发送建立连接请求,并给服务端发送一段序列号,服务端接收到请求之后,返回给客户端确认信号并返回建立接请求和序列号,建立连接,然后客户端再返回给服务端确认信号.

TCP协议为什么要进行 "三次握手"?

TCP协议在建立连接时,需要确认通信双方的收发信息的能力都是正常的,因此需要进行多次验证,俗称"三次握手",因此TCP协议也可以称为 " 三次握手协议 "

建立的链接不能一直连接着

四次挥手

数据发送完毕,软件也要关闭,客户端与服务端先断开连接(也有服务端与客户端断开连接)发送一个finish和序列号,服务端接收到信号,给客户端返回一个确认信息,断开客户端到服务端的连接.但是服务端到客户端的连接还存在,然后服务端还可以给客户端发送一个finish和序列号,客户端接收到服务端发送的信息,确认断开连接,再返回给服务端确认信息.

1563192958437

syn洪水攻击 : 黑客会虚拟很多的假IP,然后访问你的服务器. 服务器中有 半连接池:有缓冲的效果

原文地址:https://www.cnblogs.com/Agoni-7/p/11220936.html