服务器

python服务器高并发编程

2018-03-03  本文已影响0人  一手好厨艺的IT民工

python服务器高并发编程

1.socket相关概念

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

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

ip地址:唯一定位一个网络主机
端口号:唯一映射一个需要网络服务的进程

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

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

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


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

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

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


image 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原理

上一篇 下一篇

猜你喜欢

热点阅读