这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可 继续阅读 >>


刘生玺 18/09/18 17:21:48
   首先给出OSI 参考模型与TCP/IP协议模型图: 1. 概述: 首先,我们需要知道的是数据分为两种,一种是带内数据,一种是带外数据。带内数据就是我们平常传输或者说是口头叫的数据。带外数据就是我们接下来讲的内容。    许多的传输层都具有带外数据(也称为 经加速数据 )的概念,想法就是连接的某段发生了重要的事情,希望迅速的通知给对端。这里的迅速是指这种通知应该在已经排队了的带内数据之前发送。也就是说,带外数据拥有更高的优先级。带外数据不要求再启动一个连接进行传输,而是使用已有的连接进行传输。    其中,UDP没有实现带外数据(是个极端哦~)    TCP中telnet,rlogin,ftp等应用(除了这样的远程非活跃应用之外,几乎很少有使用到带外数据的地方) 2. TCP 带外数据 2.0 铺垫 : 我们亲爱的 TCP 就位于传输层,下面还有互联网层(主要是IP)与网卡等 。相信学过网络编程的都知道,对于报文的处理,在经过每一层时都会有添加头部和解析头部的操作。 继续阅读 >>


刘生玺 18/09/13 17:36:24
1.非阻塞Connect有什么用? 可以让三路握手的处理等同与一般数据的处理,而不是一直让 connect一直尝试重连或者花费一个RTT时间。而且RTT时间从几毫秒到几秒不等,万一有许多连接,不论是尝试重连还是花费一个RTT时间,都将是致命的延时。 可以使用该技术同时建立多个连接。Web浏览器中常用。 既然使用select等待连接的建立,我们就可以质地不嗯一个时间限制,使得我们能够缩短connect的超时。 2.必须去处理的细节: 处理connect立即建立的情况。(比如我们连接的是同一个主机时) 使用selcet与非阻塞connect的一些注意事项: 2.1. 当连接成功建立后,描述符变为可写。 2.2 当遇到错误时,描述符变为即可写又可读。 3. 两个例子: (1)非阻塞connect:时间获取客户程序 int Connect_nonblock(int sockfd, const SA *saptr, socklen_t salen, int nsec) / 继续阅读 >>


刘生玺 18/09/08 23:33:35
三次握手过程中 TCP 的状态变化 三次握手的过程和本质 三种状态 socket 函数 listen 函数 connect 函数 accept 函数 值-结果参数 connect 函数在三次握手中的返回情况 总结一下近日所学的关于 TCP 建立连接 三次握手 的过程中, TCP 的 状态变化, 以及在这个过程中所用的 socket 函数, 对于各种情况会如何处理 涉及到 connect listen accept 函数 三次握手过程中 TCP 的状态变化 三次握手的过程和本质 如下图, 是一个 TCP 建立和断开连接的过程, 我们今天只讨论建立连接的三次握手过程 主动申请连接的一方(通常为客户端), 发送一个 SYN 报文段, 服务器在收到客户端发来的 SYN 报文段后, 回复一个 SYN 报文段, 并发送一个 ACK 以确认客户端的 SYN, 为了确认服务器的 SYN, 客户端也会回复一个 ACK 经 继续阅读 >>


吕子健 18/09/04 14:58:46
Xv 6 Chapter 0 Operating system interfaces 操作系统的工作是分享电脑资源给多个程序,并且提供一系列服务而不是只让硬件提供。 操作系统通过接口给用户程序提供服务,所以设计一个好的接口就显得很重要。 这里操作系统xv6提供基础的接口,由Ken Thompson 和Dennis Ritchie的操作系统介绍,同时还有模仿Unix的内部设计。 每一个运行的程序叫做进程,他们都有自己的空间,其中包括指令,数据和栈。指令实现了程序的计算功能,数据是那些计算中的变量。而栈则决定了程序的运行。 当一个进程需要请求内核指令的时候,他会在操作系统的接口中请求一个程序。这样的程序叫做系统调用。系统调用进入到内核,内核就提供服务并且返回。因此一个进程在用户内存和内核内存中互相切换。 内核使用CPU的硬件保护机制来保证每个进程在用户内存中运行并只能访问自己的空间。内核运行的时候利用硬件提供的特权来实现这些保护,同时用户程序没有这些优先权。当一个用户程序请求系统调 继续阅读 >>


陈苏扬 18/08/28 15:50:27
   最近学弟学妹们在写聊天室,期间遇到了很多问题,也“逼迫”我们这些大二(其实即将大三)狗考虑了许多以前没有考虑过的东西。现在就着我们小组的聊天室的项目,送给学弟学妹们”几个可能安全的封装函数。“ frist : 保证发送“len”字节到套接字 ssize_t Sendlen(int fd, const void *buf, size_t len, int flags) { ssize_t n = 0; size_t sum = 0; const char *ptr; ptr = (const char *)buf; while (sum < len) { n = send(fd, (void *)ptr, len - sum, flags); if (n < 0) { if (errno == EINTR) n = 0; 继续阅读 >>


刘生玺 18/08/23 16:45:01
1. 基础介绍   最通用的I/O函数,只要设置好参数,read、readv、recv、recvfrom和write、writev、send、sendto等函数都可以对应换成这两个函数来调用。同时,各种输出函数调用也可以替换成sendmsg调用。 #include <sys/socket.h> ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssizt_t sendmsg(int sockfd, struct msghdr *msg, int flags); 大部分参数都在 msghdr结构中 struct iovec { /* Scatter/gather array items */ void *iov_base; /* Starting address */ size_t iov_len; /* Number of bytes to transfe 继续阅读 >>


刘生玺 18/08/22 20:28:00
Preface 总结一下TCP连接的三次握手过程,连接释放的四次挥手过程,以及其原生的缺陷引起的SYN Flood的简单介绍。 目录 Preface 目录 TCP连接建立——三次握手 几个概念 三次握手过程 为什么是三次握手? 缺陷引起的SYN Flood SYN Flood 攻击 SYN Flood 防护措施 TCP连接释放——四次挥手 挥手过程 为什么建立连接是三次握手,关闭连接却是四次握手? 为什么TIME_WAIT状态还需要等2MSL? 关闭TCP连接一定需要4次挥手吗? TCP连接建立——三次握手 几个概念 seq:序号,占4个字节,范围[0,4284967296],由于TCP是面向字节流的,传送的数据流中的每一个字节都编上一个序号,序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。此外序号是循环使用的 ACK: 仅当ACK=1时确认字段才有效,当ACK=0时确认字段无效,并且TCP规定,在连接建立后所有的传送报文段都必须要 继续阅读 >>


冯鑫 18/08/22 00:28:55
一、被中断的系统调用(EINTR)的理解 1. 慢系统调用是? 2. 慢系统调用的类别 3. EINTR产生的原因 5. 一般处理方法 二、SIGCHLD信号的处理 1. SIGCHLD信号的产生 2. SIGCHLD信号的处理 3. 不处理SIGCHLD的后果 三、示例代码 一、被中断的系统调用(EINTR)的理解 1. 慢系统调用是? 慢系统调用指可能永远阻塞的系统调用。 也就是处于阻塞状态的系统调用,如果不收到需要的信息,就会一直阻塞在那里。例如accept:在服务器等待客户端建立连接时,如果没有客户端来请求连接,那么accept就会一直阻塞,直到有客户端请求连接为止。像这种系统调用,就称为慢系统调用。 2. 慢系统调用的类别 对管道的读写 对终端设备设备的读写 对网络连接的读写 …… 值得注意的是,读写磁盘文件一般不会阻塞,一般会返回给调用者(在没有硬件故障的条件下) 3. EINTR产生的原因 当阻 继续阅读 >>


王良 18/08/20 15:11:16
1. 经典“入门级”问题:IO 多路复用是什么意思? 在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流. 发明它的原因,是尽量多的提高服务器的吞吐能力。 是不是听起来好拗口,看个图就懂了.(其实就是一个时分复用)    在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流 那么,“一个请求到来了,nginx使用epoll接收请求的过程是怎样的”, 其实,ngnix会有很多链接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相应的代码处理。 其中,“复用”指的是复用同一个线程。 其实就是操作系统为你提供了一个功能,当你的某个socket可读或者可写的时候,它可以给你一个通知,让你去处理读事件或者写事件。 而这个功能能够通过select/poll/epoll等来使用。这些函数都可以同时监视多个描述符的读写就绪状况,这样,多个描述符的 I/O 操作都能在一个线程内并发交替地顺序完成 。 2.s 继续阅读 >>


刘生玺 18/08/17 21:00:21