精华内容
下载资源
问答
  • 图书馆系统技术支持服务协议书 一、协议双方 甲方: 乙方: 二、协议内容 经甲乙双方友好...该文档为图书馆系统技术支持服务协议书范文,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 合同模板协议范文2021浙江省技术服务合同(含技术培训、技术中介).docx
  • 编号_ 本资料为word版本可以直接编辑和打印感谢您的下载 技术服务暨委托UI设计合同协议书 技术服务暨委托UI设计合同协议书 甲 方_ 乙 方_ 日 期_ 说明 说明本合同资料适用于约定双方经过谈判协商而共同承认共同遵守...
  • 人工智能过滤优化服务协议书 甲方 信息服务有限公司 乙方 甲乙双方在平等自愿的基础上经友好协商就甲方为 乙方提供 人工智能过滤优化服务事宜现达成如下 协议 一服务范围及项目内容 人工智能优化服务技术是甲方根据...
  • 编号 _ 人工智能过滤优化服务合同 甲 方...人工智能 过滤优化服务事宜现达成如下协议服务范围及项目内容 人工智能优化服务技术是甲方根据乙方提供的大复式投注单 利用独特的数理统 计和先进的数据分析相结合在应用最
  • DHCP 协议白皮书

    2011-10-27 00:13:13
    摘 要:本文介绍了DHCP技术的基本原理和典型应用,以及杭州华三通信技术有限公司(以 下简称H3C公司)自主研发的低端以太网交换机为DHCP客户端、DHCP服务器和 DHCP中继代理设备时所提供的主要功能及工作过程。
  •  b)“合同”指本协议当事人于年 月 日以 方式签订的《投资合作服务协议书》;  c)“服务”指甲方根据本协议条款为完成协议所涉之项目而进行的工作;  d)“A、股股票”指在中国上海证券交易所、深圳证券...
  • 甲方经营技术:指由甲方开发经营的系列产品的独特的经营技术,包括甲方的注册商号、商标、标识、服务模式、店铺样式、管理方式、商品陈列方式、销售方式、营销培训研修在内的统一经营体系。 第二条 申请加盟资格取得...
  • 低压柜技术协议

    2018-05-29 10:38:49
    也未充分引述有关标准和规范的条文,卖方应保证提供符合相关国际、国家、行业标准、中冶京诚(秦皇岛)工程技术有限公司(以下简称设计方)设计蓝图及本技术协议要求的优质产品及其相应的服务,对国际、国家及行业...
  • 本文档不是招股说明:本文档不构成也不暗示任何形式的招股说明。本文中的任何措词均不应解释为招揽投资。因此,本白皮书与任何形式的证券在世界范围内的任何司法管辖区均不相关。而是,该白皮书构成了Cake产品的...
  • 股权投资合作协议书 甲方:NJ高新创业投资有限公司 地址:NJ高新区 号 大厦8楼 邮编: 法定代表人: 乙方:深圳市*****有限公司 地址:深圳市xx 邮编:xx 法定代表人: 甲、乙双方根据国家的相关法律法规,本着...
  • IEEE 802.1x 称为基于端口的访问控制协议(Port based network access control protocol)。基于端口的访问控制(Port based network access control)能够在利用IEEE 802 LAN的优势基础上提供一种对连接到局域网...
  • 关于项目实施应用中,协议服务器、接口服务器配置计算方法,在工程投标、实施、技术规格中使用,现将此技术文档提供给大家参考;
  • 编号 软件测试合同 甲 方 乙 方 签订日期 年 月 日 地址: 邮政编码: ...本合同甲方委托乙方就提供质量测试专项技术服务双方经过平等 本合同甲方委托乙方就 提供质量测试专项技术服务双方经过平等 协商制订如下合同条
  • 技术咨询服务合同 甲方 乙方 签订日期 年 月 日 甲方 乙方 基于长期合作精神甲乙双方同意合作进行 ERP项目实施有关合作条款如下 1 ?合作项目 甲乙双方合作项目为 项目 项目服务周期为 年 月 日起至 年 月 日 2....
  • 编号 _ 软件测试合同 甲 方_ 乙 方_ 签订日期 _年_月_ 日 第 1 页 共 12 页 委托方 以下简称甲方 地址 邮政...内打 本合同甲方委托乙方就 提供质量测试专项技术服务双方经过平等 协商制订如下合同条款供双方遵照执行
  • 拒绝服务攻击(DOS/DDOS)是近年来愈演愈烈的一种攻击手段,其主要目的是造成目标主机的TCP/IP协议层拥塞、或者导致应用层异常终止而形成拒绝服务现象。中新金盾防火墙针对基于Internet的信息平台,需要对不可控网络...
  • SSL技术白皮书

    2019-06-18 08:18:55
    SSL技术白皮书摘要概述产生背景技术优点协议安全机制数据传输的机密性身份验证机制消息完整性验证利用非对称密钥算法保证密钥本身的安全利用 PKI 保证公钥的真实性协议工作过程SSL 分层结构SSL 握手过程只验证服务器...

    摘要

    SSL 利用数据加密,身份验证和消息完整性验证机制,为基于 TCP 等可靠连接的应用层协议提供安全性保证。本文介绍了 SSL 的产生背景、安全机制、工作过程及典型组网应用。

    缩略语

    英文全名

    中文解释

    AES

    Advanced Encryption Standard

    高级加密标准

    CA

    Certificate Authority

    证书机构

    DES

    Data Encryption Standard

    数据加密标准

    HTTPS

    Hypertext Transfer Protocol Secure

    安全超文本传输协议

    MAC

    Message Authentication Code

    消息验证码

    MD5

    Message Digest 5

    消息摘要算法5

    PKI

    Public Key Infrastructure

    公钥基础设施

    RSA

    Rivest Shamir and Adleman

    非对称密钥算法的一种

    SHA

    Secure Hash Algorithm

    安全散列算法

    SSL

    Secure Sockets Layer

    安全套接层

    VPN

    Virtual Private Network

    虚拟专有网络

    概述

    产生背景

    基于万维网的电子商务和网上等新兴应用,极大地方便了人们的日常生活,收到人们的青睐。由于这些应用都需要在网络上进行在线交易,他们对网络通信的安全性提出了更高的要求。

    传统的万维网协议 HTTP 不具备安全机制 —— 采用明文的形式传输数据、不能验证通信双方的身份、无法防止传输的数据被篡改等,导致 HTTP 无法满足电子商务和网上银行等应用的安全性要求。

    Netspace 公司提出的安全协议 SSL,利用数据加密、身份验证和消息完整性验证机制,为网络上数据的传输提供安全性保证。 SSL 可以为 HTTP 提供安全连接,从而很大程度上改善了万维网的安全性问题。

    技术优点

    SSL 具有如下优点:

    • 提供较高的安全性保证。SSL 利用数据加密、身份验证和消息完整性验证机制,保证网络上数据传输的安全性。
    • 支持各种应用层协议。虽然SSL 设计的初衷是为了解决万维网安全性问题,但是由于SSL 位于应用层和传输层之间,它可以为任何基于 TCP 等可靠连接的应用层协议提供安全性保证。
    • 部署简单。目前 SSL 已经成为网络中用来鉴别网站和网页浏览者身份,在浏览器使用者及 WEB 服务器之间进行加密通信的全球化标准。SSL 协议已被集成到大部分的浏览器中,如 IE、Netscape、Firefox 等。这就意味着几乎任意一台装有浏览器的计算机都支持 SSL 连接,不需要安装额外的客户端软件。

    协议安全机制

    SSL 协议实现的安全机制包括:

    • 数据传输的机密性:利用对称密钥算法对传输的数据进行加密。
    • 身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。
    • 消息完整性验证:消息传输过程中使用 MAC 算法来检验消息的完整性。

    数据传输的机密性

    网络上传输的数据被非法用户窃取,SSL采用在通信双方之间建立加密通道的方法保证数据传输的机密性。

    所谓加密 通道,是指发送发在发送数据前,使用加密算法和加密密钥对数据进行加密,然后将数据发送给对方;接收方收到数据后,利用解密算法和解密密钥从密文中获取明文。灭有解密密钥的第三方,无法将密文恢复为明文,从而保证数据传输的机密性。

    加解密算法分为两类:

    • 对称密钥算法:数据加密和解密时使用相同的密钥。
    • 非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的公钥,一个是由用户秘密保存的私钥。利用公钥(或私钥)加密的数据只能用相应的私钥(或公钥)才能 解密。

    与非对称密钥算法相比,对称密钥算法具有速度快的优点,通常用于大量信息进行加密(如对所有报文加密);而非对称密钥算法,一般用于数字签名和对较少的信息进行加密。

    SSL 加密通道上的数据加解密使用对称密钥算法,目前主要支持的算法有 DES、3DES、AES等,这些算法都可以有效地防止交互数据被窃听。

    对称密钥算法要求解密密钥和加密密钥完全一致。因此,利用对称密钥算法加密传输数据之前,需要在通信两端部署相同的密钥。对称密钥的部署方法请参见后面,“利用非对称密钥算法保证密钥本身的安全”。

    身份验证机制

    电子商务和网上银行等应用中必须保证要登录的 Web 服务器是真实的,以免重要的信息被非法的窃取。SSL 利用数据签名来验证通信对端的身份。

    非对称密钥算法可以用来实现数字签名。由于通过私钥加密后的数据只能利用对应的公钥进行解密,因此根据解密是否成功,就可以判断发送者的身份,如同发送者对数据进行了 “签名”。

    例如,Alice 使用自己的私钥对一段固定的信息加密后发给了 Bob,Bob 利用 Alice 的公钥解密,如果解密结果与固定信息相同,那么就能够确认信息的发送者为 Alice,这个过程就称为数字签名。

    SSL 客户端必须验证 SSL 服务器的身份,SSL 服务器是否验证 SSL 客户端的身份,则由 SSL 服务器决定。 SSL 客户端和SSL 服务端的身份验证过程,请参见“SSL 握手过程”。

    使用数字签名验证时,需要确保被验证者的公钥是真实的,否则,非法用户可能会冒充被验证者与验证者通信。如 图1 所示,Cindy 冒充 Bob,将自己的公钥发给 Alice,并利用自己的私钥计算出签名发送给 Alice,Alice 利用 “Bob” 的公钥(实际上为 Cindy的 公钥)成功验证签名,则 Alice 成功验证改签名,则 Alice 认为 Bob 的身份验证成功,而实际上 Alice 通信的是冒充 Bob 的 CIndy。SSL 利用 PKI 提供的机制保证公钥的真实性,详细介绍请参见 “利用 PKI 保证公钥的真实性”。

    在这里插入图片描述

    消息完整性验证

    为了避免网络中传输的数据被非法篡改,SSL 利用基于 MD5 或 SHA 的 MAC 算法来保证消息的完整性。

    MAC 算法是在密钥参与下是数据摘要算法,能将密钥和任意长度的数据转化为固定长度的数据。利用 MAC 算法验证消息完整性的过程如图 2 所示。发送者在密钥的参与下,利用 MAC 算法计算出消息的 MAC 值,并将其加在消息之后发送给接收者。接收者利用同样的密钥的 MAC 算法计算出消息的 MAC值,并与接收到的 MAC 值比较。如果二者相同,则报文没有改变;否则,报文在传输过程中被修改,接收者将丢弃该报文。

    在这里插入图片描述

    MAC 算法具有如下特征,使其能够用来验证消息的完整性:

    • 消息的任何改变,都会引起输出的固定长度数据产生变化。通过比较 MAC 值,可以保证接收者能够发现消息的改变。
    • MAC算法需要密钥的参与,因此没有密钥的非法用户在改变消息的内容后,无法添加正确的 MAC 值,从而保证非法用户无法随意修改消息内容。

    MAC 算法 要求通信双方具有相同的密钥,否则MAC 值验证将会失败。因此,利用 MAC 算法验证消息完整性之前,需要在通信两端部署相同的密钥。MAC 密钥的部署方法见“利用非对称密钥算法保证密钥本身的安全”。

    利用非对称密钥算法保证密钥本身的安全

    对称密钥算法 和 MAC 算法要求通信双方具有相同的 密钥,否则解密或 MAC 值验证将失败。因此,要建立加密通道或验证消息完整性,必须先在通信双发部署一致的密钥。

    SSL 利用非对称密钥算法加密密钥的方法实现密钥交换,保证第三方无法获取该密钥。如图3 所示,SSL 客户端(Web 浏览器)利用 SSL 服务器(Web 服务器)的公钥加密密钥,将加密后的密钥发送给SSL 服务器,只有拥有对应私钥的 SSL 服务器才能从密文中获取原始的密钥。 SSL 通常采用 RSA算法加密传输密钥。

    在这里插入图片描述

    说明:

    • 实际上,SSL 客户端发送给 SSL 服务器的密钥不能直接用来加密数据或计算 MAC 值,该密钥是用来计算对称密钥和 MAC 密钥的信息,称为 premaster secret。SSL 客户端和 SSL 服务器 利用 premaster secret 计算出相同主密钥(master secret),再利用 master secret 生成用于对称密钥算法、MAC 算法等的密钥。premaster secret 是计算对称密钥、MAC 算法密钥的关键。
    • 用来实现密钥交换的算法称为密钥交换算法。非对称密钥算法 RSA 用于密钥交换时,也可以称之为密钥交换算法。

    利用非对称密钥算法加密密钥之前,发送者需要获取接收者的公钥,并保证该公钥确实属于接收者,否则,密钥可能会被非法用户窃取。如图1所示,CIndy 冒充 Bob ,将自己的公钥发给 Alice ,Alice 利用 Cindy 的公钥加密发送给 Bob 的数据, Bob 由于没有对应的私钥无法解密该数据,而 Cindy 截取数据后,可以利用自己的私钥解密该数据。 SSL 利用 PKI 提供的机制保证公钥的真实性,详细介绍请参见 “利用 PKI 保证公钥的真实性”。

    利用 PKI 保证公钥的真实性

    PKI通过数字证书来发布用户的公钥,并提供了验证公钥真实性的机制。数字证书(简称证书)是一个包含用户的公钥机器身份信息的文件,证明了用户与公钥的关联。数字证书有权威机构——CA签发,并由CA 保证数证书的真实性。

    SSL 客户端把密钥加密传递给 SSL 服务器之前,SSL 服务器要将从 CA 获取的证书发送给 SSL 客户端,SSL 客户端通过 PKI 判断该证书的真实性。如果该证书确实属于 SSL 服务器,则利用该证书中的公钥加密密钥,发送给SSL 服务器。

    验证 SSL 服务器/ SSL 客户端的身份之前,SSL 服务器/ SSL 客户端 需要将从 CA 获取的证书发送给对端,对端通过 PKI 判断该证书的真实性。如果证书确实属于 SSL 服务器 / SSL 客户端,则对端利用该证书中的公钥验证 SSL 服务器 / SSL 客户端的身份。

    协议工作过程

    SSL 分层结构

    在这里插入图片描述

    如图4 所示,SSL 位于应用层和传输层之间,它可以为任何基于 TCP 等可靠连接的应用层协议提供安全性保证。SSL 协议本身分为两层:

    • 上层为 上层为SSL握手协议(SSL handshake protocol)、SSL密码变化协议(SSL change cipher spec protocol)和SSL警告协议(SSL alert protocol);
    • 底层为SSL记录协议(SSL record protocol)。

    其中:

    • SSL 握手协议:是SSL协议非常重要的组成部分,用来协商通信过程中使用的加密套件 (加密算法、密钥交换算法和 MAC 算法等)、在服务器和客户端之间安全地交换密钥、实现服务器和客户端的身份验证。
    • SSL 密码变化协议:客户端和服务器端通过密码变化协议通知对端,随后的报文都将使用新协商的加密套件和密钥进行保护和传输。
    • SSL 警告协议:用来向通信对端报告警告信息,消息中包含警告的严重级别和描述。
    • SSL 记录协议:主要负责对上层的数据(SSL握手协议、SSL 密码变化协议、SSL警告协议和应用层协议报文)进行分块、计算并添加 MAC 值、 加密,并把处理后的记录块传输给对端。

    SSL 握手过程

    SSL 通过握手过程在客户端和服务器之间协商会话参数,并建立会话。会话包含的主要参数有会话ID、对方的证书、加密套件(密钥交换算法、数据加密算法和MAC算法等)以及主密钥(master secret)。通过 SSL 会话传输的数据,都将采用该会话的主密钥和加密套件进行加密、计算 MAC 等处理。

    不同情况下,SSL 握手过程存在差异。下面将分别描述一下三证情况下的握手过程:

    • 只验证服务器的 SSL 握手过程
    • 验证服务器和客户端的 SSL 握手过程
    • 恢复原有会话 的 SSL 握手过程

    只验证服务器的 SSL 握手过程

    在这里插入图片描述

    如图5 所示,只需要 验证 SSL 服务器身份,不需要验证 SSL 客户端身份时,SSL的握手过程为:

    1. SSL 客户端通过 Client Hello 消息将它支持的 SSL 版本、加密算法、密钥交换算法、MAC 算法等信息发送给SSL 服务器。
    2. SSL 服务器确定本次通信采用的 SSL 版本和 加密套件,并通过 Server Hello 消息通知给 SSL 客户端。如果 SSL 服务器允许SSL 客户端在以后的通信中重用本次会话,则SSL 服务器 会为本次会话分配会话 ID,并通过 Server Hello 消息发送给 SSL 客户端。
    3. SSL 服务器将携带自己公钥信息的数字证书通过 Certificate 消息发送给 SSL 客户端。
    4. SSL 服务器发送 Server Hello Done 消息,通知 SSL 客户端版本和加密套件协商结束,开始进行密钥交换。
    5. SSL 客户端验证 SSL服务器的证书合法后,利用证书中的公钥加密 SSL 客户端随机生成的 premaster secret ,并通过 Client Key Exchange 消息发送给 SSL 服务器。
    6. SSL 客户端发送 Change Cipher Spec 消息,通知 SSL 服务器后续报文将采用协商好的密钥和加密套件进行加密和 MAC 计算。
    7. SSL 客户端计算已交互的握手消息(除 Change Cipher Spec消息外所有已交互的消息)的 Hash 值,利用协商好的密钥和加密套件处理 Hash 值(计算添加 MAC 值,加密等),并通过 Finished 消息发送给 SSL 服务器。SSL 服务器利用同样的方法计算已交互的握手消息的 Hash 值,并与 Finished 消息的解密结果比较,如果二者相同,且 MAC 值验证成功,则证明密钥和加密套件协商成功。
    8. 同样地,SSL 服务器发送 Change Cipher Spec 消息,通知 SSL 客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC 计算。
    9. SSL 服务器计算已交互的握手消息的 Hash 值,利用协商好的密钥和加密套件处理 Hash 值(计算并添加 MAC 值、加密等),并通过 Finished 消息发送 给 SSL 客户端。SSL 客户端利用同样的方法计算已交互的握手消息的Hash 值,并与 Finished 消息的解密结果比较,如果二者相同,且 MAC 值验证成功,则证明密钥和加密套件协商成功。SSL 客户端接收到 SSL 服务器发送的 Finished 消息后,如果解密成功,则可以判断 SSL 服务器时数字证书的拥有者,即 SSL 服务器身份验证成功,因为只有拥有私钥的 SSL 服务器才能从 Client Key Exchange 消息中解密得到 premaster secret ,从而间接地实现了 SSL 客户端对 SSL 服务器的身份验证。

    说明:

    • Change Cipher Spec 消息属于 SSL 密码变化协议,其他握手过程交互的消息均属于 SSL握手协议,统称为 SSL 握手消息。
    • 计算 Hash 值,指的是利用 Hash 算法(MD5或SHA) 将任意长度的数据转换为 固定长度的数据。

    验证服务器和客户端的SSL握手过程

    在这里插入图片描述

    SSL 客户端的身份验证是可选的,由SSL 服务器决定是否验证 SSL 客户端的身份。如图6 中蓝色部分表示的内容所示,如果 SSL 服务器验证 SSL 客户端 身份,则SSL 服务器和 SSL 客户端除了交互 “只验证服务器的SSL 握手过程”中的消息协商密钥和加密套件外,还需要进行以下操作:

    1. SSL 服务器发送 Certificate Request 消息,请求 SSL客户端将其证书发送给 SSL 服务器。
    2. SSL 客户端通过 Certificate 消息将携带自己的公钥的证书发送给SSL 服务器。SSL 服务器验证该证书的合法性。
    3. SSL 客户端计算已交互的握手消息、主密钥的Hash 值,利用自己的私钥对其进行加密,并通过 Certificate Verify 消息发送给 SSL 服务器。
    4. SSL 服务器计算已交互的握手消息、主密钥的Hash 值 ,利用 SSL 客户端证书中的公钥解密 Certificate Verify 消息,并将解密结果与计算出的 Hash 值比较。如果二者相同,则SSL 客户端身份验证成功。

    恢复原有会话的 SSL 握手协议

    在这里插入图片描述

    协商会话参数、建立会话的过程中,需要使用非对称密钥算法来加密密钥、验证通信对端的身份,计算量较大,占用了大量的系统资源。为了简化 SSL 握手过程,SSL 允许重用已经协商过的会话,具体过程为:

    1. SSL 客户端发送 Client Hello 消息,消息中的会话 ID 设置为计划重用的会话的ID。
    2. SSL 服务器如果允许重用该会话,则通过在 Server Hello 消息中设置相同的会话ID 来应答。这样,SSL 客户端和SSL 服务器就可以利用原有会话的加密套件,不必重新协商。
    3. SSL 客户端发送 Change Cipher Spec 消息,通知SSL 服务器后续报文将采用原有会话的密钥和加密套件进行加密和 MAC 计算。
    4. SSL 客户端计算已交互的握手消息的 Hash 值,利用原有会话的 密钥和加密套件处理Hash 值,并通过 Finished 消息发送给 SSL 服务器,以便SSL 服务器判断密钥和加密套件是否正确。
    5. 同样地,SSL 服务器发送 Change Cipher Spec 消息,通知 SSL客户端 后续报文采用原有会话的密钥和加密套件进行加密和 MAC 计算。
    6. SSL 服务器计算已交互的握手消息的 Hash 值,利用原有会话的密钥和加密套件处理 Hash 值,并通过 Finished 消息发送给 SSL 客户端,以便 SSL 客户端判断密钥和加密套件是否正确。

    典型组网应用

    HTTPS

    HTTPS 是基于 SSL 安全连接的 HTTP 协议。HTTPS 通过 SSL 提供的数据加密、身份验证和消息完整性验证等安全机制,为 Web 访问提供了安全性保证,广泛应用于网上银行,电子商务等领域。

    图8 中为 HTTPS 在网上银行中的应用。某银行为了方便客户,提供了网上银行业务,客户可以通过访问银行的 Web 服务器进行账户查询、转账等。通过在客户和银行的Web 服务器之间建立 SSL 连接,可以保证客户的信息不被非法窃取。
    在这里插入图片描述

    SSL VPN

    SSL VPN 是以 SSL 为基础的VPN技术,利用SSL 提供 的安全机制,为用户远程访问公司内部网路提供了安全保证。如图9 所示,SSL VPN 通过在远程接入用户和 SSL VPN 网关之间建立 SSL 安全连接,允许用户通过各种 Web 浏览器,各种网络接入方式,在任何地方远程访问企业网络资源,并能够保证企业网络的安全,保护企业内部信息不被窃取。

    在这里插入图片描述

    展开全文
  • 技术咨询服务合同 甲方 乙方 签订日期 年 月 日 甲方 乙方 基于长期合作精神甲乙双方同意合作进行 ERP项目实施有关合作条款如下 1 ?合作项目 甲乙双方合作项目为 项目 项目服务周期为 年 月 日起至 年 月 日 2....
  • 端口正是我们要扫描的对象,具有“开”和“关”两种状态,利用它的开或关状态就可以初步判断一台主机是否提供了某种服务。和端口所在主机的IP地址结合起来,所形成的一个二元组(IP地址,端口地址)就组成了一个套...

     网络协议和网络编程例程

    常用的网络编程---TCP/IP协议编程

    1.几个重要概念:

    (1). 端口(Port)和套接口

    端口正是我们要扫描的对象,具有“开”和“关”两种状态,利用它的开或关状态就可以初步判断一台主机是否提供了某种服务。和端口所在主机的IP地址结合起来,所形成的一个二元组(IP地址,端口地址)就组成了一个套接口

    (2). 地址表示顺序

    不同的系统在内存存储多字节数据的方式有所不同,而网络传输中,数据存储顺序不一定和系统存储顺序一样,因此为保证系统正确性和可移植性,需要利用系统的转换函数进行转换。

    (3). 服务器和客户机

    服务器不一定非和一台物理主机相对应,一台主机可以对应多个服务器,多台主机也可用软件捆绑后安装成一台服务器,服务器的主要识别标志就是一台主机运行了哪些服务器软件

     

    2.WindowsSocket结构

    (1)in_addr和sockaddr_in

    一个IPv4的基本数据结构主要有in_addr和sockaddr_in两个,前者表示32位的IP地址,后者是通用的套接口地址结构,它们的结构如下:

    struct in_addr 

        in_addr_t s_addr; 

    }; 

    structsockaddr_in 

        short sin_family;  //协议族,一般是AF_INET

        u_short sin_port;  //端口地址

         struct in_addr sin_addr;  //一个存储IP的结构。

        char sin_zero[8]; 

    };

    其中真正存储IP结构的sin_addr变量又是一个结构,该结构如下:

    structin_addr 

       union 

       { 

          struct{ 

              unsigned  char  s_b1,s_b2,s_b3, s_b4; 

                } S_un_b; 

          struct{ 

              unsigned  short  s_w1,s_w2; 

                } S_un_w; 

          unsigned long S_addr; 

    } S_un; 

    #define s_addr S_un.S_addr

    };

    其中S_addr是一个ULONG型的变量,如果赋值的时候,使用的是字符串类型,需要通过调用inet_addr函数将字符串类型转换成网络存储格式的ULONG

    有的服务器有多个网卡,此时会有多个IP地址,或是一个网卡配置多个IP地址,而当前的程序并不想只绑定某一个IP地址,这时可以设置S_addrhtonl(INADDR_ANY)

    (2)hostent结构

    hostent结构用于存储给定主机的信息,例如主机名、IP地址等属性。

    hostent结构的定义为:

    struct hostent { 

     char  *h_name;  //主机名

     char  * *h_aliases;  //主机的别名

     short  h_addrtype;  //地址的类型

     short  h_length;  //每个地址的长度,以字节为单位

     char * *h_addr_list; // 地址列表

    };

    h_addr_list地址列表中,每一个地址是以网络存储顺序保存的IP地址的ULONG表示格式

    该双重指针其实可以看成一个指针数组,其中h_addr_list[0]表示第一个IP地址,如果有多个IP地址,则h_addr_list[1]表示第二个IP地址,依次类推。其中h_addr_list[0]可以用宏h_addr来表示。

    3servent结构

    servent结构用于保存或返回给定服务名的名称和服务参数

    struct servent { 

      char *  s_name;  //服务名

      char * *  s_aliases;  //服务的别名

      short   s_port;  //服务的端口

      char  *  s_proto; //协议的名称

    };

     

    3.Windows socket转换类函数

    htons函数将计算机存储的USHORT格式转换为网络存储的USHORT格式。

    u_short htons(u_short   hostshort);

    ntohs函数将网络存储的USHORT格式转换为计算机存储的USHORT格式。

    u_short ntohs(u_short   netshort);

    htonl函数将计算机存储的ULONG格式转换为网络存储ULONG格式。

    u_long htonl(u_long  hostlong); 

    ntohl函数将网络存储的ULONG格式转换为计算机存储的ULONG格式。

    u_long ntohl(u_long netlong); 

     

    inet_ntoa函数将由in_addr结构所表示的网络地址,转换成由字符串表示的IP地址。

    char * inet_ntoa(struct in_addr  in); 

    inet_addr函数将字符串组成的IP地址串转换成一个ULONG的整数,该整数可用于in_addr结构中,是按网络格式存储的。

    unsigned long inet_addr(const char *cp);

     

    gethostbyname函数根据主机名读取主机的信息(主要是IP地址)。

    struct hostent *gethostbyname(const char*name);

    其它函数:

    struct HOSTENT * gethostbyaddr(constchar   *addr,int  len, int type);

    int gethostname(char *name,intnamelen); 

     

    getservbyname函数根据服务名和协议读取服务信息

    struct servent  * getservbyname( const char  *name, const char *proto); 

    getservbyport函数根据端口和协议读取服务信息

     

    4.WindowsSocket通信类函数

    (1). WSAStartup函数

    #include <Winsock2.h>

    #pragramcomment(lib,"Ws2_32.lib")    

    int WSAStartup( 

     WORD wVersionRequested, 

     LPWSADATA lpWSAData 

    );

    WSAStartup函数首先查询当前操作系统是否支持所要求的版本号,完成对Windows Sockets2的初始化工作。要使用Socket2通信,必须首先使用该函数,因此该函数应在逻辑上,处于Socket2所有函数中的第一位。

    Eg:
             //
    初始化WinSock

             //MAKEWORD(2,2)表示使用WINSOCK2版本.wsaData用来存储系统传回的关于WINSOCK的资料.

             WORDwVersionRequested = MAKEWORD( 2, 2 );

             WSADATAwsaData;

             //WSA(WindowsSocKNDs AsynchronousWindows异步套接字)的启动命令

             if( WSAStartup( wVersionRequested, &wsaData ) != 0 )

                       returnFALSE ;

    (2). WSACleanup函数

    int WSACleanup (void);

    WSACleanup函数完成与socket库绑定的解除,并释放socket库所占用的系统资源。该函数应该作为某次socket操作的最后一个函数,否则之后任何socket操作都会导致出错。

    (3) socket函数

    socket函数创建一个socket套接字。

    SOCKET socket( 

     int     af,  //网络通信协议族,一般情况下用AF_INET,表示选择IPv4协议。

     int     type,  //指明协议的采用连接类型  (SOCK_STREAM,SOCK_DGRAM,SOCK_RAW)

     int     protocol  //protocol:指定要用的协议。如果第二个参数type不是SOCK_RAW,则此参数一般是0,表示采用默认协议。如果typeSOCK_RAW,则此参数就可以指定相应的协议,比如IPPROTO_IP表示采用IP协议,IPPROTO_ICMP表示采用ICMP协议。);

    (4). closesocket函数

    int closesocket(SOCKET s);

    closesocket关闭之前打开的socket套接字。

    (5). setsockopt函数

    int setsockopt(SOCKET s,int level,intoptname,const char *optval,int optlen);

    setsockopt函数设置一个socket的参数选项。通常情况下,默认的选项就够用,但扫描器本身的特点是,几乎每一个程序都需要修改其默认的选项,所以该函数也是socket中一个重要的函数。在调用顺序上,如果setsockopt函数在bind函数之前,则设置的项会直到bind函数时才有效。即使setsockopt功能成功,bind函数也会因为setsockopt函数过早调用而失败

    与setsockopt作用相反的一个函数是getsockopt,getsockopt函数的功能是读取一个socket的参数选项,由于其函数参数项数目和各项的意义与setsockopt一样,所以此处不再重复。

    s:由socket函数创建的socket套接字。

    level:设置选项所定义的级别,当前支持的级别主要有SOL_SOCKETIPPROTO_TCPIPPROTO_IP,分别对应于应用层、传输层(TCP)和网络层(IP的设置。

    optname:要设置的选项。这些选项参数一次只能设置一个,所以要同时设置两个或两个以上参数时,需要多次重复调用setsockopt函数,并在每次调用时设置一个参数,如果连续重复设置同一个参数,则以最后一次的设置为有效设置。这些选项参数有:


    optval:一个指向选项值的指针,具体的值由optname决定。

    optlen:一个指向选项值长度的指针。

    Eg:

    // 创建原始套接字

             SOCKET    RawSock = socket ( AF_INET, SOCK_RAW,IPPROTO_ICMP );//注意发送ICMP包涉及的套接字类型:IPPROTO_ICMP

    // 设置接收ICMP数据包(IP层à IPPROTO_IP)的接收超时为1秒(1000ms)

             intnTime = 1000 ;

             intret = ::setsockopt ( RawSock, IPPROTO_IP,SO_RCVTIMEO,(char*)&nTime, sizeof(nTime));

    (6). select函数

    int select(int nfds, fd_set *readfds,fd_set*writefds,fd_set *exceptfds,const struct timeval FAR *timeout);

    select函数的作用是监视阻塞状态下端口的状态,例如当前是否有数据到达,从而进入读端口的状态。

    返回值:如果调用成功,则返回所监视的端口处于“准备”(ready)状态的socket句柄个数,并且将这些句柄保存在一个fd_set结构中;如果超时,则返回0;否则返回SOCKET_ERROR。

    nfds:在很多Linux版本下,该参数用于表示监视的句柄个数;在Windows下,该参数被忽略,系统会自动选择合适的数。

    readfds:指向要监视的可读句柄集合。

    writefds:指向要监视的可写句柄集合。

    exceptfds: 指向要监视的异常句柄集合。

    timeout:最大的超时值,该值指向一个TIMEVAL结构,如果设置为NULL,则表示进入该函数阻塞状态,直到读到结果或超时。

    (7). bind函数可以将一个本地的地址与socket套接字进行绑定。一旦绑定成功,则此后该socket的操作将与该地址有关。

     

    int bind( 

     SOCKET s,   //

     const struct sockaddr *name,   //分配给该sockdet套接字的一个地址SOCKADDR结构。

      intnamelen   // SOCKADDR结构的长度。

    );

    该函数既可用于面向连接的TCP通信中,也可以用于面向非连接的UDP通信中。

    (8). listen函数

    int listen( 

     SOCKET    s, 

     int   backlog //能连接的最大客户端数。如果设置成SOMAXCONN,则服务提供者尽可能地创建最大的值。

    );

    listen函数使用socket状态监听状态,并等待其他socket的连接。该函数仅用于面向连接的TCP通信中,UDP通信是不需要listen函数的。

    (9). accept函数

    SOCKET accept( 

     SOCKET  s,  

     struct sockaddr  *addr, //连接一个sockaddr结构的指针,该指针中保存着远端socket的一些信息  

     int  *addrlen  // sockaddr结构的长度,调用之后,函数会返回实际需要的长度。

    );

    accept函数允许和接收一个远端的连接,该函数仅用于面向连接的TCP通信中,并且只用于服务器端,用于接收客户端通过connect函数发来的连接申请;面向非连接的UDP通信是不需要处理此函数的。

    调用成功后,该函数将会处于阻塞状态,直到有远端的连接,才会返回。从外表上看,程序很像是死掉了,因此除非程序本身没有要求,否则一般建议将此函数放入线程中使用,以避免整个程序像“僵死”一样。

    该函数看似简单,其实比较复杂,也是多线程处理效果的关键,首先调用此函数之前,应该已成功地调用了listen函数。然后在调用该函数时,如果调用成功,则返回一个新的socket,所以如果后面服务端的处理很简单,可以在当前线程中用这个新创建的socket进行处理,俗称“短连接”;如果处理很复杂,并且仍在当前线程中处理,则会影响到accept函数对其他线程通过connect进行连接,此时就需要再创建一个线程,由新建的线程,并使用返回的一个socket专门处理此次连接后的各项操作,俗称“长连接”。

    返回值:如果调用成功,则返回接收远端通过connect连接后,新创建的一个socket.

    Eg:

    int len = sizeof(SOCKADDR) ;

    sockaddr_in ConnAddr ;

    SOCKET ConnSock = accept ( LocalSocket,(SOCKADDR*)&ConnAddr, &len ) ;// 接受连接

    (10). connect函数

    int connect( 

     SOCKET s, 

     const struct sockaddr  *name,  //指向一个sockaddr的结构指针,该结构中保存了要连接的远端主机的IP地址和端口。

      intnamelen  ); 

    connect函数以客户端的身份与远端主机建立连接。在扫描器的应用中,connect是一种简单而有效的连接方式,连接成功,则可以认为对方的端口是打开的

     

    (11). send函数

    int send( 

     SOCKET        s,  

     const char  *buf, //指向一个发送缓冲区的指针。  

     int       len,   // buff缓冲区的长度,以字节为单位。

     int       flags   发送的方法,一般置0。

    );

    send函数发送数据到已建立连接的socket上,该函数既可以用于服务器端,也可以用于客户端,但双方都必须是采用TCP连接

    返回值:如果调用成功,则返回实际发送的字节数;否则返回SOCKET_ERROR。

    (12). recv函数

    int recv( 

     SOCKET   s,  

     char  *buf,  

      intlen, 

      intflags 

    );

    recv函数用于接收从已建立连接的socket上的数据,该函数既可以用于服务器端,也可以用于客户端,但双方都必须是采用TCP连接。参数与上节大同小异。

    (13). shutdown函数

    int shutdown( 

     SOCKET    s, 

     int       how 

    );

    shutdown函数禁止当前的发送或接收。

    很多程序在关闭socket的时候,在收发完成后,直接就调用closesocket函数了,这样做有的时候会使对方仍处于连接中,而已方已断开

    how:要关闭的类型,其中how的取值可以是:


    (14). sendto函数

    int sendto( 

     SOCKET        s,  

     const char *buf,  

     int       len,  

     int       flags,  

     const struct sockaddr  *to,  

     int       tolen   

    );

    sendto函数发送数据报到远端的主机指定的端口上。该函数只能用于面向非连接的通信中。

    (15).recvfrom函数

    int recvfrom( 

     SOCKET        s,  

     char      * buf,  

     int       len,  

     int       flags,  

     struct sockaddr  *from,  

     int    *fromlen  

    );

    recvfrom函数接收远端发过来的数据报。该函数只能用于面向非连接的通信中。

     

    5. 原始套接字

    http://book.51cto.com/art/201202/316546.htm

    上述Socket函数介绍中,提到一个原始套接字(Raw Socket),如果不使用原始套接字,则无论是发送和接收,系统都会自动处理IP包头、TCP/UDP包头的数据,这时用户只需要关心发送和接收的数据本身即可。这种自动处理虽然方便,但也使系统失去了灵活性。而当使用原始套接字时,如果发送数据,系统会将要发送的数据包的前面加上若干字节数据IP头、TCP/UDP;如果接收数据,系统会将接收到的数据包前面加上数据IP头、TCP/UDP头。

    (1). 原始套接字的发送

    原始套接字的发送很简单,但实际编写却很麻烦,这主要是因为需自己填充IP头和TCP头的数据内容,并分别计算IP头和TCP头的校验和。由于不再使用Socket提供的IP和TCP头,所以需要通过setsockopt函数告诉系统使用自己定义的IPTCP,并且虽然所填的是面向连接的TCP头,仍然要使用UDP所专用sendto函数,而不是使用send函数,如图2.2所示。


    (2). 原始套接字的接收

    原始套接字的接收相对复杂,步骤较多,但通常情况下,只要按如图2.3所示的步骤操作即可,每个步骤只有一两行语句,不像“原始套接字的发送”中的填充IP和TCP头那样需要很多行。其中的WSAIoctl函数的SIO_RCVALL参数表示接收经过本机网卡的所有数据包


     

    展开全文
  • 为了保持状态功能,引入了cookie技术。 3.告知服务器意图的HTTP方法有  GET(获取资源):请求报文中没有实体主体,(也能返回执行后的结果);  POST(传输实体主体):请求报文中有实体主体,服务器端根据...

      第二章:简单的HTTP协议

    1.请求的一方称为客户端,返回资源的一方称为服务器端

    2.HTTP协议是无状态协议(不保留之前的请求或响应信息);为了保持状态功能,引入了cookie技术。

    3.告知服务器意图的HTTP方法有

      GET(获取资源):请求报文中没有实体主体,(也能返回执行后的结果);

      POST(传输实体主体):请求报文中有实体主体,服务器端根据实体主体返回执行后的结果;

      HEAD(获取报文首部):只返回响应报文头部,不返回响应报文主体;

      PUT(传输文件):要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置;

      DELETE(删除文件):按请求删除指定URI上的资源;

      OPTION(查询支持的方法):查询请求URI指定资源所支持的方法

      TRACE(追踪路径):在首部字段Max-Forwards中填入数值,每经过一个服务器端就将数字减1,减到0时停止继续传输,客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改/篡改的

      CONNECT(用隧道协议连接代理):主要使用SSL和TLS协议把通信内容加密后经网络隧道传输

    4.HTTP keep-alive(持久连接):只要任意一端没有明确提出断开连接,则保持TCP连接状态。在HTTP/1.1中,所有连接默认都是持久连接。(优点:速度更快)

    5.在持久连接的基础上,管线化技术可以让客户端不用等待响应,直接发送下一个请求。意思就是管线化技术可以使客户端同时发送多个请求。(优点:速度更快)

    6.Cookie是用于保持状态,工作流程如下:

      一、客户端发送请求报文;

      二、服务器端返回的响应报文的首部字段中有一个Set-Cookie的字段,用于通知客户端保存Cookie;

      三、客户端在请求报文的首部字段中加入Cookie值发送;

      四、服务器端根据相应的Cookie值,返回相应的内容。

    转载于:https://www.cnblogs.com/Alfred-ou/p/8915348.html

    展开全文
  • 《GB-T32960.3-2016-电动汽车远程服务与管理系统技术规范第3部分-通信协议及数据格式》 无水印,可复制,书签齐全
  • DHCP技术白皮书

    2014-06-25 16:42:17
    dhcp协议详述阐述,dhcp服务器配置方式说明
  • 《TCP/IP详解》是已故网络专家、著名技术作家W. Richard Stevens的传世之作,内容详尽且极具权*,被誉为TCP/IP领域的不朽名著。  本书是《TCP/IP详解》第1卷的第2版,主要讲述TCP/IP协议,结合大量实例讲述TCP/IP...
  • TCP/IP 协议技术指南

    2008-09-01 15:49:44
    本书介绍TCP/IP及其应用。...等)、互联网打印协议、LDAP目录服务、远程访问协议、 IP安全与防火墙。本书介绍了如何为Windows 9x/NT配 置TCP/IP;还介绍了如何使用TCP/IP应用程序,包括远 程登录、FTP、Web浏览等。
  • 本书全面、系统地介绍了Ip交换技术。内容包括TCP/IP、寻址和选路,IP组播、集成服务、差分服务、LAN交换技术、WAN交换技术及各种最新IP交换技术。全书共分16章,语言流畅、层次清晰。
  • 展示每种协议的实际工作原理的同时还解释了其来龙去脉,新增了RPC、访问控制、身份认证、隐私保护、NFS、SMB/CIFS、DHCP、NAT、防火墙、电子邮件、Web、Web服务、无线、无线安全等内容,每章最后还描述了针对协议的...
  • 1 c语言  《C 专家编程》 2 unix  《unix高级环境编程》 3 TCP/IP  TCP/IP协议 卷一、卷二、卷三

    1 c语言

       《C 专家编程》


    2 unix

       《unix高级环境编程》


    3 TCP/IP

        TCP/IP协议 卷一、卷二、卷三


    4 内核

       《深入理解linux 内核》英文版

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,393
精华内容 557
关键字:

技术服务协议书