![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
TCP协议
文章平均质量分 60
TCP协议
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
scan724
这个作者很懒,什么都没留下…
展开
-
Connection reset
10.99.32.16 F5下负载的应用都已经关闭,这时候报connect reset。原创 2023-12-08 19:04:17 · 505 阅读 · 0 评论 -
F5后面没有负载,直接rst包
F5负载的服务没启动,telnet会立即被RST包终止。原创 2023-12-08 16:41:59 · 518 阅读 · 0 评论 -
服务端突然断电
192.168.137.10 访问192.168.137.200 ,突然192.168.137.200断电,192。168.137.10还是能看到estab连接。原创 2023-12-01 04:31:15 · 481 阅读 · 0 评论 -
socket Send-Q,Recv-Q 全连接队列打满
Send-Q 表示的则是最大的 listen backlog 数值,LISTEN 状态: Recv-Q 表示的当前等待服务端调用 accept 完成三次握手的 listen backlog 数值,s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字。也就是说,当客户端通过 connect() 去连接正在 listen() 的服务端时,这就就是上面提到的 min(backlog, somaxconn) 的值。原创 2023-11-30 19:49:28 · 694 阅读 · 0 评论 -
Unexpected EOF read on the socket
socket原创 2023-01-29 12:32:30 · 1337 阅读 · 1 评论 -
基于TCP的全链路实现
tcp原创 2022-10-08 08:22:51 · 735 阅读 · 1 评论 -
python socket指定源端口
11原创 2022-08-27 13:05:10 · 1313 阅读 · 0 评论 -
服务端打开12345端口,客户端无法使用12345端口
111原创 2022-08-23 20:10:19 · 884 阅读 · 0 评论 -
telnet 空报文问题
[root@yyjk ~/sbin/socket]#tcpdump -i eth0 '((tcp) and ((tcp port 18080) ))'tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes19:44:45.999022 IP 99.5.101.53.3原创 2022-05-29 19:47:12 · 459 阅读 · 1 评论 -
socket 客户端指定源端口
[oswatch@yyjk ~]$ netstat -nap | grep 645471(Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.)tcp 0 0 20.5.101.31:3366 0.0.0.0:* LISTEN ...原创 2022-05-22 14:07:36 · 1526 阅读 · 0 评论 -
SOCKET listen参数
[oswatch@yyjk ~]$ cat testsocket.py# coding = utf-8# -*- coding:utf-8 -*-import socketimport timeBUFSIZE=1024ip_port = ('2.2.2.2',8081)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1).原创 2022-04-24 20:07:14 · 2812 阅读 · 1 评论 -
socket 多进程通讯模型
多进程处理Socket并发server#!/usr/bin/env python# -*- coding: utf-8 -*-import socketimport threadingimport multiprocessingserver = socket.socket()server.bind(('', 9999))server.listen(5)def readProcess(conn, addr): """ 创建一个新的线程,负责和一个客户端通讯原创 2022-04-23 11:45:26 · 149 阅读 · 1 评论 -
socket 多线程通讯模型
多线程处理Socket并发server#!/usr/bin/env pythonimport socketimport threadingserver = socket.socket()server.bind(('', 9999))server.listen(5)def readThread(conn, addr): """ 创建一个新的线程,负责和一个客户端通讯 :param conn: :param addr: :return: "...原创 2022-04-23 11:43:53 · 874 阅读 · 0 评论 -
socket connect超时
[root@xx~/sbin/socket]#cat test_connnect.pyimport SocketServerimport socketimport timeimport sysreload(sys)print time.ctime()sys.setdefaultencoding('utf-8')import rehost='10.2.200.100'port=300bufsize=10240addr=(host,port)s=socket.socket(socke.原创 2022-04-23 09:34:07 · 3116 阅读 · 0 评论 -
socket写的是本地缓冲区
import socketimport timeimport datetimes = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(60)s.connect(("192.168.137.3",8080))dt = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')print dttime.sleep(10)s.send('aaaaaaaaaaaaaaa'..原创 2022-02-05 18:35:13 · 1082 阅读 · 1 评论 -
socket 网络中断
node2:/root/test#cat t200.py# coding = utf-8# -*- coding:utf-8 -*-import socketimport timeimport datetimeip_port = ('192.168.137.3',8080)BUFSIZE = 9000SEND_BUF_SIZE = 200RECV_BUF_SIZE = 100s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接..原创 2022-02-04 17:23:44 · 382 阅读 · 0 评论 -
服务端处于time_wait ,无法启动
node1:/root/test#cat test.py# coding = utf-8# -*- coding:utf-8 -*-import socketip_port = ('192.168.137.2',8080)BUFSIZE = 10s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 0)s.bind(ip_port原创 2021-05-10 14:34:54 · 332 阅读 · 0 评论 -
connect reset by peer
import socketimport structimport times = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)s.connect(("192.168.137.2",8080))s.send('88888888888822222222222222222222222222222222222222222222222...原创 2021-04-27 11:33:50 · 235 阅读 · 0 评论 -
TCP长连接,网络断开,客户端接收超时
# -*- coding: utf-8 -*-import socketimport times = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(3)s.connect(("192.168.137.2",8080))while True:try: s.send('aaaaaaaaaaaaaaa') time.sleep(1) print s.recv(100)except: print '...原创 2021-04-13 14:29:01 · 441 阅读 · 0 评论 -
发送数据的时候连接被关闭
node2:/root/test#cat t18.pyimport socket# import INimport structb=2def getnum(x): b='2' for y in range(x): #print y b=b+'2' if len(b) == x: #print '-------------' #print len(b) retur...原创 2021-01-13 13:30:23 · 185 阅读 · 0 评论 -
Connection reset by peer
node2:/root/test#cat connect2.py# -*- coding: utf-8 -*-import socketimport timeimport datetimes = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(30)s.connect(("192.168.137.2",8080))print datetime.datetime.now()s.send('1111111111111..原创 2021-01-13 12:36:03 · 277 阅读 · 1 评论 -
Connection refused 对端服务没启动
Connection refused 对端服务没启动node2:/root/test#cat connect1.py# -*- coding: utf-8 -*-import socketimport times = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(3000)s.connect(("192.168.137.101",8080))s.send('aaaaaaaaaaaaaaa')print s.re..原创 2021-01-13 11:55:12 · 352 阅读 · 0 评论 -
epoll 实现原理
为什么会有epoll这个技术的产生呢?select 和poll 函数,这两系统函数每次调用都需要我们提供给它所要需要侦听的socket文件描述符集合select 和poll 函数的返回值是个int整型值,只能代表有几个socket就绪或者是有错误了它没办法表示出是哪个 具体是哪几个socket就绪了这就导致我们程序被唤醒之后,它还需要新一轮系统调用去检查哪个socket是就绪状态的 ,然后再进行socket数据处理逻辑eventpoll的结果,说下这个结构,它主要是两..原创 2020-12-24 09:57:25 · 105 阅读 · 0 评论 -
为什么会有epoll技术
为什么会有epoll这个技术的产生呢?select 和poll 函数,这两系统函数每次调用都需要我们提供给它所要需要侦听的socket文件描述符集合select 和poll 函数的返回值是个int整型值,只能代表有几个socket就绪或者是有错误了它没办法表示出是哪个 具体是哪几个socket就绪了这就导致我们程序被唤醒之后,它还需要新一轮系统调用去检查哪个socket是就绪状态的 ,然后再进行socket数据处理逻辑...原创 2020-12-24 09:40:20 · 146 阅读 · 0 评论 -
讲讲select函数
操作系统kernel提供的这个select函数需要传递检查的socket集合,其实就是需要检查的fd(文件描述符)因为咱们的程序吗 都是运行在linux或者unix操作系统上这种操作系统,一切皆文件,socket也不例外这里传递的fd其实就是文件系统中对应socket生产的文件描述符号(id)select函数被调用以后,首先会按照fd集合,去检查内存中的socket套接字状态然后检查完一遍后,如果有就绪状态的socket那么直接返回,不会堵塞当前调用线程否则,就说明当..原创 2020-12-24 09:33:27 · 155 阅读 · 0 评论 -
NIO 靠什么解决C10K
NIO 靠什么解决C10KNIO包给我们提供一套非阻塞的接口这样就不需要我们为每一个c/s长连接,保持一个单独的处理线程了堵塞IO 之所以需要给每个socket长连接,指定一个线程就是因为它堵塞嘛现在这个NIO API 它具备非堵塞特性了,就可以用一个线程去检查N个socketNIO包给我们提供了一个选择器selector然后我们需要把检查的socket注册到这个selector种,然后主线程堵塞在selector#select方法里面当选择器发现socket...原创 2020-12-24 09:16:07 · 134 阅读 · 0 评论 -
C10K问题
BIOBIO中的B,它表示的就是blocking 就是堵塞作为服务端开发的话,我们使用ServerSocket 绑定完端口号后我们会进行监听该端口,等待accept事件,accept会堵塞当前主线程当我们收到accept事件时,程序就会拿到一个客户端与当前服务器连接的socket针对这个socket我们可以进行读写,但是呢 这个socket读写方法都是会堵塞当前线程的一般我们会使用多线程的方式来进行C/S交互,但是这样就很难做到C10K比如说1W个客户端就需要服务端1W原创 2020-12-24 09:01:19 · 112 阅读 · 0 评论 -
多路复用实现:
多路复用实现:select 原理:需要检查socket的集合,其实就是检查fdlinux 系统上,一切皆文件,socket也不列外操作系统这个select 函数被调用以后,首先会按照fd集合,去检查内存中的socket套接字状态检查完一遍之后,如果有就绪状态的socket那么直接返回,不会堵塞当前调用线程否则 就说明当前指定fd集合对应的socket没有就绪状态那么就要堵塞当前调用线程了,直到有某个socket有数据之后,才唤醒线程select 函数监听soc...原创 2020-12-15 14:52:18 · 255 阅读 · 0 评论 -
NIO 怎么解决C10K问题
NIO 怎么解决C10K问题NIO 提供一套非堵塞接口这样就不需要我们为每个C/S长连接,保留一个单独的处理线程了堵塞I/O 之所以需要给每个socket长连接,指定一个线程,就因为堵塞吗现在这个NIO API 它具备非堵塞特性了,就可以用1个线程去检查N个socket在JAVA层面,NIO包给我们提供了一个选择器SELECTOR 我们需要把检查的SOCKET注册到这个selector中,然后主线程堵塞在select方法里 ,当选择器发现socket就绪时,某个socke...原创 2020-12-15 14:39:56 · 208 阅读 · 1 评论 -
BIO C10K问题
BIOblocking io BIO 缺点:accept事件,会堵塞当前主线程sockt 堵塞当前线程C10K 1W个线程支持 CPU 上下文切换堵塞IO 对每个socket 单独一个线程原创 2020-12-15 10:59:02 · 212 阅读 · 1 评论 -
fin_wait2 , close_wait
服务端:node1:/root/test#cat t200.py# coding = utf-8# -*- coding:utf-8 -*-import socketimport timeimport datetimeip_port = ('192.168.137.2',8080)BUFSIZE = 9000SEND_BUF_SIZE = 200RECV_BUF_SIZE = 100s=socket.socket(socket.AF_INET,socket.SOCK_STREAM..原创 2020-11-19 15:14:02 · 114 阅读 · 0 评论 -
socket 排队模拟
node2:/root/test#python connect2.py 2020-08-27 18:10:24.432583response:272020-08-27 18:10:41.450343node2:/root/test#python connect3.py 2020-08-27 18:10:27.734442response:192020-08-27 18:10:58.470195node1:/root/test#python t200.py Buffer size [.原创 2020-11-30 20:18:30 · 246 阅读 · 0 评论 -
socket如果一个连接被占用,其他连接发回超时
node1:/root/test#cat t200.py # coding = utf-8# -*- coding:utf-8 -*-import socketimport timeip_port = ('192.168.137.2',8080)BUFSIZE = 9000SEND_BUF_SIZE = 2RECV_BUF_SIZE = 1s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字print("Buffer siz.原创 2020-07-16 09:00:30 · 254 阅读 · 0 评论 -
tcp keepalive
tcp keepalive 检测实际断掉的连接,踢出掉有问题的连接用于维持与客户端间的防火墙有活跃网络包 http keepalive 短链接变为长连接复用原创 2020-07-07 21:11:48 · 142 阅读 · 0 评论 -
Nagle算法
原创 2020-07-07 16:09:50 · 139 阅读 · 0 评论 -
接收窗口大小
发送窗口与接收窗口一个非常容易混淆的概念是「发送窗口」和「接收窗口」,很多人会认为接收窗口就是发送窗口。先来问一个问题,wireshark 抓包中显示的 win=29312 指的是「发送窗口」的大小吗?当然不是的,其实这里的 win 表示向对方声明自己的接收窗口的大小,对方收到以后,会把自己的「发送窗口」限制在 29312 大小之内。如果自己的处理能力有限,导致自己的接收缓冲区满,接收窗口大小为 0,发送端应该停止发送数据。...原创 2020-07-07 10:44:22 · 2966 阅读 · 0 评论 -
net.ipv4.tcp_syn_retries
验证 net.ipv4.tcp_syn_retries:node2:/root/test#sysctl -p |grep -i synerror: "net.bridge.bridge-nf-call-ip6tables" is an unknown keyerror: "net.bridge.bridge-nf-call-iptables" is an unknown keyerror: "net.bridge.bridge-nf-call-arptables" is an unknown .原创 2020-07-06 21:33:42 · 816 阅读 · 0 评论 -
模拟半连接占满
半连接:半连接队列(Incomplete connection queue),又称 SYN 队列全连接队列(Completed connection queue),又称 Accept 队列服务端node1:/root/test#netstat -an | grep 8080tcp 0 0 192.168.137.2:8080 0.0.0.0:* LISTEN tcp 0 0 1.原创 2020-07-01 21:46:52 · 227 阅读 · 0 评论 -
net.ipv4.tcp_max_tw_buckets=10
这个参数表示操作系统允许TIME_WAIT套接字数量的最大值, 如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为 180000,过多的TIME_WAIT套接字会使Web服务器变慢。node2:/root/test#sysctl -w net.ipv4.tcp_max_tw_buckets=10net.ipv4.tcp_max_tw_buckets = 10node2:/root#netstat -na | grep 8080 tcp 0 .原创 2020-07-01 16:06:48 · 2249 阅读 · 0 评论 -
tcp_fin_timeout
node2:/root/test#sysctl -w net.ipv4.tcp_fin_timeout="1"net.ipv4.tcp_fin_timeout = 1node2:/root/test#time python close1.py Traceback (most recent call last): File "close1.py", line 9, in <module> s.recv(999)socket.timeout: timed outreal 0.原创 2020-07-01 15:50:12 · 905 阅读 · 0 评论