【python学习】网络编程2

本文概述了网络的基本架构,包括单机、CS架构和BS架构,深入解析了互联网的组成以及OSI七层协议的作用。重点介绍了TCP协议的三次握手和四次挥手过程,并讨论了粘包问题及其在UDP协议中的区别,同时涉及并发编程在套接字编程中的应用。
摘要由CSDN通过智能技术生成

基础回顾

网络的三种架构

  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bosenya12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值