TCP
TCP 是面向连接的(就好像是打电话一样,通话之前需要先拨号建立连接,通话结束后要挂机释放连接)
每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)
TCP提供可靠支付的服务。通过TCP连接传送的数据,无差错,不丢失,不重复,并且按顺序到达
TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。
TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据
通过字节流。TCP中的流(stream)指的是流入进程或者从进程流出的字节序列
"面向字节流"的含义是: 虽然应用程序和TCP的交互是一次一个数据块(大小不等)
但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流
建立连接的过程
- 第一次握手:客户端发送SYN包(seq=x)到服务器,等待服务器确认
- 第二次握手:服务器收到SYN包,生成ACK包 : (ack=x+1),同时自己也发送一个SYN包(seq=y),及SYN+ACK包
- 第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1), 此包发送完毕,完成三次握手
为什么要3次握手
三次握手最主要的目的就是双方确认呢自己与对方的发送与接收是正常的
终止连接的过程
- 第一次挥手: 主动广播发送一个FIN,用来关闭主动方到被动关闭方的数据连接
- 第二次挥手: 被动关闭防收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1
- 第三次挥手: 服务器将最后的数据发送完毕后,就像客户端发送连接释放保温,被动关闭方发送一个FIN,用来关闭被动方到主动方的数据传送
- 第四次挥手: 主动关闭方收到FIN后,发送ACK给被动关闭方,确认序号为收到序号+1,然后主动关闭方进入TIME-WAIT(时间等待)状态,必须经过2*MSL(最长报文段寿命)的时间才进入CLOSED状态
导致连接复位RST的原因
访问不存在的端口,或者端口处于TIME_WAIT阶段
连接已关闭,比如接受数据方提前强制关闭连接或连接已自然关闭,再收到数据会返回RST
建立连接超时,主动建立连接方发出SYN到接收到SYN的时间间隔超时,会发出RST拒绝进一步发送数据
可靠传输保证机制
- 最适合切割,应用数据被切割称TCP认为是最合适发送的数据块
- 超时重传,当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段.如果不能及时收到一个确认,将重发这个报文段
- 校验和,TCP将保持它首部和数据的校验和.这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化.如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段
- 去重,TCP的接收端会丢弃重复的数据
- 流量控制,TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的我数据.当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失.TCP使用的流量控制协议是可变大小的滑动窗口协议(TCP利用滑动窗口实现流量控制)
- 拥塞控制,当网络阻塞时,减少数据的发送
- 停止等待ARQ协议(stop and wait)也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等到对方确认.在收到确认后在发下一个分组
HTTP
超文本传输协议是应用层协议.HTTP是一种请求/响应式的协议,及一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给与响应的响应信息
请求行
- 协议版本
- 请求方法
- GET 从服务器中读取某个资源时 传递参数长度受限制
- POST 向服务器提交数据 x3w 方式 参数大小受限
- PUT 用于向指定的URL传送更新资源 通常是幂等的
- DELETE 用来删除某一个资源
- HEAD OPTIONS TRACE CONNECt
- URL 统一资源定位符,对可以从互联网上得到的位置和访问方法的一种简介的标识,是互联网上标准资源的地址
请求头部
请求头部由关键字/兼职对组成,每行一对,关键字和值用英文":"分割.请求头部通知服务器有关于客户端请求的信息
常见请求头
- User-Agent 产生请求的浏览器类型
- Accept-Encoding 客户端可接受的编码压缩格式
- Accept-Language 客户端可接受的自然语言
- Accept-Charset 可接受的应答的字符集
- Host 请求的主机名,允许多个域名同处一个IP地址,及虚拟主机
- Cookie 存储于客户端扩展字段,想统一域名的服务端发送属于该域的cookie
- Connection Http1.1 之后 close-短连接 keepalive 长连接
响应报文
状态行
- 协议版本
- 状态码
- 1xx 标识服务器已接受了客户端请求,客户端可继续发送请求
- 2xx 表示服务器已成功接收到请求并进行处理
- 3xx 表示服务器要求客户端重定向
- 4xx 表示客户端的请求有非法内容
- 5xx 表示服务器未能正常处理客户端的请求而出现意外错误
- 响应头部 Location 响应报文域用于重定向接受者到哦一个新的位置 Server 响应报文域包含了服务器用来处理请求的软件信息及其版本
HTTP 2.0 与HTTP 1.0 的区别
- 2/采用二进制格式而非文本格式
- 2/是完全多路复用的,而非有序并阻塞的-只需要一个连接即可实现并行
- 2/是用来包头铺压缩,降低了开销
- 2/支持双向通讯