一、OSI七层模型
1.物理层
解决包括传输介质、信道类型、数据与信号之间的转换、信号传输中的衰减和噪声等在内的一系列问题;
给出关于物理接口的机械、 电气、功能和规程特性的标准;
面向原始比特流的传输 - 二进制数据在物理媒体上的传输;
2.数据链路层
涉及相邻节点之间的可靠数据传输;
通过加强物理层传输原始比特的功能,使之对网络层表现为一条无错线路;
数据传输过程中提供了确认、差错控制和流量控制等机制;
3.网络层
在通信子网中选择一条合适的路径,使发送端传输层所传下来的数据能 够通过所选择的路径到达目的端;
路径选择:网络层必须使用寻址方案来确定存在哪些网络以及设备在这些网络中所处的位置,不同网络层协议所采用的寻址方案是不同的;
负责引导数据包正确地通过网络,找到通过网络的最优路径,即路由选择;
提供拥塞控制机制以避免阻塞通路、形成网络瓶颈;
如果子网中同时出现过多的分组,它们将相互阻塞通路并可能形成网络瓶颈
解决异构网络互连问题;
4.传输层
OSI 七层模型中唯一负责端到端节点间数据传输和控制功能的层;
承上启下的层;
它下面的三层主要面向网络通信,以确保信息被准确有效地传输;
它上面的三个层次则面向用户主机,为用户提供各种服务;
通过弥补网络层服务质量的不足,为会话层提供端到端的可靠数据传输服务;
为会话层屏蔽了传输层以下的数据通信的细节,使会话层不会受到下三层技术变化的影响;
使用了差错控制和流量控制等机制;
5.会话层
在两个节点间建立、维护和释放面向用户的连接;
在传输连接的基础上建立会话连接,并进行数据交换管理,允许数据进行单工、半双工和全双工的传送;
提供了令牌管理和同步两种服务功能;
6.表示层
关心的是所传输数据的语法和语义;
主要涉及处理在两个通信系统之间所交换信息的表示方式,包括数据格式变换、数据加密与解密、数据压缩与恢复等功能;
7.应用层
负责为用户的应用程序提供网络服务;
不为任何其他 OSI 层提供服务,只为 OSI 模型以外的应用程序提供服务;
包括为相互通信的应用程序或进行之间建立连接、进行同步,建立关于错误纠正和控 制数据完整性过程的协商等;
包含大量的应用协议,如分布式数据库的访问、文件的交换、电子邮件、虚拟终端等;
总结
传输层、会话层、表示层和应用层则被称作主机层,是用户所面向和关心的内容;
HTTP协议 - 应用层
TCP协议 - 传输层
IP协议 - 网络层
TCP/IP是传输层协议:主要解决数据如何在网络中传输;
HTTP是应用层协议:主要解决如何包装数据;
Web: 使用HTTP协议作传输层协议,以封装HTTP文本信息,然后使用TCP/IP作传输层协议,将文本发送网络上;
Socket:是对TCP/IP协议的封装,不是协议,而是API,通过Scoket才能使用TCP/IP协议;
二、TCP - transmission control protocol
1.概念
TCP是一种面向连接的、可靠的,基于字节流的传输层通信协议;
TCP工作在网络OSI七层模型只能够的第四层-传输层;
2.TCP的三次握手
简述:
SYN - synchronous 同步标志
ACK - acknowledgement 确认标志
seq - sequence number 序列号
1.客户端发送报文(SYN=1,seq=x),进入SYN_SEND状态,等待服务器响应;
2.服务器确认报文(SYN=1,seq=y,ACK=1,Ack N=x+1),发送报文,进入接受状态;
3.客户端确认响应,发送报文(SYN=0,ACK=1,Ack N=y+1),建立客户端和服务器连接;
详细描述:
1.客户端发送SYN标志位为1,Sequence Number为x的连接请求报文段,然后客户端进入SYN_SEND状态,等待服务器的确认响应;
2.服务器收到客户端的连接请求,对这个SYN报文段进行确认,然后发送Acknowledgment Number为x+1(Sequence Number+1),SYN标志位和ACK标志位均为1,Sequence Number为y的报文段(即SYN+ACK报文段)给客户端,此时服务器进入SYN_RECV状态;
3.客户端收到服务器的SYN+ACK报文段,确认ACK后,发送Acknowledgment Number为y+1,SYN标志位为0,ACK标志位为1的报文段,发送完成后,客户端进入ESTABLISHED状态,服务端收到客户端的Ack后,进入ESTABLISHED状态;
established
完成TCP三次握手,客户端和服务器端成功地建立连接,可以开始传输数据;
在第一次握手的时,SYN攻击(属于DDOS攻击中的一种典型方式)即模拟客户端短时间伪造大量不存在的IP地址,并不断向服务器发送SYN包...
3.TCP的四次挥手
简述:
1.客户端发送FIN报文(Seq=x+2,Ack N=y+1),进入FIN_WAIT_1状态;
2.服务器接收FIN报文,发送ACK报文(Ack N=Seq+1=x+3),客户端进入FIN_WAIT_2状态;
3.服务器发送FIN报文(Seq=y+1),进入LAST_ACK状态;
4.客户端接收FIN报文,发送ACK报文(Ack N=Seq=1=y+2),进入FIN_WAIT状态;服务器接收ACK报文,进入CLOSED状态,客户端等待未收到回复,进入CLOSED状态;
详细描述:
1.客户端发送Sequence Number为x+2,Acknowledgment Number为y+1的FIN报文段,客户端进入FIN_WAIT_1状态,即告诉服务端没有数据需要传输了,请求关闭连接;
2.服务端收到客户端的FIN报文段后,向客户端应答一个Acknowledgment Number为Sequence Number+1的ACK报文段,即应答客户端你的请求我收到了,但是我还没准备好,请等待我的关闭请求。客户端收到后进入FIN_WAIT_2状态;
3.服务端完成数据传输后向客户端发送Sequence Number为y+1的FIN报文段,请求关闭连接,服务器进入LAST_ACK状态;
4.客户端收到服务端的FIN报文段后,向服务端应答一个Acknowledgment Number为Sequence Number+1的ACK报文段,然后客户端进入TIME_WAIT状态;服务端收到客户端的ACK报文段后关闭连接进入CLOSED状态,客户端等待2MSL后依然没有收到回复,则证明服务端已正常关闭,客户端此时关闭连接进入CLOSED状态
三、UDP - user datagram protocol
1.UDP用户数据协议作用:
将网络数据压缩成数据包(一个二进制数据的传输单位)的形式;
2.工作机制
发送端:UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机能力和传输宽带的限制;
接收端:UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
3.特点
UDP是一个无状态的传输协议,因此传递数据非常快;
UDP协议相对于TCP协议,排除了信息可靠传递机制(减少数据包分组、组装、排序的过程需要的时间)
UDP不提供复杂的控制机制,利用IP面向无连接的通信服务。
丢包,不提供重发;
无法进行流量控制等避免网络拥塞的行为;
顺序不纠正;
数据不处理,原样发送;
4.UDP应用
适合可靠性要求不高或可以保障可靠性的应用程序,如DNS、TFTP、SNMP等
IM、音频、视频、普通数据可以采用UDP协议传输数据;
面向数据报方式
网络数据大多为短消息
拥有大量Client
对数据安全性无特殊要求
网络负担非常重,但对响应速度要求高
4.TCP和UDP区别
TCP | UDP | |
---|---|---|
是否连接 | 面向连接如打电话要先拨号建立连接) | 无连接(即发送数据之前不需要建立连接) |
传输可靠性 | 可靠(通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达) | 不可靠(尽最大努力交付,即不保证可靠交付) |
应用场合 | 传输大量的数据 | 少量数据 |
速度 | 慢 | 快 |
数据处理 | 在传送数据段的时候要给段标号 | 不处理传输数据 |
负载较高,采用虚电路 | 采用无连接 | |
发送方要确认接收方是否收到数据段(3次握手协议 | ||
采用窗口技术和流控制 | ||
面向对象 | 面向字节流,实际上是TCP把数据看成一连串无结构的字节流 | 面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低 |
传输方式 | 每一条TCP连接只能是点到点的 | 支持一对一,一对多,多对一和多对多的交互通信 |
首部开销 | 首部开销20字节 | 首部开销小,只有8个字节 |
信道 | 逻辑通信信道是全双工的可靠信道 | 是不可靠信道 |
5.其他
socket是对TCP/IP协议的封装和应用,让我们更简单的使用TCP/IP协议;
TCP/IP协议是传输层协议,主要解决数据如何在网络中传输;
HTTP是应用层协议,主要解决如何包装数据;
四、HTTP连接
1.概念
HTTP协议:超文本传送协议(HTTP:Hypertext Transfer Protocol)
是保证客户端和服务器之间的通信;
是建立在TCP协议上的一种应用;
HTTP连接:最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。 由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”;
要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。
若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开;
2.GET和POST
GET | POST | |
---|---|---|
是否缓存 | YES | NO |
是否保存在浏览器历史记录 | 参数会保留记录中 | 参数不会保留记录中 |
是否可做书签 | YES | NO |
安全性 | 所发送的数据是 URL 的一部分 在发送密码或其他敏感信息时绝不要使用 GET |
参数不会被保存在浏览器历史或 web 服务器日志中 |
是否有长度限制 | YES 255字节 | NO |
使用场景 | 获取数据 | |
传参方式 | 使用URL或Cookie | 将数据放在Body中 |
查询字符串(key/value) | 请求的URL中发送的 | 请求的HTTP消息主体中发送的 |
后退或刷新 | 数据重新提交 | |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码 |
数据类型 | 只允许 ASCII 字符 | 没有限制。也允许二进制数据 |
可见性 | 数据在URL中对所有人可见 | 数据不显示字啊URL中 |
五、HTTPS
1.概念
是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL(Secure Sockets Layer);
HTTPS协议的主要作用可以分为两种:
一种是建立一个信息安全通道,来保证数据传输的安全;
一种就是确认网站的真实性;
2.原理:
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。 1.客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
2.Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
3.客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
4.客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
5.Web服务器利用自己的私钥解密出会话密钥。
6.Web服务器利用会话密钥加密与客户端之间的通信。
3.区别于Http:
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
4.优点:
使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”
5.缺点:
HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行
6.Https请求的过程
eg:客户端输入账号、密码后,点击登录,通过https请求直到客户端收到服务器返回的数据前,描述这个过程:
六、Socket
1.概念
socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含网络通信的五种信息:
1.连接使用的协议
2.本地主机的IP地址
3.本地进程的协议端口
4.远地主机的IP地址
5.远地进程的协议端口
2.建立Socket
建立Socket至少需要一对套接字,一个运行于客户端称为ClientSocket,一个运行于服务端称为ServerSocket。
套接字连接过程:
1.服务器监听
2.客户端请求
3.连接确认
3.Socket使用的库函数
1.创建Socket
Socket(af,type,protocol) //建立地址和socket的联系
bind(sockid,local,addr,addrlen) //服务器侦听客户端的请求
listen(Sockid,quenlen) //建立服务器/客户端的连接(面向连接TCP)
2.客户端请求连接
Connect(sockid,destaddr,addrlen) //服务器端等待从编号为sockid的Socket上接收客户端连接请求
newsockid=accept(Socketid,Clientaddr,paddrlen)//发送/接收数据
3.面向连接
send(sockid,buff,bufflen)
recv()
4.面向无连接
sendto(sockid,buff,...,addrlen)
recvfrom()
5.释放Socket
close(sockid)
4.eg:
七、JSON和XML
1.概念
JSON(JavaScript Object Notation):
是一种轻量级的数据交换格式,具有良好的可读性和便于快速编写的特性。
可在不同平台之间进行数据交换;
采用兼容性很高的、完全独立于语言文本格式,同时具备类似C语言的习惯体系的行为,这些特性使其成为理想的数据交换语言。
XML:
扩展标记语言(Extensible Markup Language);
用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型;
是一种允许用户对自己的标记语言进行定义的源语言;
使用DTD(document type definition)文档类型定义来组织数据,格式统一,跨平台和语言;
合适Web传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据;
2.优缺点
XML | JSON | |
---|---|---|
优点 | 1.格式统一,符号标准 2.容易与其它系统进行远程交互,数据共享比较方便 |
1.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小 2.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取 3.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析 4.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取 5.JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护 |
缺点 | 1.文件庞大,文件格式复杂,传输占带宽 2.服务器端和客户端需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护 3.客户端浏览器之间解析XML方式不一致,需要重复编写很多代码 4.服务器端和客户端解析XML花费较多资源和时间 |
1.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性 2.JSON格式目前在Web Service中推广还属于初级阶段 |
可读性 | 可读性较好 | |
可扩展性 | XML都能扩展 | 部分能扩展 |
编码难度 | 编码工具多,难度大 | 编码难度小 |
解码难度 | 难道大 | 非常容易 |
流行度 | 广泛使用 | 刚开始,潜力无限 |
解析手段 | ||
数据体积 | 数据大,传输慢 | 数据小,传输快 |
数据交互 | 与JS的交互更方便,易解析 | |
数据描述 | 好 | 差 |
使用场景 | 合适大数据的处理 | 解析较少数据 |
参考资料:
1.TCP
2.XML和JSON区别
3.Socket和Http的区别
4.GET和POST区别
GET和POST区别+Demo
5.TCP和UDP
6.Socket
7.Socket-IM
8.Https双向认证
9.Http和Https区别
10.Https请求过程描述