【python学习】网络编程2

发布时间:2024年01月24日

基础回顾

网络的三种架构

  1. 单机架构:不用联网。
  2. CS架构:客户端 --> 服务端
  3. BS架构:客户端 --> 浏览器 --> 服务端

互联网的组成

教材版

  1. 边缘部分:客户端或服务端
  2. 核心部分:路由器、基站

科普版

  1. 硬件:一些硬件设备
  2. 软件:通过OSI协议组织无序的电信号为有序

OSI七层协议

物理层

连接计算机,传输电信号。

数据链路层

把电信号分组,数据只能在局域网内传输,局域网传输靠mac地址和交换机。
head(以太网头)
发送地址6
目标地址6
数据类型6
data

mac地址才是计算机的唯一编号。

网络层

ip地址,ip地址是靠路由器传输,然后就可以跨局域网通信。
以太网头 + ip头 + data

ip地址是局域网的编号。
ip地址 + mac地址确定世界实独一无二的计算机。

传输层

传输层给了一个端口。
ip地址 + mac地址 + 端口确定世界实独一无二的计算机上的应用程序。

应用层

对数据进行处理解析。

TCP协议

数据从客户端 --> 服务端的协议。

三次握手四次挥手

三次握手建立连接

需要从服务端下载数据,必须建立连接。

  1. 客户端向服务器发起一个请求,会有一个SYN报头。
  2. 服务端会接收到客户端的请求,会响应客户端,并且把SYN报头改装后又返回客户端,会有ACK的报头。
  3. 客户端开始进入建立连接状态,再发一条请求,请求带上ACK给服务端,让服务端也进入连接状态。

四次挥手关闭连接

  1. 客户端会发送请求带上FIN报头给服务端说我够了,要断开连接。
  2. 服务端接收到客户端的请求后,返回一个带有ACK的请求说确认了。
    FIN报头并没有返回;但是服务器此时还有可能传输数据。
  3. 服务端数据传输结束之后,服务端又会发送一次带报头的FIN的请求,告诉客户端我结束了。
  4. 客户端向服务端进行一次确定,已经把所有的数据都接收完了。

基于TCP协议的套接字编程

import socket

粘包问题

TCP是流式协议,存在粘包问题。
UDP是数据报协议,适合短数据传输。
TCP协议才有粘包问题,UDP协议没有粘包问题。

粘包问题的几种情况

  1. D1和D2间隔时间长,两者数据量小,不会发生粘包问题。
  2. D1和D2间隔时间非常短,两者数据来小,会发生粘包问题,TCP协议本身规定的。
  3. D2比较大,D1比较小,间隔时间短,服务端一次性读取D1和D2的一部分,出现了粘包问题。
  4. D1大,D2比较小,获取了D1的一部分,然后获取了D1的剩余部分和D2,出现了粘包问题。

怎么解决

  1. 两者间隔时间变长
  2. 发送之前告诉客户端数据的大小

发送前告诉大小,这个大小也会占位置,所以大小的位置必须得固定。

import struct

UDP协议

直发直收,安全性较低。

并发编程

同一时刻有多个任务。

import socketserver
文章来源:https://blog.csdn.net/Glass_Gun/article/details/135770921
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。