网络7层协议
第一层: 物理层
比特流。物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。物理层特性:机械特性、电气特性、功能特性、过程特性。定时接口通信信道上的原始比特流传输。
网卡,光纤是物理层的。
数字传输系统。
asdl技术:对现有模拟电话用户线改造
第二层: 数据链路层
需要一些协议来控制这些数据。
点对点信道数据单元帧。物理寻址,同时将原始比特流转变为逻辑传输线路。将网络层交下来的数据构成帧发送到链路上。把接收到的帧中的数据取出上交网络层。
第三层:网络层
分组,数据报。控制子网的运行,如逻辑编址,分组传输
路由选择
路由器属于网络层,数据包,主要关注ip协议
第四层: 传输层
分段。海量文件传输等,为了保障准确性,切分段落,每个段落需要怎么传,传输层要考虑的。
接收上一层的数据,在必要的时候把数据分割
规定适当的发送数率
主要关注tcp udp协议
第五层:会话层
数据。用户级别的。要建立自动收发包,自动寻址的功能。建立管理应用之间的通信。不同机器上用户之间建立及管理会话。
第六层:表示层
数据。解决不同系统之间通信语法的问题。信息的语法语义以及它们的关联。如加密解密、转换翻译、解压缩
第七层:应用层
数据。http协议,规定发送方,接收方的消息头等
传输控制协议tcp简介
1.面向连接的、可靠地、基于字节流的传输层通信协议
2.将应用层的数据流分割成报文段并发送给目标节点的tcp层
3.数据包都有序号,对方收到则发送ack确认,未收到则重传
4.使用校验和来校验数据在传输过程中是否有误
报文格式共20字节:
源端口号(2字节)
目的端口号(2字节):
序号(4字节):
用来标识TCP发端向TCP收端发送的数据字节流
确认序号(4字节):
由于该报文为SYN报文,ACK标志为0,故没有确认序号(ACK标志为1时确认序号才有效)
一旦连接建立,该值将始终发送(同ACK标志)
首部长度(4位)
标志位(12位):
紧急指针URG(2字节):当Urgent标志置1时,紧急指针才有效,0忽略
ACK: 一旦一个连接建立起来,该标志总被置为1(除了SYN标志为1的报文,其它所有报文的该标志总为1)
PUSH标志:(接收方应尽快将报文段提交至应用层)
RST:重置连接标志,重置由于主机崩溃或者错误连接
SYN:同步序号,用于建立连接过程,SYN=1 ACK=0 连接请求中没有使用稍待的确认域,SYN=1 ACK=1 确认
FIN:传输数据结束标志,用于释放连接,1关闭数据流
窗口大小(2字节):TCP流量控制通过连接的每一端声明窗口大小进行控制(接收缓冲区大小)
检验和(2字节):检验和覆盖整个TCP报文段;强制字段,由发送端计算存储,由接收端进行验证
紧急指针(2字节):当Urgent标志置1时,紧急指针才有效
tcp的三次握手
全双工通信
握手 是为了建立连接,tcp三次握手的流程图如下:
例子
首先a(客户端),b(服务端 )都处于关闭状态,先创建传输进程控制块tcp
seq属于起始值
第一次握手:建立连接,客户端发送SYN包
a 发送 SYN=1,seq=x 进入SYN_SEND状态,等待服务器确认
第二次握手:服务器收到SYN包,必须确认客户的SYN。
b 回传 SYN=1,ACK=1,seq=y, 确认应答序号为x+1 处于SYN-RCVD状态
第三次握手:客户端收到服务器的SYN+ACK包,并向服务器发送确认包,此包发送完毕客户端和服务器进入ESTABLISHED状态。
a 发送 SYN=1,ACK=1,seq=x+1 ack=y+1
tcp四次挥手
挥手是为了终止连接,
第一次 Client发送一个FIN,用来关闭Client到Server的数据传送
a->b FIN=1,seq=u a:FIN-WAIT-1
第二次 Server收到Fin后发送一个ACK给client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态。
b->a ACK=1,seq=v,ack=u+1 b:CLOSE-WAIT a:FIN-WAIT-2
第三次 Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
b->a FIN=1,ACK=1,seq=w,ack=u+1 b:LAST-ACK a:FIN-WAIT-2
第四次 Client 收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1.Server进入CLOSED状态
a->b ACK=1,seq=u+1,ack=w+1 a:等待2msl TIME-WAIT b:CLOSED
TCP的滑动窗口
TCP中窗口大小是指tcp协议一次传输多少个数据
RTT:发送一个数据包到收到对应的ACK,所花费的时间
RTO:重传时间间隔
TCP使用滑动窗口做流量控制和乱序重排
保证Tcp的可靠性
保证tcp流控特性
udp:
面向非连接
不维护连接状态,支持同时向多个客户端传输相同的消息
数据包报头只有8个字节,额外开销较小
吞吐量只受限于数据生成速率,传输速率以及机器性能
尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
面向报文,不对应用程序提交报文信息进行拆分或者合并
http
超文本传输协议
支持客户/服务器模式
简单快速
灵活
无连接
无状态
请求响应步骤
客户端连接到web服务器
发送http请求
服务器接受请求并返回http响应
释放连接tcp连接
客户端浏览器解析html内容
在浏览器地址栏键入URL,按下回车后经历的流程??
dns解析
浏览器,系统,路由器,ips服务器,根服务器缓存,顶级域名服务器缓存
tcp连接
发送http请求
服务器处理请求并返回http报文
浏览器解析渲染页面
连接结束(释放tcp连接,4次挥手)
http状态码
1xx 表示请求已接收,继续处理
2xx 成功--表示请求已被成功接收、理解、接受
3xx 重定向---要完成 请求必须进行更进一步的操作
4xx 客户端错误,请求有语法错误或请求无法实现
5xx 服务端错误--服务器未能实现合法的请求
401 请求未经授权,这个状态代码必须和www-authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
Cookie和Session的区别
Cookie
客户端解决方案
Session
解析客户端请求并操作session id 按需保存状态
Session相对于Cookie更安全
若考虑减轻服务器负担,应当使用Cookie
Http和Https的区别
http tcp/ip协议
https 多了一个 ssl/tls tcp/ip协议
ssl:
为网络通信提供安全及数据完整性的一种安全协议
是操作系统对外的API,SSL3.0后更名为TLS
采用身份验证和数据加密保证网络通信的安全和数据的完整性
https数据传输过程
浏览器将支持的加密算法信息发送给服务器
服务器选择一套浏览器支持的加密算法,以证书形式回发浏览器
浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器
服务器使用私钥解密信息,验证哈希,加密响应信息回发浏览器
浏览器解密响应信息,并对信息验真,之后进行加密交互数据
区别:
https需要到ca申请证书,http不需要
https密文传输,http明文传输
连接方式不同,https默认443端口,http 80端口
https=http+加密+认证+完整性保护,较http安全
Socket简介
socket是对tcp/ip协议的抽象,是对操作系统对外开放的接口
流程:
服务器根据地址类型(ipv4、ipv6)、socket类型、协议创建socket
服务器为socket绑定对应的IP地址和端口号
服务器监听端口号请求,接收用户发来的连接请求,此时服务器没有打开socket
用户创建socket
用户打开socket,并通过IP地址+端口号试图connect服务器的socket
服务器接收到了用户发来的socket连接请求,被动打开socket,开始接收客户端请求,直到用户返回连接信息。这时候服务器 的socket进入堵塞状态,所谓堵塞,即accept();方法一直接收到客户端返回连接信息后才返回,然后开始接收下一个用户 端请求
客户端连接成功,开始向服务器输入状态信息
服务器accept();方法返回,连接成功
客户端写入信息
服务器读取信息
客户端关闭
服务端关闭