Tcp之异常

Tcp异常

昨研发报异常,据CMCC说是我方服务器主动断开的,于是怀疑是超时设置过短,于是我抓包,由于我接触socket时日尚短,搞不清为什么三次握手成功之后我方服务器会立刻发送fin

Tcp之异常

今天本来做实验观察进程IP复用情况,却无意中揭开了此问题的面纱,特此记录

我们首先来说说,ip复用的情况,具体ip能被复用多少次,记得从哪本书上模糊看到关于此的文章,不记得了。废话不多说,上源码先

#!/usr/local/bin/python3.5

#coding:utf-8

import socket

port = 8080

host = '192.168.1.210'

while True:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host, port))

此源码相信很多人都能看懂,就干一件事,疯狂的建立三次握手。运行大概十几秒之后,程序抛出异常

Tcp之异常

异常说我无法请求分配的地址,我看字面意思还以为是IP复用资源用尽了,结果原来是因为

socket发起connect请求的时候会随机分配一个端口给你。这个分配的端口是有范围的,记录在:

Tcp之异常

共计可用端口为28232

再写一个小脚本监控下连接数,发现

Tcp之异常

刨去22和mysql这两个持久链接,刚好等于28232

好了,这个问题解决了,那我们看看顺手而来的收获吧

Tcp之异常

情况何其像似由此我们也知道了,在程序没有可发送的数据后,会自动发送一个FIN,代表我已无数据发送了,即使程序没发送任何数据,在刚链接建立就FIN也是可以的(当然通常咱们不这样搞,TCP毕竟是比较奢侈的协议)所以这不是由于服务器设置的的time时间造成的。

至于在这个过程中,各种状态的转换,又是另外一个故事了…

END!

上一篇:client offset screen 的区别


下一篇:set @sql=N'q',这里的N是什么意思,加与不加有什么区别