码迷,mamicode.com
首页 > 其他好文 > 详细

Tcp之异常

时间:2016-07-30 19:42:24      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

Tcp异常

 

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

 技术分享

 

今天本来做实验观察进程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))

 

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

 技术分享

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

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

 技术分享

共计可用端口为28232

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

 技术分享

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

 

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

 技术分享

 

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

 

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

 

END!

Tcp之异常

标签:

原文地址:http://www.cnblogs.com/changbo/p/5721497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!