服务器端

大厂面试中三次握手延伸出来n连发你受得了?

别说谁变了你拦得住时间么 提交于 2020-01-20 03:13:34
秋招面试也不记得多少家公司会有这个面试题。所以将其总结一下并分享给大家。 文章目录 一、这是一次有故事的对话 二、三次握手的客户端服务端状态 1 先画个图看看有哪些状态 2 tcp协议内容解析 3 通过工具wireshark来验证我们所述 三、说下Linux网络编程常用API 1 Linux网络编程常用API 2 粘包现象 四、再说说为啥不是两次握手或者四次握手? 五、最后聊一聊分析网络程序的工具 1 网络程序调试工具的思维导图 2 详解各个小工具 六 结尾 嘀嘀嘀。。。。一看广东,难道是腾讯的面试,哦原来是电话面试。那就开始吧! 一、这是一次有故事的对话 先说说三次握手的各个状态 二、三次握手的客户端服务端状态 1 先画个图看看有哪些状态 嗯?这些ack seq是干啥的呢,不急不急,我们先把tcp协议格式内容给整明白了。 2 tcp协议内容解析 小贱先把tcp的头部搬过来 然后我们来解析一下各个字段是什么意思 字段名 字段描述 16位端口号 告知主机该报文是来自哪里以及传给哪个上层协议或应用程序(目的端口)的。 32位序列号 一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号 32位确认号 用作对另一方发送来的TCP报文段的响应 4位头部长度 标识该TCP头部有多少个32bit字(4字节)。因为4位最大能表示15,所以TCP头部最长是60字节。

大厂面试中三次握手延伸出来n连发你受得了?

柔情痞子 提交于 2020-01-19 22:58:41
目录 一、这是一次有故事的对话 二、三次握手的客户端服务端状态 1 先画个图看看有哪些状态 2 tcp协议内容解析 3 通过工具wireshark来验证我们所述 三、说下Linux网络编程常用API 1 Linux网络编程常用API 2 粘包现象 四、再说说为啥不是两次握手或者四次握手? 五、最后聊一聊分析网络程序的工具 1 网络程序调试工具的思维导图 2 详解各个小工具 六 结尾 秋招面试也不记得多少家公司会有这个面试题。所以将其总结一下并分享给大家。 @ 嘀嘀嘀。。。。一看广东,难道是腾讯的面试,哦原来是电话面试。那就开始吧! 一、这是一次有故事的对话 先说说三次握手的各个状态 二、三次握手的客户端服务端状态 1 先画个图看看有哪些状态 嗯?这些ack seq是干啥的呢,不急不急,我们先把tcp协议格式内容给整明白了。 2 tcp协议内容解析 小贱先把tcp的头部搬过来 然后我们来解析一下各个字段是什么意思 字段名 字段描述 16位端口号 告知主机该报文是来自哪里以及传给哪个上层协议或应用程序(目的端口)的。 32位序列号 一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号 32位确认号 用作对另一方发送来的TCP报文段的响应 4位头部长度 标识该TCP头部有多少个32bit字(4字节)。因为4位最大能表示15,所以TCP头部最长是60字节。

系统缓存全解析

℡╲_俬逩灬. 提交于 2020-01-19 09:33:15
本文转载自: http://www.cnblogs.com/ltp/archive/2009/06/30/1514311.html 作者:ltp 转载请注明该声明。 有时候总听到网友说网站运行好慢,不知如何是好;有时候也总见到一些朋友写的网站功能看起来非常好,但访问性能却极其的差。没有“勤俭节约”的意识,势必会造成“铺张浪费”。如何应对这种情况,充分利用系统 缓存 则是首要之道。 系统缓存有什么好处呢?举个简单的例子,你想通过网页查询某些数据,而这些数据并非实时变化,或者变化的时间是有期限的。例如查询一些历史数据。那么每个用户每次查的数据都是一样的。如果不设置缓存, ASP.NET 也会根据每个用户的请求重复查询 n 次,这就增加了不必要的开销。所以, 可能的情况下尽量使用缓存, 从内存中返回数据的速度始终比去数据库查的速度快,因而可以大大提供应用程序的性能。 毕竟现在内存非常便宜,用空间换取时间效率应该是非常划算的。尤其是对耗时比较长的、需要建立网络链接的数据库查询操作等。 缓存功能是大型网站设计一个很重要的部分。 由数据库驱动的 Web 应用程序,如果需要改善其性能,最好的方法是使用缓存功能。 系统缓存全解析文章索引 系统缓存全解析1:系统缓存的概述 系统缓存全解析2:页面输出缓存 系统缓存全解析3:页面局部缓存 系统缓存全解析4:应用程序数据缓存 系统缓存全解析5

轮询、长轮询、长连接、websocket

早过忘川 提交于 2020-01-19 08:36:34
 Web端即时通讯技术:即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的。但是在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,一般的Web通信都是浏览器先发送请求到服务器,服务器再进行响应完成数据的现实更新。   实现Web端即时通讯的方法:实现即时通讯主要有四种方式,它们分别是轮询、长轮询(comet)、长连接(SSE)、WebSocket。它们大体可以分为两类,一种是在HTTP基础上实现的,包括短轮询、comet和SSE;另一种不是在HTTP基础上实现是,即WebSocket。下面分别介绍一下这四种轮询方式,以及它们各自的优缺点。 ①轮询   短轮询的基本思路就是浏览器每隔一段时间向浏览器发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。这种方式实现的即时通信,本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化。   这种方式的优点是比较简单,易于理解,实现起来也没有什么技术难点。缺点是显而易见的,这种方式由于需要不断的建立http连接,严重浪费了服务器端和客户端的资源。尤其是在客户端,距离来说,如果有数量级想对比较大的人同时位于基于短轮询的应用中

TCP连接的建立和终止

杀马特。学长 韩版系。学妹 提交于 2020-01-19 07:53:50
刚看完 UNIX 第五章内容,我想按照自己的方式将自己获得的知识梳理一遍,以便日后查看!先贴上一段简单的 TCP 服务器端代码: 1 #include <sys/socket.h> 2 #include <netinet/in.h> 3 #include <stdio.h> 4 #include <error.h> 5 #include <unistd.h> 6 #include <string.h> 7 #include <stdlib.h> 8 9 #define MAXLINE 5 10 #define SA struct sockaddr 11 int main() 12 { 13 int listenfd, connfd; 14 pid_t childpid; 15 int readn, writen; 16 socklen_t clilen; 17 char buf[MAXLINE]; 18 struct sockaddr_in servaddr, cliaddr; 19 //创建监听套接字 20 if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 21 { 22 printf("socket() error!"); 23 exit(0); 24 } 25 //先要对协议地址进行清零 26 bzero(

Memcache基础教程

☆樱花仙子☆ 提交于 2020-01-18 22:21:40
Memcache基础教程 Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。 它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。 Memcache官方网站:http://www.danga.com/memcached,更多详细的信息可以来这里了解 :) 为什么会有Memcache和memcached两种名称? 其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了把~~~~。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。 Memcache的安装 分为两个过程:memcache服务器端的安装和memcached客户端的安装。 所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储 所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要php添加扩展。 具体的配置大家可以参考: Linux下的Memcache安装 :http://www

JAVA面试题-网络篇(六)

久未见 提交于 2020-01-18 11:39:35
1. 简述 tcp 和 udp的区别? tcp 和 udp 是 OSI 模型中的运输层中的协议。tcp 提供可靠的通信传输,而 udp 则常被用于让广播和细节控制交给应用的通信传输。 两者的区别大致如下: tcp 面向连接,udp 面向非连接即发送数据前不需要建立链接; tcp 提供可靠的服务(数据传输),udp 无法保证; tcp 面向字节流,udp 面向报文; tcp 数据传输慢,udp 数据传输快; 2. tcp 为什么要三次握手,两次不行吗?为什么? 如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务器端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用三次握手,服务器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。 3. 说一下 tcp 粘包是怎么产生的? tcp 粘包可能发生在发送端或者接收端,分别来看两端各种产生粘包的原因: 发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包; 接收方粘包:接收方不及时接收缓冲区的包,造成多个包接收。 4. OSI 的七层模型都有哪些? 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。 数据链路层:负责建立和管理节点间的链路。 网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。

Web服务器总结

只愿长相守 提交于 2020-01-18 00:02:02
文章目录 Web服务器 1、JavaWeb的概述 1.1 什么是JavaWeb? 1.2 JavaWeb编程是基于请求和响应 2、Web服务器概述 2.1 服务器简介 2.2 Web资源的分类 2.3 常用的Web服务器 3、软件架构 3.1 C/S架构:客户端/服务端 3.2 B/S架构:浏览器端/服务端(JavaEE属于B/S) 4、Tomcat服务器 4.1 Tomcat目录结构 4.2 部署Tomcat Web服务器 1、JavaWeb的概述 1.1 什么是JavaWeb? 使用java语言去编写所有浏览器可以访问到的程序的总称。叫 javaWeb 。 1.2 JavaWeb编程是基于请求和响应 (1)、什么是请求 客户端给服务器发送数据。叫 请求 。 (2)、什么是响应 服务器给客户端回传数据,叫 响应 。 (3)、请求和响应的关系 请求和响应是成对出现的! 2、Web服务器概述 2.1 服务器简介 指的是网络环境下为客户机(Client)提供某种服务的专用计算机,服务器安装有网络操作系统(如Windows 2000 Server、Linux、Unix等)和各种服务器应用系统软件(如Web服务器、电子邮件服务)的计算机 注:服务器的主要功能是提供网上信息浏览服务 2.2 Web资源的分类 所谓web资源即放在Internet网上供外界访问的文件或程序

网络性能测试工具Iperf介绍

巧了我就是萌 提交于 2020-01-16 10:00:04
【概要】Iperf是一款网络性能测试工具,可以方便的用它进行SDN网络带宽和网络质量的测试,Iperf支持协议、定时、缓冲区等参数的配置调整,报告TCP/UDP最大带宽、延迟抖动、数据包丢失等统计信息。Iperf版本建议采用Linux版本,事实上,Windows版也很好用。 1 Iperf安装 Iperf安装方法有多种,可以下载源码编译安装,也可以直接使用编译好的二进制版本,在ubuntu下安装使用iperf尤为简单,apt-get install iperf 即可,值得一提的是Mininet自带Iperf,在SDN网络上测试比较便捷。 2 工作原理 使用Iperf测试时必须将一台主机设置为客户端,一台主机设置为服务器。 Iperf测试TCP Iperf测试TCP带宽的原理比较简单,在客户端和服务端建立三次握手连接后,客户端带宽的大小等于发送的总数据除以发送的总时间。对服务端测得的带宽,则是接收的总数据除以所花时间。 TCP模式下简单举例: Server:iperf -s Client:iperf -c 10.0.0.1 -i 1 客户端到服务器10.0.0.1上带宽测试,每一秒钟打印一次信息。 Iperf测试UDP Iperf测试UDP性能时,客户端可以指定UDP数据流的速率。客户端发送数据时,将根据客户端提供的速率计算数据报发送之间的时延。 客户端还可以指定发送数据报的大小

CommonJS和AMD

主宰稳场 提交于 2020-01-16 07:16:21
CommonJS中,有一个全局性方法require(),用于加载模块,适用于服务器端,同步加载,  var math = require('math');  math.add(2,3); // 5 这对服务器端不是一个问题,因为所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于"假死"状态。 AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数: require([module], callback); 只要通过require.js加载 来源: https://www.cnblogs.com/Ferrari/p/7205777.html