TCP relay

TCP中继。

带宽不匹配问题怎么应对?

TCP half-closed

muduo的做法是:
TcpConnection::shutdown() –> shutdown(sockfd, SHUT_WR)
Keep read(sockdf) uitil it return 0, then close(sockfd)

有可能数据没有读完,此时如果使用close关闭连接,那么TCP会发送一个RST到对端,导致对端数据接收不完整。

向一个收到RST报文的连接发送数据,进程会收到SIGPIPE信号。
那么何时会收到RST报文呢?
1. 请求的目标端口未开放,会收到rst段。
2. socket Recv-Q中的数据未完全被应用程序读取,而关闭该socket,会发送rst段。
3. 向已关闭的socket发送数据,对方会发回rst段。
4. SO_LINGER可以控制close的行为,发送rst。

muduo对与发送方向的half-close做了处理,但是对于接收方向,没做处理,因为这个需求并不常见。在read返回0时,无法判断对方时调用的close、还是shutdown

https://www.zhihu.com/question/48871684

如果看到Fin_WAIT_2 CLOSE_WAIT 状态,说明有程序在使用tcp half-close, 只关闭了写端,但是还可以继续接收数据。

non-block TCP relay

通过高水位回掉避免两端接收速度不匹配的情况(阻塞IO不会有这个问题,速度不匹配被自动完成).

tcprelay
$ ./tcprelay 127.0.0.1 3000 2000

客户端
$ pv /dev/zero | nc localhost 2000

服务端 可以限速来模拟一方接受较慢的情况
$ nc -l 3000 | pv -L 1M >/dev/null

61课的调试手段值得学习,gdb 手动调用一个函数,使用命令p

SOCKS4 and SOCKS4a

Non-blocking IO is not the only choice

异步DNS解析有些负责,其实nonblock IO不是唯一的选择。

TLS握手过程:

openssl中这个过程使用的是阻塞IO,使用非阻塞IO将会很复杂。对于天生支持并发的go语言来说,实现这个过程很简单。见go语言的src/crypto/tls/handshake_server.go 中的实现。

Threads vs Events debating for 20 years

关于线程模型和事件驱动模型的争论。

第7层以外的实现

splice可以避免read,write之间的拷贝。


这是从第4层做的relay,相比第7层要简单。

Maglev:Google’s network load balancer.

Bugs

https://github.com/chenshuo/muduo/commit/0502020488bc6d381f76fb6a1616cc58c8ffb903

注意理解这个bug.

TCP的可靠性到底指的是什么(最重要的知识点)

调用完send,马上close为什么不可以?
当你close时,如果内核接收缓冲区还有数据未被应用程序处理,那么tcp协议栈会给对方发送一个rst分节(而不是正常关闭连接的Fin分节),那么此时发送缓冲区的数据就不可能发送到对方了。
正确的做法是,对于发送方,如果你不需要发送数据给对方了,那么就是关闭tcp连接的写端: shutdown(WR), 然后等待recv返回0时,就可以使用close关闭整个连接了。接收方的处理比较简单,发送方使用shutdown(WR),那么接收方recv返回0,那么接收方调用close,发送FIN到接收方。接收方收到FIn,recv返回0,然后close。
总结一句话:read返回0时,可以close。但是遇到恶意的客户端,它一直不close,通常需要超时事件,在调用shutdown(WR),在若干秒之后就强制close。
起始可以通过协议设计解决,协议头设置消息长度,服务器接收到了完整数据后就可以close了。

分布式系统中的partial failure

C++11

注意第一条,list的成员函数size载gcc5之前时o(n), gcc5之后才变成o(1)

PNP : TCP relay Socks4a相关推荐

  1. 57. TCP relay功能描述及Python实现

    处理client与server的带宽不匹配 代码:https://github.com/chenshuo/recipes/blob/master/python/tcprelay2.py 这个版本没有正 ...

  2. Muduo 网络编程示例之十:socks4a 代理服务器

    Muduo 网络编程示例之十:socks4a 代理服务器 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice  t.sina.com.cn/giantchen ...

  3. Metasploit***技巧:后***Meterpreter代理

    前言 Metasploit是一个免费的.可下载的***测试框架,通过它可以很容易地获取.开发并对计算机软件漏洞实施***测试.它本身附带数百个已知软件漏洞的专业级漏洞***测试工具. 当H.D. Mo ...

  4. Meterpreter Guide

    Croxy · 2015/11/04 16:10 由于网上很多文章乱而不全或者过期了 所以打算噜这篇来做个笔记- 方便自己以后查阅:) 0x01 入门篇(生成与接收) 功能介绍 msfpayload和 ...

  5. 渗透测试 ( 3 ) --- Metasploit Framework ( MSF )

    白嫖 :https://zhuanlan.zhihu.com/p/449836479 :http://t.zoukankan.com/hxlinux-p-15787814.html :https:// ...

  6. Notes Twelfth Day-渗透攻击-红队-命令与控制

    ** Notes Twelfth Day-渗透攻击-红队-打入内网(dayu) ** 作者:大余 时间:2020-09-28 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透 ...

  7. 记一次MSF综合应用内网渗透记录

    0x01 前言 随机找的个台湾某越科技集团下的站点作为此次测试目标,只是为了学习下内网渗透和MSF的使用.13年9月份时拿到了一个子域的Webshell权限后就没再继续测试了,当时服务器没有安装Sym ...

  8. 陈硕《网络编程实战》目录

    陈硕<网络编程实战>目录 00.前言 01.网络编程概要.mkv 02.一个TCP的简单实验.mkv 03.课程内容大纲.mkv 04.回顾基础的Sockets API.mkv 05.TT ...

  9. WCF服务编程设计规范(6):队列服务、安全和服务总线

    WCF服务编程设计规范(6):队列服务.安全和服务总线.本节整理队列服务(Queue Servuce).服务安全(Service Security)和服务总线(Service Bus)的设计规范. Q ...

最新文章

  1. SET ROWCOUNT
  2. php 一行代码解决二维数组去重
  3. Java集合:set的遍历方式
  4. 一个好用的 SAP UI5 本地打包(build)工具,自动生成Component-preload.js
  5. 工厂参观记:.NET Core 中 HttpClientFactory 如何解决 HttpClient 臭名昭著的问题
  6. 多项式除法,多项式取模
  7. 2020-python小工能
  8. 解读 2018之Go语言篇(下):明年有哪些值得期待?
  9. c语言 程序统计注释比例,C语言统计单词数量程序 超详解
  10. [c/c++] c 操作mysql数据库
  11. 使用nosetests对webpy程序做单元测试
  12. Python Flask Web 第六课 —— 静态文件
  13. 爬虫:查找自己浏览器headers
  14. scala中的协变和逆变
  15. 论计算机应用技术对企业信息化的影响
  16. 3DMAX 捕捉功能
  17. [Java教程]17.实战,趣味猜拳小游戏
  18. IE浏览器调用jquery需要注意的小问题
  19. Anti-aliasing and Continuity with Trapezoidal Shadow Maps
  20. 一些特殊ACII码的用法 在控制台中覆盖显示、刷新显示和删除字符

热门文章

  1. Start from today
  2. 三星超级本530u3c重装系统。。
  3. BDD之单元测试(三):BDD的官方教程
  4. HTML应用程序(HTML Application)
  5. ☀️在爬完一周的朋友圈后,我发现了.......惊人⚠️秘密
  6. ESXIi 5.0安装过程中粉屏及 提示”can’t detect last level cache”解决方法
  7. vue-quill-editor之图片上传、大小缩放及内容粘贴、长度限制
  8. k3导入账套_如何将金蝶k3老账套套打文件导入到新账套使用
  9. 从零到一的react.js+node.js+express.js+mysql产品开发全流程
  10. Sencha Architect 3破解