python 28 网络协议

时间:2023-12-13 16:07:38

网络协议

1. C/S、B/S 架构

C:client端   B:browse浏览器   S:server 端

1.1 C/S 架构:

​ 基于客户端与服务端之间的通信。 如QQ、抖音等。

​ 优点:满足个性化设置,响应速度快。

​ 缺点:开发成本、维护成本高,占用空间,用户固定。

1.2 B/S 架构:

​ 基于浏览器与服务端之间的通信。 如360、谷歌浏览器。

​ 优点:开发、维护成本低,占用空间相对低,用户不固定。

​ 缺点:功能单一,没有个性化设置,响应速度慢一些。

2. 网络通信原理

​ 1. 两台计算机要有一堆连接介质连接;

​ 2. 需找到对方计算机软件位置;

​ 3. 遵循互联网通信协议。

3. OSI七层协议(TCP/IP五层):

结构:应用层(应用层、表示层、会话层)、传输层、网路层、数据链路层、物理层

python 28 网络协议

3.1 物理层:

​ 介质:光缆、双绞线(网线)、无线电波等。

​ 主要是基于电器特性发送高低电信号(1,0) 也叫比特流 010101110...

3.2 数据链路层:

​ 对电信号(比特流)进行分组,定义了分组方式。

3.2.1 以太网协议:

​ 对比特流进行合理的分组。按每一帧分割。

​ 一组电信号(比特流)数据构成一个数据报,叫做“帧”。

​ 每一个数据帧:由报头head和数据data组成。

​ 每帧最短64字节,最长1518字节,超过就会分片发送。

head data
固定18个字节(源地址6字节、目标地址6字节、数据类型6字节) 46—1500字节

3.2.2 mac地址:(物理地址)

​ 计算机上网卡上标注的地址(计算机地址)。

​ 12位16进制数组成表示(前六位是厂家编号,后六位是流水线号)。

​ 每帧的结构:源mac地址 目标mac地址 数据类型 | data

3.2.3 计算机通信方式:

​ 同一个局域网内,通过广播的形式通信。 局域网所有的计算机都能接受消息、分析消息。是否是找'我'(mac地址)的,不是就会丢弃。

​ 只能在局域网内进行广播。范围太大,会造成广播风暴,效率极低。

3.2.4 交互机的mac地址学习功能:

​ 前提:知道目标的mac地址。 在同一局域网下,第一次发消息是以广播形式,当交互机的接口记录到每个计算机的mac地址后,再发消息就是单播模式。

​ 单播:是一个单个的发送者和一个接受者直接通过网络进行的通信。

​ 广播:“一对所有”的通讯模式。

3.3 网络层:

​ 互联网是由一个个彼此隔离的小的局域网组成的。

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

3.3.1 IP协议

​ 能够确定局域网(子网)的位置。

​ 规定网络地址的协议叫Ip协议,它定义的地址称为IP地址,广泛采用IPV4,它规定网络地址由32位2进制表示。 范围为:0.0.0.0 ~255.255.255.255

​ 一个IP地址通常写成 四段十进制 , 如:192.168.14.144

IP地址分为两部分: 网路部分:标识子网

​ 主机部分: 标识主机

子网掩码:表示子网络特征的参数,中国是C类子网掩码:255.255.255.0

​ IP地址与子网掩码的二进制码分别进行AND(与)运算,就可判断两个IP地址是否在同一局域网(子网、网段)下。

​ 192.168.14.0 网关地址被占用

​ 192.168.14.255 广播地址被占用

​ 以上三个都属于192.168.14.0的局域网,一个局域网可连254台计算机。

3.3.2 ARP协议

​ 在实际情况中,我们无法知道目标的mac地址,因此需要通过一定的方法获取。

ARP协议可以从对方的IP地址获取到对方的mac地址 。

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

源mac地址 目标mac地址 源IP地址 目标IP地址 数据部分
发送端 发送端mac FF:FF:FF:FF:FF:FF 192.168.14.144 192.168.14.20 data

​ 第一次发消息:发送到交互机——>路由器:广播形式发出。 目标计算机接收到信息时,会返回消息,将自己的mac地址传回。

3.4 传输层

​ 端口协议:能够确定软件在计算机的位置。

​ 有65535个端口;0~1023操作系统专门使用的端口; 3306是数据库端口; 自己开发软件都是8080以后的端口号。

3.4.1 UDP协议(User Datagram Protocol):

​ 用户数据报协议:不可靠的、无连接的传输协议,传输效率高、面向数据包,尽最大努力服务,无拥塞控制。应用:域名系统(DNS),视频流,QQ, 微信。

3.4.2 TCP协议 (Transmission Control Protocol)

​ 可靠的、面向连接的协议、流式协议,传输效率低全双工通信,基于字节流的传输层的通信协议。应用:浏览器、文件传输等。

3.4.3 TCP协议的三次握手和四次挥手

  1. 建立连接(三次握手)

python 28 网络协议

syn: 请求 seq :序列号

TCP三次握手的过程如下:

  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
  2. 服务器端收到SYN报文,回应一个SYN(SEQ=x)和 ACK(ACK=x+1)报文,进入SYN_RECV状态。
  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=x+1)报文,进入Established(连接)状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

服务端可以将请求与确认同时传给客户端。

  1. 断开连接(四次挥手)

python 28 网络协议

​ 客户端发送服务端数据时,在数据传输完成后,会马上发出fin=1的请求,主动请求断开连接。但此时,服务端可能还在给客户端传输数据,因此不能同时断开,需服务端在传输结束后,再次请求断开连接。所有共有4次挥手。

TCP四次挥手的过程如下:

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。

  1. 客户端的应用进程首先调用close,称该端执行“主动关闭”(active close)。客户端的TCP会发送一个FIN(fin=1,seq=y)分节,表示数据发送完毕。
  2. 接收到这个FIN的服务端端执行 “被动关闭”(passive close),这个FIN由TCP确认,并返回一个ACK(ack=1+y),断开一个通道连接。

    ​注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,

    因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
  3. 一段时间后服务端也无数据可发时,服务端的应用进程会调用close关闭它的套接字。这导致它的TCP也发送一个FIN(fin=1,seq=y)分节。
  4. 接收到这个最终FIN的客户端,它的TCP会确认这个FIN,返回一个ACK(ack=1+y),断开另一个通道。

每个方向都需要一个FIN和一个ACK,因此需要4次。

syn洪水攻击:制造大量的假的无效的IP请求服务器,致使正常的IP访问不了服务器。

3.5 应用层

​ 自己定义的协议。

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

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

广播(局域网内)+ mac地址(计算机位置)+ IP(局域网位置)+ 端口(软件在计算机的位置)

有了以上四个参数,就可以确定任何一台计算机的软件的位置。

python 28 网络协议

扩展

路由器:

​ 外网(公网)IP:真正能够访问的地址;

​ 内网(局域网)IP:都是虚拟的IP的,由DHCP协议:路由器自动分配IP地址、网关等。

DNS服务器:

​ 域名解析(将网址解析成IP地址以及相应的端口)。

例:描述访问JD网站流程的步骤:

你的电脑输入"www.JD.com"网址,以单播的方式传到交互机,再以单播方式传到路由器,路由器将网址传给DNS服务器进行域名解析,然后将IP地址、接口等信息返回给路由器;路由器会根据据IP地址进行判断。
如果是同一个局域网,则以广播或者单播的形式访问到目标服务器的软件上。
如果不是同一局域网,会经过NPI:IP置换技术,将本机的IP地址换成路由器的IP地址,然后经过路由协议,选取最优的路线;找到目标路由,再以广播或者单播的形式访问到目标服务器的软件上(也可通过端口映射计算,能够直接连接到目标交换机上)。