随笔分类 -  网络编程

accept 和 connect API深入 重点accept阻塞和非阻塞问题学习
摘要:https://www.cnblogs.com/zhangkele/p/10284234.html 阅读全文

posted @ 2019-02-11 15:43 zhangkele 阅读(358) 评论(0) 推荐(0)

几种IO情况的学习和总结 关于 =====阻塞/非阻塞以及同步/异步区别
摘要:同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。 在进行解释之前,首先要说明几个概念:- 1.用户空间和内核空间- 2.进程切换- 3.进程的阻塞- 4.文件描述符- 5.缓存 I/O 用户空间与内核空间 现 阅读全文

posted @ 2019-02-11 14:12 zhangkele 阅读(453) 评论(0) 推荐(1)

tcp头和ip头 图文简介和简要说明
摘要:https://blog.csdn.net/soullsj/article/details/80304124 阅读全文

posted @ 2019-02-10 11:12 zhangkele 阅读(226) 评论(0) 推荐(0)

Nginx 为什么要延迟关闭
摘要:防止 Nginx处理完后调用close关闭连接后 ,若缓冲区任然接收到客户端发来的内容 ,则服务器会向客户端发送RST包关闭连接,导致客户端由于收到了RST而忽略了 http response (当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号); 上面Ngi 阅读全文

posted @ 2019-02-01 02:34 zhangkele 阅读(1340) 评论(0) 推荐(0)

未整理的笔记
摘要:上面的三种方法 只是用了 调节队列的大小解决 和回复RST方式解决 但是未完全的解决大量sys报文的攻击 1 正常流程 不解释 自己理解 2 应用程序过慢 当accept过慢时候 ACCEPT队列 容易满 那么recv ACK就会不成功 (所以将socket 在accept时候设置为 noblock 阅读全文

posted @ 2019-01-28 02:10 zhangkele 阅读(140) 评论(0) 推荐(0)

tcp中 fast_open 学习 nginx 13年的版本开始支持该功能
摘要:https://www.cnblogs.com/lanjianhappy/p/9868622.html 三次握手的过程中,当用户首次访问server时,发送syn包,server根据用户IP生成cookie,并与syn+ack一同发回client; client再次访问server时,在syn包携带 阅读全文

posted @ 2019-01-27 00:28 zhangkele 阅读(555) 评论(0) 推荐(0)

TCP/IP协议中几个缩写词的含义 MSL、TTL和RTT 报文最大生存时间 跳数(即生存时间) cs往返时间 MSL要大于TTL知道为什么吗?
摘要:MSL、TTL和RTT简介 1、MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文(segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各 阅读全文

posted @ 2019-01-26 15:31 zhangkele 阅读(12657) 评论(1) 推荐(1)

多线程中共享变量是加锁还是原子操作还是不加锁问题的学习
摘要:使用原子操作 优先于 加锁 加锁效率下降明显对于多线程访问 共享变量的时候! 附录上云服务器上的learing/1-20的代码。。。。。。。。 阅读全文

posted @ 2019-01-21 00:27 zhangkele 阅读(679) 评论(0) 推荐(0)

常见开源服务器模型学习 未完待续
摘要:https://blog.csdn.net/answer3y/article/details/48276687 本文要描述的主要有如下6种模型:1)epoll 1线程(listen+accept+epoll_wait+处理) 模型 .................................. 阅读全文

posted @ 2019-01-17 19:50 zhangkele 阅读(356) 评论(0) 推荐(0)

protobuf在c++的使用方法以及在linux安装
摘要:把proto文件转化成c++代码.执行下面命令. 阅读全文

posted @ 2019-01-17 02:14 zhangkele 阅读(1894) 评论(0) 推荐(0)

pthread_cond_wait函数的学习以及其他
摘要:pthread_cond_wait() 前使用 while 讲解2009-10-27 9:33LINUX环境下多线程编程肯定会遇到需要条件变量的情况,此时必然要使用pthread_cond_wait()函数。但这个函数的执行过程比较难于理解。 pthread_cond_wait()的工作流程如下(以 阅读全文

posted @ 2019-01-02 22:55 zhangkele 阅读(466) 评论(0) 推荐(0)

TCP Nagle算法以及延迟确认(即延迟回复ACK)的学习
摘要:TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。 (一个连TCP接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。 Nagle算法就 阅读全文

posted @ 2018-12-07 01:27 zhangkele 阅读(1679) 评论(0) 推荐(0)

tcp/ip 性能优化问题的思考学习
摘要:首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} 在应用程序中我们用到的Data 阅读全文

posted @ 2018-12-05 11:14 zhangkele 阅读(724) 评论(0) 推荐(0)

IP分片 与 TCP分段的区别 !!!!careful========以及udp中一个包大小究竟为多大合适 ==========三次握手四次挥手细节
摘要:首先声明:TCP分片应该称为TCP分段 TCP/IP详解--TCP的分段和IP的分片 分组可以发生在运输层和网络层,运输层中的TCP会分段,网络层中的IP会分片。IP层的分片更多的是为运输层的UDP服务的,由于TCP自己会避免IP的分片,所以使用TCP传输在IP层都不会发生分片的现象。 我们在学习T 阅读全文

posted @ 2018-11-03 01:15 zhangkele 阅读(5205) 评论(0) 推荐(0)

Linux IPC 共享内存
摘要:共享内存 共享内存(shared memory)是最简单的Linux进程间通信方式之一。 使用共享内存,不同进程可以对同一块内存进行读写。 由于所有进程对共享内存的访问就和访问自己的内存空间一样,而不需要进行额外系统调用或内核操作,同时还避免了多余的内存拷贝,所以,这种方式是效率最高、速度最快的进程 阅读全文

posted @ 2018-10-18 15:24 zhangkele 阅读(418) 评论(0) 推荐(0)

tcp 粘包 和 TCP_NODELAY 学习
摘要:TCP通信粘包问题分析和解决 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的 阅读全文

posted @ 2018-08-17 16:58 zhangkele 阅读(3263) 评论(0) 推荐(1)

分解抓取的包文件代码实现学习
摘要:前段时间接到一个公司关于解析pacp文件的培训(我是被培训的),在完成了一部分的功能后决定把一些关于pcap文件的了解记录到博客中。 初识Pcap文件 在开始读取pcap文件之前,先让我们来看看Pcap文件的大概结构。 如上图所示在一个Pcap文件中存在1个Pcap文件头和多个数据包,其中每个数据包 阅读全文

posted @ 2018-08-02 21:02 zhangkele 阅读(335) 评论(0) 推荐(0)

c++ 封装线程库 3
摘要:1. 继承与重写run方法 我们封装了Thread类,并设置成员函数run()为纯虚函数,因此我们使用类继承,并重写run方法: 如果用多态的话,可以用vector来保存父类指针,并初始化指向子类引用,不过使用vector<Thread*>我们时常会有困惑,那就是vector作为栈上变量,其程序结束 阅读全文

posted @ 2018-07-26 18:40 zhangkele 阅读(424) 评论(0) 推荐(0)

c++ 封装线程库 2
摘要:1.2线程回收: 首先得知道线程的两个状态: Joinable Detached 简单理解,如果一个线程是joinable的状态,那么这样的线程,就必须使用pthread_join来回收,否则程序结束时,线程所占用的资源不会释放,就会造成内存泄漏。 我们通常在主进程中会阻塞调用pthread_joi 阅读全文

posted @ 2018-07-25 20:44 zhangkele 阅读(554) 评论(0) 推荐(0)

c++ 封装线程库 1
摘要:1.Pthread条件变量简介 条件变量也是线程间同步一个重要的内容,如果说互斥是一个种竞争关系,那么条件变量用于协调线程之间的关系,是一种合作关系。 条件变量的应用很多,例如:BlockingQueue,ThreadPool等。 2. 条件变量的封装 其实就是对pthread_cond_t和相关函 阅读全文

posted @ 2018-07-25 20:20 zhangkele 阅读(925) 评论(0) 推荐(0)

导航