TCP/IP协议族
TCP/IP的分层管理
- 应用层
应用层决定了向用户提供应用服务时通信的活动
TCP/IP协议族内预存了各类通用的应用服务 比如 FTP,DNS
HTTP协议属于该层
- 传输层
提供处于网络连接中的两台计算机之间的数据传输
- 网络层
用来处理在网络上流动的数据包
- 数据链路层
用来处理连接网络的硬件部分
发送放从下往上,接收方从下往上通信
IP、TCP和DNS协议
IP协议
- 把各种数据包传送给对方,要保证确实发送到对方那里,两个条件IP地址和MAC地址
确保可靠性得TCP协议
为了准确无误的数据送达目标处,TCP协议采用了三此握手策略
-
第一次握手:
建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
-
第二次握手:
服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
- 第三次握手:
客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因 而产生错误”
URI 和 URL
URI(Uniform Resource Identifier):统一资源标识符
URL(Uniform Resource Locator):统一资源定位符
URI 用字符串标识某一互联网资源,而URL表示资源得地点。
请求报文
请求报文是由请求方法、请求URI、版本协议、可选的请求首部字段和内容实体构成的
服务器接收后返回的响应报文构成:
HTTP是无状态的协议,不会保存之前的请求和响应,HTTP/1.1提供了Cookie技术,就可以管理状态了
Method
GET: 请求服务器的某个资源
POST: 发送请求的参数 服务器处理后 请求的结果
PUT:传输文件,一般不使用该方法
HEAD:获得报文首部,用于却让你URI的有效性及资源更新的日期时间等。
DELETE:用来删除文件,一般不使用该方法
OPTIONS:用来查询针对请求URI指定的资源 支持的方法。响应:Allow:GET,POST…
TRACE: 在响应报文中返回请求报文中的数据
CONNECT:要求用隧道协议连接代理,主要使用SSL安全套接层和TLS传输层安全协议把通信内容加密后经网络隧道传输
持久连接
问题:一个页面可能会加载多个图片,每次请求都会造成TCP连接建立断开,增加通信量的开销
解决:只要任意一端没有提出断开来连接,则保持TCP连接状态,HTTP/1.1默认建立持久连接。
管线化:不要等待响应结束就可以直接发送下一个请求,比如网页还有图片没加载出来就可以点击其他的连接发起请求。
返回结果的状态码
HTTPS = HTTP+加密+认证+完整保护
HTTP的不足
- 1 通信明文,内容可能会被窃听
- 2 不验证通信方的身份,因此有可能遭遇伪装
- 3 无法证明报文的完整性,所以有可能已遭遇篡改
我们把添加加密及认证机制的HTTP称为HTTPS(HTTP Secure)
HTTP是直接和TCP通信。而HTTPS是先和SSL(Secure Socket Layer)通信,再由SSL和TCP通信
SSL是为网络通信及数据完整的一种安全协议
HTTP的瓶颈
- 1 一条连接上只可发送一个请求
- 2 请求只能从客户端开始
- 3 请求/响应首部未经压缩就发送
- 4 发送冗长的首部
- 5 可任意选择数据压缩格式
解决办法
1 - Ajax 异步请求 利用javaScript和DOM的操作
2 - WebSocket 即Web浏览器与Web服务器之间全双共通信标准
推送功能,类似实时通讯 。减少通信量只要建立了WebSocket就会一直保持连接状态
握手·请求 发送HTTP请求时首部字段
Upgrade:websocket
握手·响应 对于之间的请求,返回状态码101 Switching Protocols的响应