Tcp之异常

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!

转载于:https://www.cnblogs.com/changbo/p/5721497.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值