文章目录什么是窗口窗口的目的滑动窗口发送窗口示意图ACK 里的重要信息如何滑动窗口大小和缓冲区的关系 什么是窗口 窗口是包含在 TCP 头里的一个16位的字段 窗口是一个已被发送方注入但还没有完成确认 (比如, 发送方已经发送, 却还没有收到 ACK) 的分组的集合, 窗口大小就是这个分组的数量. 滑动窗口在发送方和接收方又分为接收窗口和发送窗口 发送窗口记录了哪些分组可以被释放, 哪些分组正在等待 ACK. 和哪些分组还不能在排队等待发送 接收窗口记录着哪些分组已经被接收和确认, 哪些分组是是接下来期望收到的 (和分配多少内存来保存他们), 以及哪些分组即使被接受也会因为内存的限制而被抛弃 窗口的目的 我们知道数据的传输建立在网络层之上, 但是网络层是不可靠的, 他不关心数据是否已经正确到达对端, 上一篇说过 TCP 是建立在不可靠传输上的可靠协议 所以 TCP 要解决 : 数据包的丢失 数据包没有按顺序到达对端 (接收方收到的是乱序的) 网络实际的传输带宽和两端处理数据速度的不理想而导致可能出 继续阅读 >>


吕子健 18/11/29 23:22:55
文章目录前言TCP 连接的建立三次握手什么是三次握手三次握手的本质为什么是三次握手打个比方, 就像打电话四次挥手为什么是四次挥手TCP 状态转换状态含义listen 的 backlog 参数与 TCP 状态TIME_WAIT 参数设置 SO_REUSEADDR重置报文段 RST 前言 TCP/IP 的学习使我们避不开的 一直以来记得笔记什么的也都是在云笔记上,或者在书上, 比较杂乱, 现在写一个系列博客也算是一个归纳总结把 以后复习也方便 TCP 连接的建立 我们知道一个 TCP 连接是由一个四元组构成的, 分别是 dest IP dest port source IP source port 更准确地说, 一个 TCP 连接是由一对端点或套接字构成, 其中通信的每一端都由一对 (IP 地址, 端口号 ) 以标识 客户端和服务器之间建立可靠的 TCP 连接的过程是 : 客户端发送 SYN 消息 服务器回复 SYN + ACK 应答表示收到了 客户端以 ACK 响应 这个过程被形象的称为三次 继续阅读 >>


吕子健 18/11/22 20:26:27
学习epoll反应堆发现网上的epoll反应堆都是同一份代码框架… 自己理解、梳理一遍,思路在注释里 #include <stdlib.h> #include <stdio.h> #include <stdio.h> #include <sys/socket.h> #include <sys/epoll.h> #include <arpa/inet.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <time.h> #define MAX_EVENTS 1024 #define BUFLEN 128 #define SERV_PORT 8080 /* * status:1表示在监听事件中,0表示不在 * last_act 继续阅读 >>


吕子健 18/06/02 21:03:51
DFS深度优先遍历 深度遍历就是在图中从一个顶点开始,按照一个规则不重复地走下去。就是不撞南墙不回头一样。假如从A顶点开始,按照一个规则去走(假如我们按照一直字典顺序走)那么就从A走到B再从B走到了C,走到C后再按照字典顺序的时候,发现A已经走过,那么此时就退回到C点,选择另一个D走下去。就和树的前序遍历是一样的。 实现方式 1、递归实现(通过邻接矩阵来实现) void DFS(MGrap G. int i) { int j = 0; visited[i] = 1; count++; for(j=0; j<G.numVertexes; j++) { if(G.arc[i][j]==1 && !visited[j])//i和j有关系相邻,并且j顶点没有被访问过 { DFS(G, j); } } } void dfs(MGrap G,int v) 继续阅读 >>


胡佳露 17/12/04 11:56:54
什么是 HTML? HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (markup language) 标记语言是一套标记标签 (markup tag) HTML 使用标记标签来描述网页 HTML 标签 HTML 标记标签通常被称为 HTML 标签 (HTML tag)。 HTML 标签是由尖括号包围的关键词,比如 <html> HTML 标签通常是成对出现的,比如 <b> 和 </b> 标签对中的第一个标签是开始标签,第二个标签是结束标签 开始和结束标签也被称为开放标签和闭合标签 HTML 文档 = 网页 HTML 文档描述网页 HTML 文档包含 HTML 标签和纯文本 HTML 文档也被称为网页 Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标 继续阅读 >>


冯鑫 17/09/08 22:01:14
学习第七章的时候,提到了进程和线程的区别。线程是计算机中独立运行的最小单位,运行时占用很少的系统资源。在用户看来,多个线程是同时执行,但从操作系统调度来看,各个线程是交替执行。系统不停的在各个线程之间切换,每个线程只有在系统分配给它的时间片内才能取得CPU的控制权,执行线程中的代码。 线程创建 如果在主线程里面创建线程,程序就会在创建线程的地方产生分支,变成两个程序执行。这似乎和躲进程一样,其实不然。子进程是通过拷贝父进程的地址空间来实现的;而线程与进程内的线程共享程序代码,一段代码可以同时被多个线程执行。线程创建pthread_create(); 线程终止 Linux下有两种方式可以使线程终止。第一种是通过return从线程函数返回,第二种是通过调用函数pthread_exit()使线程退出,pthread_exit在头文件 pthrea.h中声明。 有两种特殊情况需要注意,一种情况是在主线程中,如果从main函数返回或是调用了exit退出主进程,则整个进程将终止。此 继续阅读 >>


陈苏扬 17/08/03 17:08:08
进程控制 Linux进程 1.进程是一个动态的实体,是程序一次执行的过程。进程和程序的区别在于进程是动态的,程序是静态的,进程是运行中的程序,程序是一些保存在硬盘上的可执行代码。 线程是比进程更小的能独立运行的基本单位,线程是在进程内部。一个线程可以创建和撤销另一个线程,同一个进程中可以有多个线程并行执行。 2.Linux操作系统中,每个进程都是通过唯一的进程id标识的。而这个id是一个非负数,每个进程除了id还有其他的标识信息,可以通过相应的函数获得。这些函数在unistd.h头文件中。 pid_t getpid(id) 获得进程id pdi_t getppid(id) 获得进程父进程的id pid_t getuid() 获得进程的实际用户id pid_t geteuid() 继续阅读 >>


陈苏扬 17/07/27 15:25:40
1.评估方法 留出法:分层采样,全部样本的x%用来作为训练样本,1-x%用来作为测试样本 交叉验证:K折交叉验证,样本分成k份,每次按顺序取k-1份训练样本,生另一分作为测试样本。 自助法:随机取样,每次随机挑出样品一个放入样品级,重复m次,得到训练集合 ,剩下没有被抽中的样品作为测试。 2.性能度量 A. 错误率 精度 x/m 1-x/m x :预测错误的样本数量 m:样本的全部数量 B. 查准率和查全率 真实 预测的正例 预测的反例 正例 TP(真正例) FN(假反例子) 反例 FP(假正例) TN(真反例) P(查准率) = TP / (TP+FP) R(查全率) = TP/(TP+FN) C. ROC 和AUC ROC :以FPR 和 TPR 为x,和y轴绘制的曲线,下方的面积是AUC。 FPR:FP/(TN+FP) TPR:TP/(TP+FN) 绘制ROC:这里写链接内容 D. 敏感代价错误率 P = (F(co 继续阅读 >>


朱紫钰 16/11/27 17:26:43
一.Java NIO 核心组成部分: Channels Buffers Selectors 所有的IO在NIO中都从一个Channel开始,Channel有点像流,数据可以从Channel读取到Buffer中,也可以从Buffer写到Channel中. Channel和Buffer有几种类型: FileChannel. 从文件中读写数据 DatagramChannel 能通过UDP读写网络中的数据. SocketChannel SocketChannel 能通过TCP读写网络中的数据. ServerSocketChannel 可以监听新进来的TCP连接,像Web服务器那样,对每一个新进来的连接都会创建一个SocketChannel. Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道,但流的读写通常是单向的. 通道可以异步地的读写. 通道中的数据总是先读到一个Buffer,或者总是要从一个Buffer中写入. 二.Buffer 1.基本用法(四个步骤): 继续阅读 >>


杨龙飞 16/09/19 16:26:11
核心标签库: 流程处理标签: <c:if>:这个标签可以根据某个表达式的结果,决定是否显示Body内容。<c:if>标签的test属性中可以放置EL表达式,如果表达式的结果是true,则会将<c:if>Body输出。 <c:chosse>、<c:when>、<c:otherwise>:这些标签在某些条件成立时显示某些内容,不成立时就显示另一些内容。<c:when>及<c:otherwise>必须放在<c:choose>标签中,当<c:when>的test运算结果为true时,会输出<c:when>的Body内容,而不理会<c:otherwise>的内容,当<c:choose>中包含多个<c:when>标签,此时,从上 往下进行测试,如果有个<c:when>的test运算结果为true就输出其Body内容,之后的<c:when>就不会做测试。当所有的<c:whe 继续阅读 >>


朱新全 16/08/16 15:20:57