python并发编程服务_python服务器高并发编程

python服务器高并发编程

1.socket相关概念

注意:请别关注图从哪里来,我只是想把知识点讲清楚

进程与进程通信的方式

[ ] 管道(无名、高级、有名)

[ ] 消息队列(message queue)

[ ] 信号量

[ ] 信号

[ ] 共享内存

[ ] 套接字

注意:本篇只讨论socket通信,其他进程间的方式不去论述,罗列的原因是为了说明socket本质就是为了解决进程间的通信问题,尤其是网络上两个进程通信的问题。

socket地址 = ip地址 + 端口号

ip地址:唯一定位一个网络主机

端口号:唯一映射一个需要网络服务的进程

socket地址解决了两个进程通信时如何相互定位的问题。具体通信时,数据怎么传输,传输多少,那就是Tcp/ip协议的相关内容了!

这里简单的描述一下TCP和UDP

上个图:网络中,不同的层解决不同的问题,因而每一层有个头,上层消息被包裹在下层消息体中,其中进程间通信的socket数据包被包裹在ip包中。

image

image

[ ] 1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum

[ ] Transmission Unit)为1500;

[ ] 2.在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;

[ ] 3.在传输层:每次传输的数据包受到IP包长度的限制,每个数据包连头部不能超过IP报的MTU

UDP包是将所有的数据放在一个IP包中传输,而UDP包的首部要占用8字节,所以UTP的MTU为1480-8=1472;

TCP则先通过一定的交互建立连接,然后将数据切片发送--具体里面的协议就不讲了!

Tcp数据包的图:TCP连接一旦建立,则开始分片发送数据

image

啰嗦一下TCP三次握手,四次挥手

首先上图:

image

问题1:为什么要进行第三次握手

第一次握手,客户端和服务器一发一答代表双方活着,可以发送数据。

而,客户端再发一次应答的原因:主要是为了防止已失效的连接请求报文段又突然传送给B,从而产生了错误。

问题2:为什么要进行四次挥手

过程:

第一次挥手:主机1向主机2,发送FIN报文段,表示关闭数据传送,并主机1进入FIN_WAIT_1状态,表示没有数据要传输了

第二次挥手:主机2收到FIN报文段后进入CLOSE_WAIT状态(被动关闭),然后发送ACK确认,表示同意你关闭请求了,主机到主机的数据链路关闭,主机进入FIN_WAIT_2状态

第三次挥手:主机2等待主机1发送完数据,发送FIN到主机1请求关闭,主机2进入LAST_ACK状态

第四次挥手:主机1收到主机2发送的FIN后,回复ACK确认到主机2,主机1进入TIME_WAIT状态。主机2收到主机1的ACK后就关闭连接了,状态为CLOSED。主机1等待2MSL,仍然没有收到主机2的回复,说明主机2已经正常关闭了,主机1关闭连接。

为什么:

我告诉你的原因是为了保证TCP的稳健性,具体的情况很多,我也说不清楚!

待续……

2.select相关原理

3.poll原理

4.epoll原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值