目录
1. 基本概念
2. HTTP-> HTTPs
3. IPv4->IPv6
1. 基本概念
物理层、数据链路层、网络层、传输层、应用层
网络层协议
IP
应用层协议
HTTP、FTP、TELNET
传输层协议
TCP(传输控制层协议):面向连接(3次握手)、可靠、点对点
基于IP协议。TCP/IP 是一组Internet协议族,TCP协议和IP协议是其中保证数据完整传输的两个基本协议。
第一次握手:
客户端向服务端:请求我想连接
客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:
服务端向客户端:同意连接
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:
客户端向服务端:收到同意连接请求
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
UDP(用户数据报协议):非连接、不可靠、点对多点(用于视频)
不用和服务器进行3次握手,只负责将数据报发出去,不管接收方是否接收到,因此是一种不可靠的传输会造成数据丢包,也因此传输速度快。
HTTP超文本传输协议(应用层协议)
分为请求报文和响应报文。请求报文包括请求头和数据,响应报文包括响应头和数据。基于TCP、短连接(发送一次请求后就断开,再次请求时仍需连接)。
优点
1.基于应用级的接口,使用方便
2.要求开发水平不高,容错性强
缺点
1.传输速度慢、安全性差,数据包大。
2.实现实时交互时服务器性能压力大
Socket
有两种:面向连接(基于TCP),必须要指定一个socket目的地)。非连接(基于UDP),无需要指定一个socket目的地。
优点
1.传输数据为字节级,可自定义,数据量小,时间短,性能高。
2.适合实时交互
3.可加密,数据安全性高
连接过程
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2、客户端请求:客户端的套接字提出连接请求,要连接的目标是服务器端的套接字(必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求)。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端
套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。
URL
URL(统一资源定位符)
协议://域名/具体路径?参数1=值&参数2=值
用于规范获取资源的地址
常用协议
http://超文本传输协议(远程网络资源)
file://本地计算机上的资源
ftp://共享主机的文件资源
url需满足
1.必须是ASCII 字符(用%+两位十六进制数来替换非 ASCII 字符,比如中文就要进行处理)
2.不能包含空格
JSON(传输数据的格式)
JSON最外层必须是字典或数组
字典(即对象) { }
键类型可以是:字符串型
值类型可以是:字典、数组、整型、浮点型、布尔型、字符串型、null
数组 [ ]
注意:
NSArray、NSDictionary中只能存放类类型的对象,所以
用 NSNumber(NSValue的子类) 封装Int、Float、Double、Bool
用 NSNull 封装nil
例:
{
"k0":null,
"k1":"sb”,
"k2":123,
"k3":true,
"k4”:[1,2,3],
"k5":{
"key5":55
},
}
客户端与服务端交互
客户端通过网络
上传数据(到服务器):保存
获取数据(从服务器):显示
[中间数据传输格式:JSON(通常)]
客户端与服务端交互(2种方式)
pull:客户端向服务端请求数据,服务端从数据库中获取数据返回给客户端。pull的请求方式
增:PUT 删:DELETE 改:POST 查:GET
最常用:GET和POST,GET传输不安全且对传入参数的长度有限制。
GET
参数会拼接在地址后(?参名=参值&参名=参值),不安全。有长度限制。
POST
相对安全,没有长度限制。
push:远程推送
同步请求和异步请求的区别
同步请求会在获取到后台数据后继续往下执行,会造成UI卡顿。(基本不用)
异步请求会创建线程进行请求。
2. HTTP-> HTTPs
加密分为
1、对称加密
双方使用相同的秘钥,加密数据然后传输再解密读取。
[双向加密]
2、非对称加密
客户端用公钥将数据加密后传输给服务端,服务端使用秘钥进行解密。服务端则直接将明文发送给客户端。
[单向加密] [消耗资源]
获取公钥时应避免劫持篡改(服务端加密,客户端解密)
不同客户端的秘钥不能是同一个(否则一个泄漏影响全部)
HTTP(超文本传输协议)
并不具备加密和验证能力(服务端不能确认客户端是否是伪客户端、客户端无法确认服务端是否是伪服务端、无法阻止海量请求下的DoS攻击)。因此传输中的数据很容易被窃取和篡改。
浏览器在开发者模式下可以获取到 地址、参数、服务器返回的数据
App则可以通过paros、青花瓷拦截获取
篡改者(同时担当 伪客户端和伪服务端)能作为客户端和服务端的中间者,将数据篡改后再交给双方。
HTTPs(超文本传输安全协议)
[会将明文进行加密后传输,仅保证传输过程中安全,不包括客户端被破解的情况]
[目前的技术无法实现防止第三者拦截,只能对双向传输的数据进行加密(使用对称加密)]
HTTPs = HTTP(通信)+ SSL/TLS(层次位于HTTP和TCP之间,信息加密-防窃取、完整性校验-防篡改、身份验证-防劫持)
SSL(secure sockets layer)安全套接层
TLS(transport layer security)传输层安全(SSL的升级版)
握手时使用非对称加密
传输数据时使用对称加密
保证数据完整性使用hash算法(数字签名)
握手 [TLS协议]中最重要的部分
通信双方协商连接参数并完成身份验证的过程
步骤
1、客户端将支持的加密规则列表发送给服务端。
2、服务端将选择的加密算法和hash算法以及自己的身份信息 以证书(包含公钥证书、证书颁发机构)的形式发送回客户端。
3、客户端验证证书的合法性,如果验证通过,使用一串随机数作为秘钥,并使用证书中的公钥对其进行加密。用hash算法计算握手消息的hash值,并用秘钥进行加密。将加密后的秘钥和hash值发送给服务端。
4、服务端使用秘钥(对应证书公钥)解密出秘钥(那串随机数),并解密出hash值,用hash算法计算握手消息的hash值。比较2个hash值,一致则握手成功。
客户端请求公钥,服务端将客户端需要的公钥使用数字证书签名后发给客户端,客户端使用证书机构的公钥解签获取公钥(服务端掌管证书机构的数字证书,客户端掌管证书机构的公钥)。客户端将秘钥用公钥加密后传给服务端(非对称加密)。
数字证书
由受信任的数字证书颁发机构CA在验证服务器身份后颁发,证书中包含了一个密钥对(公钥和私钥)和所有者识别信息。
非CA机构(不受信任的机构)颁发的证书和自签名证书 都是不受信任的。
3. IPv4->IPv6
IP协议(网络层协议)
是整个TCP/IP协议簇中最重要的协议。提供无连接(不可靠)数据包传送服务(数据交给IP协议包装后 发送到目标主机 解包装,数据很大时会分解然后包装)。物理链路层之上,屏蔽了各种不同物理链路的差别,因此能将各种不同介质的网络互联起来。
工作对象:数据包(根据IP地址传送)。
IP地址:Internet上主机唯一标识[主机联网后会被分配IP地址],由网络ID(区分不同网络)+主机ID(区分同一网络下的主机) 组成。IP地址标识主机与Internet的连接关系而不是标识主机(即主机移动位置重新入网时地址变动)。地址存在浪费。
网络序、主机序
整数在计算机中的表示存在差异:8位(不存在区别),16位、32位、64位(存在区别)
造成区别的原因:
低内存地址的字节作为整数的低位
高内存地址的字节作为整数的低位
因此TCP/IP协议必须规定网络标准字节序(重要位先发送,即第二种方式)。源主机序->网络序->目标主机序
3.1 IPv4
IP数据包 服务类型字段 数据帧 IP选项 记录路由选项 时间戳选项3.1.1 数据包
版本:当前版本号为4
头部长:包头的长度,数据以上部分(单位:32位),除去IP选项后为5
服务类型:优先权(重要程度,已被忽略),D(最小延时)T(最大吞吐量)C(最高可靠性)R(最小费用),可都置为0,只能有一个置1。
总长:包头+数据(单位:8位),2的16次方-1(65535)个 8位。实际应用中不会有这么长,有其他限制原因,物理网络的这个限制(帧数据区即IP数据包)称为最大传输单元MTU,以太网的MTU为1500(个8位)。超过则分片和重组。
标识:标识原属同一数据包(因为被分解)。
标志:前两位固定0,第三位为0表示结束,为1表示还有分片。
片偏移:有偏移则为分片(或标志为1则也是分片)。
TTL:2的8次方-1(255),每经路由器转发-1,为0则消失并向源主机发送错误数据包。
协议:数据来源于/上交至上层哪个协议
头部校验和:保证头部完整性。源主机先将该字段全部置0,将头部分按16位分开,反码求和,结果放在该部分。目标主机重新算出结果比较是否相同。
IP选项:可选,进行网络调试。长度不定,不够32位补0。
复制:(分片时)为1则将该选项复制给每一个分片,为0则只复制给第一个分片。
选项类:所属类别。四种:1、3保留,0表示数据包和网络控制选项,2表示调试和测量选项。
选项号:区别不同选项
记录路由选项:记录从源主机到目标主机经过的(指定数量,超过则不再记录)的路由器。长度字段:IP个数*4+3。指针初始设置为4,添加一条则+4。
时间戳选项:和记录路由选项功能类似,多了一个经过路由的时间。溢出位:表示空间已满不再记录。标志位:处理方式(0:只记录时间戳不记录路由IP地址,指针加4;1表示时间戳+路由IP地址,指针加8;3表示记录的路由IP已由源主机规定好,指针和溢出字段无效,经过路由时查询记录有则记录时间)。
分片和重组
源主机或路由器(因为路由器会连接两种不同性质的网络)将超过长度限制的IP包分解成小包,传输至目标主机再重组(只能是目标主机,避免路由器负担过重---需要保存并等待所有分片到达)。超过时间分片未全部到达则丢弃。
3.1.2 IP地址分类
A(适合大公司)
B(适中)
C(适合小公司)
D类多播地址
E类保留地址
32位二进制整数
11001010 01110111 00001001 00011110 (可读性:202.119.9.30)
IPv4地址
IPv4地址范围
特殊地址
私有地址
超网技术
一个300人的公司,如果用2个C类地址,会有2个不同的网络,2个路由表项。如果使用B类地址址,又会浪费65234个地址。(解决:超网技术)
将多个连续的C类地址合并在一起,使用CIDR(无类域间路由)技术来消除IP类别。
192.168.53.27/20 表示前20位用来区分网络,后12位表示终端,这样终端数扩大至2的12次方。
子网技术
通常为了安全,希望一个网络可以分为多个子网。(解决:子网技术)
子网技术:将主机ID分为子网ID+主机ID
子网掩码:32位二进制数(1和IP类别可以区分出子网,0表示主机)。
一个网络只能支持一个子网掩码,VLSM技术则支持每一个子网一个子网掩码。一个C类地址需要分为4个子网,则子网掩码为255.255.255.192(后8位:11000000),一个子网61个地址,若一个子网需要100个地址,一个子网需要50个地址...,则需使用VLSM技术
3.2 IPv6地址
IPv4的缺点
1.地址空间的局限性
IP地址空间不足(危机由来已久、是升级的主要动力),IP分类导致的地址浪费。
2. 性能
性能上还能够进一步改进。
3.安全性
由网络层以上的层负责(而IPV6可负责安全)。
4.配置
比较复杂
改进(区别)
扩展地址
IPv4是32位
IPv6是128位,取消广播地址换成任意点播地址,单播地址和多播地址基本不变。
简化头格式
IPv4至少12个字段,没选项时20字节,有选项时可高达60字节。
IPv6字段固定(去掉IPv4部分字段)提高路由效率。
增强对扩展和选项的支持
IPv4是加在可选的选项中
IPv6是加在数据中(单独的扩展头中,需要时才检查)
流标记
IPv4对所有包同等对待
IPv6对从同一源到同一目标源的包序列(流)特殊处理。
身份验证和保密
IPv4没有做任何安全处理,将安全交给了上层协议
IPv6使用2种安全性扩展:IP身份验证头(AH)和IP封装安全数据(ESP)。
发送方计算数据包摘要,将结果存入身份验证头,接收方重新计算并和身份验证头做比较(避免中途被篡改)。
对整个IP包(不但是数据区,还有包头)加密进行隧道传输(VPN虚拟专用网络的基础)。
IPv6数据包3.2.1 数据包
IPv4包头以32位为单位,
IPv6包头以64位为单位,总长度:40个8位。
版本:当前版本6
业务流类别:包所属类别,用于路由器提供不同服务,默认值0。
流标签:标识同一业务流的包(流标签+源主机地址:唯一标识一个包)。让同一业务流的包经过同一路径(经由不同路径到达可以避免突发事件,但效率低)。
净荷长:数据长度(包括扩展头)
下一个头字段:类似于IPv4的协议字段:数据来源于/上交至上层哪个协议。也可以用来表明扩展头是否存在。
跳极限:类似于IPv4的TTL字段,每经一次路由减1,为0时则丢弃。
IPv6的安全性
安全目标:
1、身份验证、完整性(发送接收双方的身份、传输接收的数据一致)
2、机密性(只能被指定接收方读取)
IPv6使用身份验证头(AH)和封装安全性数据(ESP)来实现。
IPsec(兼容IPv4和IPv6)由身份验证头(AH)和封装安全性数据(ESP)来实现
提供必要的工具,用于一个系统和其他系统之间彼此接受的安全性进行协商,选择一个都可接受的算法。
可以做到如下:
1、访问控制。没有正确的密码就不能访问,调用安全性协议控制秘钥的安全交换,用户身份验证可以访问控制。
2、无连接的完整性。可以不参照其他包的情况下,使用安全散列技术对单独的包进行完整性校验。
3、数据源安全性验证。使用数字签名对包内含的数据进行标识。
4、对包重放攻击的防御(包计数器机制)。攻击者将目标主机已接收过的包重复发送。
5、加密。只允许身份验证通过的访问数据。
6、有限的业务流机密性。IP隧道和安全网关。
安全关联(SA)是IPsec的基本概念,包含唯一标识一个安全性连接的数据组合,单向连接。每个SA由目的地址和安全性参数索引(SPI:使用SA的IP头类型,如AH或ESP。32位,用于对SA进行标识及区分同一个目的地址所链接的多个SA)组成。
数据传输有隧道模式和透明模式2种。透明模式:两个通信系统直接建立SA,源主机产生数据,加密或签名发送至目标主机,目标主机解密或身份验证(要暴露IP头)。隧道模式:两个通信系统不直接通信,源主机将数据发送到一个安全网关,网关再将数据发送到目标主机(不暴露IP头)。
AH头
必须放在路由扩展头后,在只能由目标主机处理的扩展头之前。
作用:
1、为IP数据包提供完整性服务。
2、为IP数据包提供身份验证。
3、若在完整性服务中使用了公共密钥数字签名算法。
4、使用顺序号字段防止重放攻击
ESP头
放在路由扩展头之后,有AH则在AH之后,它之后的都会被加密
作用:
1、加密数据包(机密性)。
2、使用公共密钥加密对数据来源进行身份验证。
3、由AH提供的序列号机制提供对抗重放服务。
4、使用安全性网关提供有限的业务流机密性。
分片:
IPv4的分片方式,使路由器增加额外开销。
IPv6只会在源主机进行分片,目标主机进行重组。发送数据前先发送一个包用来获取从源主机到目标主机的数据链路中最小的MTU。
扩展头:
IPv4放在可选中,路由器会将有该选项的包放在最后处理。
IPv6将扩展头放在数据中(开头处)。
逐跳选项头:(必须紧随头之后,数据开头) ,有 巨型数据选项(数据长度超过65535时必须加)、路由提示选项(经过路由时,希望路由查看)
路由头:途经的路由地址列表。
分段头:一个分段偏移值、一个更多段标志、一个标识符字段
目的地选项头:交由目标主机检查的信息。
身份验证头(AH):对头、扩展头、数据进行校验和计算。
封装安全性数据头(ESP):(最后一个扩展头,不加密),标识剩余数据已加密并为目标主机提供足够解密信息。
3.2.2 IPv6地址的分类
IPv6 地址分为
单播(单接口)
可集聚全球地址;未指定地址(全0地址);回返地址;嵌有IPv4地址的Ipv6地址;基于供应商和地理位置的供应商地址;OSI网络服务访问点地址(NSAP);网络互联包交换地址(IPX);
多播(一组接口,一般属于不同节点。传至所有接口,)
前8位全1,表示多播。第二个字段:标志字段(4位),前3位保留,第四位(1:Internet编号机构指定的熟知地址0:临时地址)。第三个字段:范围字段(4位),0~15,多播的范围(同一机构、同一本地网、同一站点、任何节点)。第四个字段:组标识符字段(112位),标识多播组(标志字段+范围字段+组标识符字段:标识一个组)。
泛播(一组接口,一般属于不同节点。传至其中一个接口)。
可分为子网前缀和接口标识符
表示方式为 X:X:X:X:X:X:X:X/60
/60:表示前60位为子网
X:是一个四位16进制整数。如果中间全是0可以这样(::只能出现一次):3E4C::1
如果兼容IPv4,X:X:X:X:d.d.d.d IPv4地址格式 ::127.0.0.1
IP地址指定给网络接口而不是节点。一个节点可以拥有多个网络接口(具备多个IP地址),一个网络接口对应多个地址(一个地址只能有一个网络接口)至少一个。
3.2.3 IPv6带来的影响
物理层
路径MTU发现、地址解析协议(ARP,适应地址扩展至128位)
传输层
UDP、TCP基于IP,影响最大。适应地址扩展至128位、IPv6支持移动IP但TCP对移动处理有问题(传输时,地址变换后不再认为是同一地址)
应用层
应用需要更换地址以兼容IPv4和IPv6。
网友评论