
TCP协议
文章平均质量分 57
TCP协议
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
scan724
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
TCP报文分组
import socketimport timeimport syss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect(('192.168.137.200', 8090))s.settimeout(5)str1='111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa原创 2025-07-31 11:47:06 · 38 阅读 · 0 评论 -
全连接队列
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字。if len(msg)==0:break #如果 不加,已连接的客户端突然断开,recv不再阻塞,发生死循环。msg = conn.recv(BUFSIZE) #接受消息的内容。conn,addr = s.accept() #接受客户端连接。#conn.send(msg.upper())#服务端发送消息。s.listen(5)#监听链接。s.close()#关闭套接字。原创 2025-04-03 11:36:49 · 85 阅读 · 0 评论 -
全连接队列
上面看到的第二列Send-Q 值是5,表示第三列的listen端口上的全连接队列最大为5,第一列Recv-Q为全连接队列当前使用了多少。原创 2025-02-22 16:32:03 · 71 阅读 · 0 评论 -
模拟半连接队列满
这时服务端这边的 TCP 从 listen 状态变为 SYN_RCVD (SYN Received),此时会将这个连接信息放入「半连接队列」,半连接队列也被称为 SYN Queue,存储的是 "inbound SYN packets"。if len(msg)==0:break #如果 不加,已连接的客户端突然断开,recv不再阻塞,发生死循环。可以观察到 SYN_RECV 状态的连接个数的从 0 开始涨到 7,就不再上涨了,这里的 7 就是半连接队列的大小。s.listen(5)#监听链接。原创 2025-02-22 16:20:11 · 67 阅读 · 0 评论 -
TCP四次挥手
如果第2次挥手的ack和第3次挥手的fin之间如果没有数据需要传输的话,是可以合并为一个包(fin+ack)来传输的,也就是压缩成三次挥手。原创 2025-02-22 15:59:11 · 107 阅读 · 0 评论 -
TCP3次握手
111原创 2025-02-22 13:17:24 · 43 阅读 · 0 评论 -
抓包分析请求和响应
请求报文响应报文。原创 2025-02-22 12:24:57 · 53 阅读 · 0 评论 -
socket客户端接收超时
服务端突然网络中断,客户端接收超时。原创 2024-12-09 13:45:51 · 151 阅读 · 0 评论 -
服务端响应后,由于网络问题客户端接收超时
if len(msg)==0:break #如果 不加,已连接的客户端突然断开,recv不再阻塞,发生死循环。s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字。msg = conn.recv(BUFSIZE) #接受消息的内容。#conn.send(msg.upper())#服务端发送消息。conn,addr = s.accept() #接受客户端连接。conn.close()#关闭链接。s.close()#关闭套接字。原创 2024-12-06 14:23:40 · 389 阅读 · 0 评论 -
服务端主动关闭连接
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字。msg = conn.recv(BUFSIZE) #接受消息的内容。conn,addr = s.accept() #接受客户端连接。#conn.send(msg.upper())#服务端发送消息。print('接到来自%s的链接'%addr[0])s.bind(ip_port)#绑定地址。conn.close()#关闭链接。s.listen(5)#监听链接。s.close()#关闭套接字。原创 2024-12-06 13:29:39 · 85 阅读 · 0 评论 -
服务端关闭连接后,客户端继续读超时
if len(msg)==0:break #如果 不加,已连接的客户端突然断开,recv不再阻塞,发生死循环。s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字。msg = conn.recv(BUFSIZE) #接受消息的内容。#conn.send(msg.upper())#服务端发送消息。conn,addr = s.accept() #接受客户端连接。conn.close()#关闭链接。s.close()#关闭套接字。原创 2024-12-06 13:16:20 · 112 阅读 · 0 评论 -
Connection reset
10.99.32.16 F5下负载的应用都已经关闭,这时候报connect reset。原创 2023-12-08 19:04:17 · 710 阅读 · 0 评论 -
F5后面没有负载,直接rst包
F5负载的服务没启动,telnet会立即被RST包终止。原创 2023-12-08 16:41:59 · 673 阅读 · 0 评论 -
服务端突然断电
192.168.137.10 访问192.168.137.200 ,突然192.168.137.200断电,192。168.137.10还是能看到estab连接。原创 2023-12-01 04:31:15 · 528 阅读 · 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 · 1247 阅读 · 0 评论 -
Unexpected EOF read on the socket
socket原创 2023-01-29 12:32:30 · 1842 阅读 · 1 评论 -
基于TCP的全链路实现
tcp原创 2022-10-08 08:22:51 · 787 阅读 · 1 评论 -
python socket指定源端口
11原创 2022-08-27 13:05:10 · 1497 阅读 · 0 评论 -
服务端打开12345端口,客户端无法使用12345端口
111原创 2022-08-23 20:10:19 · 1126 阅读 · 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 · 519 阅读 · 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 · 1678 阅读 · 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 · 2890 阅读 · 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 · 199 阅读 · 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 · 917 阅读 · 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 · 3234 阅读 · 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 · 1118 阅读 · 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 · 428 阅读 · 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 · 460 阅读 · 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 · 312 阅读 · 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 · 522 阅读 · 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 · 228 阅读 · 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 · 382 阅读 · 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 · 416 阅读 · 0 评论 -
epoll 实现原理
为什么会有epoll这个技术的产生呢?select 和poll 函数,这两系统函数每次调用都需要我们提供给它所要需要侦听的socket文件描述符集合select 和poll 函数的返回值是个int整型值,只能代表有几个socket就绪或者是有错误了它没办法表示出是哪个 具体是哪几个socket就绪了这就导致我们程序被唤醒之后,它还需要新一轮系统调用去检查哪个socket是就绪状态的 ,然后再进行socket数据处理逻辑eventpoll的结果,说下这个结构,它主要是两..原创 2020-12-24 09:57:25 · 140 阅读 · 0 评论 -
为什么会有epoll技术
为什么会有epoll这个技术的产生呢?select 和poll 函数,这两系统函数每次调用都需要我们提供给它所要需要侦听的socket文件描述符集合select 和poll 函数的返回值是个int整型值,只能代表有几个socket就绪或者是有错误了它没办法表示出是哪个 具体是哪几个socket就绪了这就导致我们程序被唤醒之后,它还需要新一轮系统调用去检查哪个socket是就绪状态的 ,然后再进行socket数据处理逻辑...原创 2020-12-24 09:40:20 · 207 阅读 · 0 评论 -
讲讲select函数
操作系统kernel提供的这个select函数需要传递检查的socket集合,其实就是需要检查的fd(文件描述符)因为咱们的程序吗 都是运行在linux或者unix操作系统上这种操作系统,一切皆文件,socket也不例外这里传递的fd其实就是文件系统中对应socket生产的文件描述符号(id)select函数被调用以后,首先会按照fd集合,去检查内存中的socket套接字状态然后检查完一遍后,如果有就绪状态的socket那么直接返回,不会堵塞当前调用线程否则,就说明当..原创 2020-12-24 09:33:27 · 199 阅读 · 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 · 166 阅读 · 0 评论 -
C10K问题
BIOBIO中的B,它表示的就是blocking 就是堵塞作为服务端开发的话,我们使用ServerSocket 绑定完端口号后我们会进行监听该端口,等待accept事件,accept会堵塞当前主线程当我们收到accept事件时,程序就会拿到一个客户端与当前服务器连接的socket针对这个socket我们可以进行读写,但是呢 这个socket读写方法都是会堵塞当前线程的一般我们会使用多线程的方式来进行C/S交互,但是这样就很难做到C10K比如说1W个客户端就需要服务端1W原创 2020-12-24 09:01:19 · 151 阅读 · 0 评论 -
多路复用实现:
多路复用实现:select 原理:需要检查socket的集合,其实就是检查fdlinux 系统上,一切皆文件,socket也不列外操作系统这个select 函数被调用以后,首先会按照fd集合,去检查内存中的socket套接字状态检查完一遍之后,如果有就绪状态的socket那么直接返回,不会堵塞当前调用线程否则 就说明当前指定fd集合对应的socket没有就绪状态那么就要堵塞当前调用线程了,直到有某个socket有数据之后,才唤醒线程select 函数监听soc...原创 2020-12-15 14:52:18 · 313 阅读 · 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 · 262 阅读 · 1 评论