客户端服务器

TCP协议---三次握手和四次挥手详解 (不看后悔系列)

北城以北 提交于 2020-03-02 10:29:45
一、TCP协议简介 TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,提供面向连接的可靠传输服务。是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。 TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。 工 作:与IP协议共同使用 下面我们来介绍一下TCP的报头结构和相关工作原理: TCP报头 TCP报头总长最小为20个字节,其报头结构如下图(图1)所示; 源端口:指定了发送端的端口 目的端口:指定了接受端的端口号 序号:指明了段在即将传输的段序列中的位置 确认号:规定成功收到段的序列号,确认序号包含发送确认的一端所期望收到的下一个序号 TCP偏移量:指定了段头的长度。段头的长度取决与段头选项字段中设置的选项 保留:指定了一个保留字段,以备将来使用 标志:SYN、ACK、PSH、RST、URG、FIN SYN: 表示同步 ACK: 表示确认 PSH: 表示尽快的将数据送往接收进程 RST: 表示复位连接 URG: 表示紧急指针 FIN: 表示发送方完成数据发送 窗口

https原理通俗了解

我与影子孤独终老i 提交于 2020-03-02 09:06:19
摘要:本文尝试一步步 还原 HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样。但是这并不代表HTTPS的真实设计过程。在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于“还原”过程。 我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B: 如果我们要实现这个聊天软件,本文只考虑安全性问题,要实现 A发给B的hello消息包,即使被中间人拦截到了,也无法得知消息的内容 如何做到真正的安全? 这个问题,很多人马上就想到了各种加密算法,什么对称加密、非对称加密、DES、RSA、XX、噼里啪啦~ 而我想说,加密算法只是 解决方案 ,我们首先要做的是理解我们的 问题域 —— 什么是安全? 我个人的理解是: A与B通信的内容,有且只有A和B有能力看到通信的真正内容 好,问题域已经定义好了(现实中当然不止这一种定义)。对于解决方案,很容易就想到了对消息进行加密。 题外话,但是只有这一种方法吗?我看未必,说不定在将来会出现一种物质打破当前世界的通信假设,实现真正意义上的保密。 对于A与B这样的简单通信模型,我们很容易做出选择: 这就是 对称加密算法 ,其中图中的 密钥S 同时扮演加密和解密的角色。具体细节不是本文范畴。 只要这个密钥S不公开给第三者,同时密钥S足够安全,我们就解决了我们一开始所定问题域了

cookie和session原理

笑着哭i 提交于 2020-03-02 08:34:35
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie通过在客户端记录信息确定用户身份,Session通过服务器端记录信息确定用户身份。 1.1 Cookie机制 在程序中,会话跟踪是很重要的事情。理论上, 一个用户的所有请求操作都应该属于同一个会话 ,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。 而Web应用程序是使用HTTP协议传输数据的。 HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话 。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。 Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。 1.1.1 什么是cookie 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就 给客户端们颁发一个通行证吧

安卓平台下的即时通讯 .

拈花ヽ惹草 提交于 2020-03-02 05:15:03
摘要: 论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的 作用和功能以及实现方法,复杂的通讯如引入视频音频等可以考虑AnyChat SDK。 关键词: Android 平台;即时通讯 SDK包下载 http://download.csdn.net/detail/xujinquan19/4512304 (本文中图表点击附件即可见) 1 Android 平台简介 Android 是Google 公司于2007年11月5日推出的手机操作系统 ,经过2年多的发展,Android平台在智能移动领域占有不小的份额,由Google为首的40 多家移动通信领域的领军企业组成开放手机联盟(OHA)。Google 与运营商、设备制造商、开发商和其他第三方结成深层次的合作伙伴关系,希望通过建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。正因如此,Android 正在被越来越多的开发者和使用者所接受。近日,Google 发言人Anthony House称, 截止到2010 年4 月15 日,Android Market 已经有3.8 万多个应用程序。 2 Android 平台特性与即时通讯的研究   Android 平台框架共由5 部分组成。底层核心是基于 Linux 2.6内核 开发的独立操作系统,该层用来提供系统的底层服务

python基础之socket与socketserver

我怕爱的太早我们不能终老 提交于 2020-03-02 02:56:50
---引入 Socket的英文原义是“孔”或“插座”,在Unix的进程通信机制中又称为‘套接字’。套接字实际上并不复杂,它是由一个ip地址以及一个端口号组成。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座(ip地址)的房间,每个插座有很多插口(端口),通过这些插口接入电线(进程)我们可以烧水,看电视,玩电脑…… 应用程序通常通过"套接字"向网络发出请求或者应答网络请求 。 套接字的作用之一就是用来区分不同应用进程,当某个进程绑定了本机ip的某个端口,那么所有传送至这个ip地址上的这个端口的所有数据都会被内核送至该进程进行处理。 ---python中的socket Python 提供了两个基本的 socket 模块。 第一个是 Socket,它提供了标准的 BSD Sockets API。 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。 ----socket 先来说第一个。 我们知道,现在的应用程序大多为C/S架构,也就是分为客户端/服务器端。   服务器端:服务器端进程需要申请套接字,然后自己绑定在这个套接字上,并对这个套接字进行监听。当有客户端发送数据了,则接受数据进行处理,处理完成后对客户端进行响应。   客户端:客户端则相对简单些,客户端只需要申请一个套接字,然后通过这个套接字连接服务器端的套接字

服务器与客户端的数据同步

徘徊边缘 提交于 2020-03-01 09:13:16
问题 从一个例子说起,我们的客户端从服务器获取数据,这里假定获取文章。第一次使用,我们获取服务器端最新发表的几篇文章。 我们可以每次都重新获取,但这样费时又费流量。好的设计应该是我们把获取过的文章存下来,下次只获取最新发表的文章。 这样就有个问题,如果某一篇文章,我们已经获取过了,可有一天它更新了。。。。 还有个问题,文章持续获取下去,我们手机没空间了。。。。 如何使我们客户端能保存有限的文章,并且同时可以得到更新呢? 解决方法 为了保证客户端不存过多文章,我们应该设置一个过期期限,当缓存的文章比较老旧,删除掉即可。 为了保证客户端的文章能够得到更新,服务器的文章表应该有个最后修改时间字段。同时服务器端保存客户端最后一次获取文章的时间,保存在session里。 1、文章表设计 | index | content | ts | dl | index 索引; content 内容; ts 文章最后一次的修改时间。把ts的格式设计为:NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,即默认为当前的时间戳,且随着文章更改,自动更新为更改时间。 dl 文章是否被删除了; 2、客户端查询文章时服务器端的工作 从session中查询该用户对文章的最后一次获取时间,last_gotten_ts; 如果有该记录

session和cookie学习

风格不统一 提交于 2020-03-01 05:25:49
1. session和cookie学习 1.1. 技术的需求 以京东未登录时添加购物车为例,在京东上购买东西(未登录)可以添加到购物车,这时候有个问题是京东如何存储没有登录的你添加的购物车物品?我们肯定想到域对象,request、ServletContext域对象 request对象有个问题:request是请求一次,产生一次,如果继续请求就会释放掉,也就是说request就有一个,就在本次请求中。这种特性显然是不行的,因为假如你添加了一个物品进入购物车,然后添加另一个物品,这是第二个请求,就会将第一个请求给覆盖掉。因此用request域对象来做购物车的添加是不可行的。 ServletContext域对象,这个也有问题,这个对象是全局的,不管谁添加购物车,都会集中在一起,在付账时会发现你会付账所有人添加的购物车,这显然是不可取的。 我们的需求是:当我们添加一个物品到购物车时,我们可以多次添加。也就是说由服务器给我们创造一个个人空间,这就引出了另一个域对象session对象 1.2. 会话技术学习 会话技术:从打开一个浏览器访问某个站点开始,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据。 会话技术分为两种:cookie和session技术。cookie,数据存储到客户端本地,减少服务器存储压力,安全性不好,客户端可以清除cookie

小白学习大数据之路——ssh安装及原理

爱⌒轻易说出口 提交于 2020-02-29 17:19:35
预备知识: 1.软链接和硬链接的区别:linux环境下软链接相当于windows环境下的快捷方式,硬链接则是指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。多个文件名指向同一个索引节点是存在的。删除软链接对原文件没什么影响,删除硬链接除了最后一个硬链接外删除多余的硬连接也是没有什么影响的。 2.linux在启动过程中,会先执行/etc/profile文件,然后执行用户目录下的~/.bash_profile、~/bash_login、~/.profile中的其中一个(执行优先级为从左到右)。如果~/.bash_profile文件存在的话,一般还会执行~/.bashrc。再理清下思路,/etc/profile是全局配置文件,适用于所有用户,其他用户目录的配置文件只适用于某个用户,对其他用户就不起作用了。 ssh原理以及问题: SSH 为 Secure Shell 的缩写,SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台

AMQP.0-10中文版——概述

我怕爱的太早我们不能终老 提交于 2020-02-29 09:54:21
AMQP.0-10中文版——概述 第1章 概述 1.1. 本文档的目标 这份文档定义了高级消息队列协议,这个协议使得遵从该协议的客户端应用和消息中间件服务器之间能够互相通信。为了完全实现互操作性,我们还定义了消息中间件服务的标准行为。 我们面对这个领域有经验的技术读者,同时还提供了足够的规范和指南,一个合适的技术工程师可以根据这些文档在任何硬件平台上用各种编程语言来构建遵从该协议的解决方案。 1.2. 专利 AMQP的设计目标之一是它的概念都来自于现有的、无产权阻碍的、广泛推行的标准——比如由互联网工程任务组和万维网颁布的标准。 因此,我们相信仅用众所周知的一些技术就能够实现AMQP服务,比如现有的开源网络程序和电子邮件路由软件或者那些技术专家们所熟悉的技术。 1.3. 摘要 1.3.1. 什么是AMQP 高级消息队列协议使得遵从该规范的客户端应用和消息中间件服务器的全功能互操作成为可能。 1.3.2. 为什么要用AMQP 我们的目标是实现一种在全行业广泛使用的标准消息中间件技术,以便降低企业和系统集成的开销,并且向大众提供工业级的集成服务。 我们的宗旨是通过AMQP,让消息中间件的能力最终被网络本身所具有,并且通过消息中间件的广泛使用发展出一系列有用的应用程序。 1.3.3. AMQP的范围 为了完全实现消息中间件的互操作性,需要充分定义网络协议和消息代理服务的功能语义。 因此,

RPC和Restful(转载)

二次信任 提交于 2020-02-29 01:32:29
RPC 即远程过程调用(Remote Procedure Call Protocol,简称RPC),像调用本地服务(方法)一样调用服务器的服务(方法)。通常的实现有 XML-RPC , JSON-RPC , 通信方式基本相同, 所不同的只是传输数据的格式. RPC是分布式架构的核心,按响应方式分如下两种: 同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作 异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。 同步调用的实现方式有WebService和RMI。Web Service提供的服务是基于web容器的,底层使用http协议,因而适合不同语言异构系统间的调用。RMI实际上是Java语言的RPC实现,允许方法返回 Java 对象以及基本数据类型,适合用于JAVA语言构建的不同系统间的调用。 异步调用的JAVA实现版就是JMS(Java Message Service),目前开源的的JMS中间件有Apache社区的ActiveMQ、Kafka消息中间件,另外有阿里的RocketMQ。 RPC架构里包含如下4个组件: 1、 客户端(Client):服务调用方 2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方 3、 服务端存根(Server Stub)