1)TCP/IP、网络层次
OSI七层网络协议、TCP/IP四层、五层协议图
TCP与UDP
运输层的两个重要协议,TCP(Transimission Control Protocal)和UDP(User Datagram Protocal),区别
- 定性:可靠的、面向连接的的服务 VS 不可靠的最大能力、无连接面向报文的服务
- 能力:流量控制、连接管理,不提供多播广播 VS 没有拥塞控制、支持一对一 一对多 多对多
- 表现:首部开销大 VS 首部开销小
- 数据格式:面向字节流 VS 面向报文
- 应用:HTTP 电子邮件 WWW VS DNS IP电话 远程终端接入
三次握手
A:你听得到吗?B:我听得到,你听得到吗?A:我听得到。 连接建立。
只两次握手行不行?不行,第三次握手确认,是防止已经失效的连接请求突然又传送给了B,导致错误。举例如下:
A: 我等下给你发邮件说件事?B:好的
正常情况:A开始发邮件,网络太差,第一次没发出去(丢失了)。第二次发出去了。B收到了A的邮件。
存在一种异常情况:A开始发邮件,服务器堵了,第一次的邮件堵在路上了,第二次发又发出去了。B收到了A的邮件(第二封)。B接着A的第一封邮件也收到了。此时,B以为A又想找他说事儿,B回复A好的等你说,实际上A并没有想和B说事,也不会理睬B,而B就一直傻傻等待着。
四次挥手
A:Hi,我不想说了,要挂断了 B:稍等下,我还有话没说完,BalaBala
B:好了,我已经说完了,我也不说了A:好的,我知道了
连接断开
为什么要四次挥手?
B收到A说不想说时,可能还有一句话没说完,即ACK和FIN不是同时进行的;
A在最后一次说好的,我知道了,还需要等待2MSL(最长报文段寿命)时间:1确保最后A发出的ACK B能够收到;2 防止已经失效的连接请求突然又传送给了B。2MSL时间后,本连接产生的所有报文都从网络中消失了。
2)报文格式
报文三部分:起始行Start line、首部Head、主体Body
- 起始行: 请求行—— 方法、URL和协议版本;响应行——协议版本、状态码和状态说明
- 首部: Key:Value(其中Value可以是以空格分隔的多个item,item的形式可以是k=v),例如:
WWW-Authenticate: Basci reaml="baidu"
首部和主体之前,用一个空行(CRLF)分隔(HTTP首部总是以空行来结束,即使没有首部和实体也要符合这个规则)
- 主体:任意数组组成的数据块
3)请求方法
并非所有的服务器都实现了这些方法:
GET:要求服务器提供某资源;
POST:向服务器输入数据,通常用于支持HTML中的表单;
PUT:在服务器上创建一个由请求URL命名的以主体为内容的新文档;
DELETE:删除服务器上以URL命名的资源;
HEAD:类似GET,但只要求提供资源的首部,查看资源的信息如类型、是否存在or修改TRACE:用于追踪请求在穿越防火墙、带来、网关等其它程序后变成什么样子(少有服务器支持);
OPTIONS:请求服务器告知其所支持的方法,或者对某个资源支持的方法。
4)状态码
1XX——信息性(1.1版本引入,较少用)
2XX——成功(一组表示成功的状态,分别对应于不同类型的请求)
3XX——重定向(提供一个替代的位置or一个替代的响应)
4XX——客户端错误(请求有语法错误或请求无法实现)
5XX——服务端错误(服务器未能实现合法的请求)
常见的
5)报文首部
分类:通用首部\请求首部\响应首部\实体首部\扩展首部
通用首部是请求、响应都会存在的首部,如Cache-Control\Connection\Date\MIME-Version\Pragma\Update;
请求首部:Accept-*\Authorization\Cookie\Client-IP\From\Host\Referer\UA-*\User-Agent\If-*
响应首部:Age\Public\Server\Vary\Set-Cookie\WWW-Authenticate
实体首部:Allow\Content-*\Etag\Expires\Last-Modified\Location
扩展首部:Cookie\Client-IP\X-Forwarded-For
6)报文主体Body
HTTP要传输的内容:图片、视频、HTML文档、软件程序、电子邮件
HTTP 请求的 body 主要用于提交表单场景。实际上,HTTP 请求的 body 是比较自由的,只要浏览器端发送的 body 服务端认可就可以了。一些常见的 body 格式是:application/json、application/x-www-form-urlencoded、multipart/form-data和text/xml。
我们使用 HTML 的 form 标签提交产生的 HTML 请求,默认会产生 application/x-www-form-urlencoded 的数据格式,当有文件上传时,则会使用 multipart/form-data。
7)版本及演进

HTTP/2致力于解决什么问题?交互数据量大;并行链接性能和复杂度高
HTTP/2提供了什么新特性?基于Google的SPDY协议,与HTTP/1.1版本的不同:
- 二进制协议而非文本协议;
- 可复用的并行链接处理能力;
- 压缩了的请求头部;
- 服务端推送机制;
相关阅读: