文章分类 -  网络编程实战-陈硕

陈硕网络编程课程--笔记
摘要:设计决定 侵入式或者非侵入式:侵入式是指做成一个库,程序主动调用这个库暴露信息 内部数据。每秒查询 是以当前进程的用户运行?还是以root用户运行(/proc/pid/{cwd, exe, fd} is private) 如何画图 程序只负责收集数据,画图交给别的画图服务器 返回json数据,用Ja 阅读全文
posted @ 2023-04-29 15:54 DavidJIAN 阅读(26) 评论(0) 推荐(0)
摘要:第四个例子:prommon(进程监控) 什么是procmon。是一个类似于top(命令)的工具,带web界面。其实就是一个HTTP Server,通过读取/proc/pid来获取进程信息,再将信息以html形式返回。 /proc: man 5 proc proc(5) - Linux manual 阅读全文
posted @ 2023-04-29 15:54 DavidJIAN 阅读(21) 评论(0) 推荐(0)
摘要:阻塞IO的写(short write) 读:对于非阻塞的读,如果读数据不全,我们需要将数据缓存,等凑够一条完整消息再触发消息处理逻辑。 写: 将需要发送的数据先传到buffer,然后再从buffer发送数据 开始关注POLLOUT事件,需要write时,要先将数据写到buffer 发送策略: 1:当 阅读全文
posted @ 2023-04-29 15:52 DavidJIAN 阅读(28) 评论(0) 推荐(0)
摘要:代码 recipes/netcat-nonblock.py at master · chenshuo/recipes (github.com) def relay(sock): socketEvents = select.POLLIN poll = select.poll() poll.regist 阅读全文
posted @ 2023-04-29 15:50 DavidJIAN 阅读(66) 评论(0) 推荐(0)
摘要:IO复用 IO复用也称:事件驱动、基于事件、reactor。其实它复用的不是IO,而是复用线程,简单理解为让一个线程处理多个IO。注意:这种方式是同步的,不是异步的。 只用一个线程,自带的netcat也是以这种方式实现。 通常IO复用应该搭配非阻塞IO,但为了说明为什么,下面的代码使用阻塞IO(一个 阅读全文
posted @ 2023-04-29 15:49 DavidJIAN 阅读(42) 评论(0) 推荐(0)
摘要:代码 recipes/netcat.cc at master · chenshuo/recipes (github.com) #include "Acceptor.h" #include "InetAddress.h" #include "TcpStream.h" ​ #include <threa 阅读全文
posted @ 2023-04-29 15:43 DavidJIAN 阅读(50) 评论(0) 推荐(0)
摘要:netcat模型 服务端:bind、listen、accept 客户端:解析地址、connect 每当连接建立,客户端和服务端相同 两个并发线程: 从stdin标准输入read,将读到的数据写到socket 从tcp socket read,读到的数据写到stdout标准输出 netcat运行 ct 阅读全文
posted @ 2023-04-29 15:43 DavidJIAN 阅读(146) 评论(0) 推荐(0)
摘要:SIGPIPE 如果程序向已关闭的管道写数据,返回SIGPIPE信号 SIGPIPE信号的默认行为是终止进程。对于命令行通道有好处 gunzip -c huge.log.gz | grep ERROR | head 。(如果管道末端的命令执行失败,那么整个管道的程序将会依次收到SIGPIPE。避免了 阅读全文
posted @ 2023-04-29 15:35 DavidJIAN 阅读(59) 评论(0) 推荐(0)
摘要:从本节开始,实现一个简单的netcat(网络工具中的瑞士军刀) why netcat? netcat 基本功能简介 信号发生器:发送数据。nc > /dev/zero、类似chargen服务 负载:接收数据。nc > /dev/null、类似discard服务 通过dd产生定量数据,通过nc发送测试 阅读全文
posted @ 2023-04-29 15:27 DavidJIAN 阅读(47) 评论(0) 推荐(0)
摘要:一些时间的知识,略 阅读全文
posted @ 2023-04-29 15:20 DavidJIAN 阅读(20) 评论(0) 推荐(0)
摘要:UDP:无连接、不可靠、数据包协议 UDP = IP + port (+ weak checksum) TCP:面向连接、可靠、字节流协议 什么时候用 UDP?使用场景十分受限 并发模型:如何支持并发客户端 TCP:每个客户端一个socket fd,线程不安全 UDP:所有客户端共享一个socket 阅读全文
posted @ 2023-04-29 15:20 DavidJIAN 阅读(19) 评论(0) 推荐(0)
摘要:Santiy checks 同一台主机,时钟差应该接近0 两台主机,时钟差应该对称的(互为相反数) 两台主机都不用NTP:线性增长或减少。可能时钟差会越来越大(一快一慢) 一台主机用NTP,一台不用: 两台主机都使用NTP,但NTP服务器不同 两台主机都使用NTP,且NTP服务器相同 两台主机都使用 阅读全文
posted @ 2023-04-29 15:19 DavidJIAN 阅读(18) 评论(0) 推荐(0)
摘要:背景 仿照NTP原理,测量两台主机的时钟差,但是将原本T2和T3的合作一个时间点(由于T2和T3之间的间隔很小,对于非严格测试可以忽略) 代码分析(UDP, two threads) 消息格式 16B,T1和T2。是主机字节序。发送时客户端将T1填上,服务端接收后,将T2填上。 struct Mes 阅读全文
posted @ 2023-04-29 15:18 DavidJIAN 阅读(34) 评论(0) 推荐(0)
摘要:将一台机器的时间和另一台时间服务器作同步 两个协议Daytime和NTP Daytime协议: 客户端与服务端建立连接,然后服务端向客户端发送一个时间戳,客户端收到后就当这个时间戳为当前时间,误差较大。 NTP协议:基于UDP 为什么测试时间差 检验NTP是否有效 测量延迟 NTP原理 Networ 阅读全文
posted @ 2023-04-29 15:15 DavidJIAN 阅读(43) 评论(0) 推荐(0)
摘要:略 阅读全文
posted @ 2023-04-29 15:13 DavidJIAN 阅读(20) 评论(0) 推荐(0)
摘要:Roundtrip:测试两台主机之间的时钟之差 三个点: 计时,NTP如何工作 Roundtrip UDP vs TCP 的区别 一个时钟 = 一个振荡器 + 一个计数器 当前时间 = count / frequency + offset 阅读全文
posted @ 2023-04-29 15:12 DavidJIAN 阅读(34) 评论(0) 推荐(0)
摘要:本节是关于TTCP的扩展练习的几个点: 添加消息吞吐量测试和延迟 服务端支持并发客户端 多会话/连接,测试TCP公平性 流水线,不是停等 Nagle算法和TCP满开始算法 Nagle促发条件 如何检测TCP错误(TCP内容是否出错) 阅读全文
posted @ 2023-04-29 15:12 DavidJIAN 阅读(24) 评论(0) 推荐(0)
摘要:如果本地tcp程序本地通信,且客户端先于服务端启动,那么有极大可能会产生一种自连接现象。 tcp自连接:tcp连接两段使用了同一端口进行连接,而tcp并没有报错并且连接成功。即localhost:x --> localhost:x 。 代码 下面的代码是python2代码,所以要用python2执行 阅读全文
posted @ 2023-04-29 15:11 DavidJIAN 阅读(311) 评论(0) 推荐(0)
摘要:多维性角度的性能测试研究: 在直线型的阻塞IO示例中提供了三种语言实现的服务端/客户端,我们可以从下面几种角度进行性能的测试。 从机器角度:选取不同的机器分别充当服务器/客户端的角色,进行性能测试。 从语言角度:选取不同的语言实现的服务器/客户端的角色,进行性能测试。 从消息角度:选取不同numbe 阅读全文
posted @ 2023-04-29 15:10 DavidJIAN 阅读(65) 评论(0) 推荐(0)
摘要:背景 本章是基于echo的应用场景来测试,来展示阻塞IO可能会由于协议设计缺陷导致永久阻塞。 echo协议及具体实现 echo协议:客户端往服务端每发送一次数据,服务端就将收到的数据原封不动的发送会客户端。 客户端:recipes/echo_client.cc at master · chenshu 阅读全文
posted @ 2023-04-29 14:57 DavidJIAN 阅读(69) 评论(0) 推荐(0)