TCP/IP协议以及HTTP解读

对TCP/IP以及HTTP的知识实在太混乱,有些方面存在盲点,故整理了相关知识点。


TCP/IP协议

TCP/IP协议模型:浏览器

对端传输:
缓存


TCP三次握手四次挥手


注:SYN: 同步序列号;Seq:发送序号;ACK:确认字符安全

三次握手过程:

一握手 : 客户端向服务端发送请求报文段,SYN为1,Seq 为X,随后进入SYN_SEND服务器

二握手 : 服务的接收请求报文,发送ACK:x+1,SYN:1,Seq : Y。随后进入SYN_RECVpost

三握手 : 向服务器发送Seq+ACK报文,发送完毕后客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。编码

为何须要第三次握手?

第三次握手在理论上是能够彻底省略的,在第二次握手服务器询问客户端是否准备好时就应该创建链接。那为何要存在第三次握手呢?3d

为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误。产生缘由主要是由于客户端第一次握手请求在某种状况下延误到链接释放后才到达服务段,若是只使用两次握手这时链接已经创建,但这个链接永远不会使用,也不会释放,server的不少资源就白白浪费掉了。代理


第一次挥手: 主机1(可使客户端,也能够是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

第二次挥手 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“赞成”你的关闭请求;cdn

第三次挥手 主机2向主机1发送FIN报文段,请求关闭链接,同时主机2进入LAST_ACK状态;server

第四次挥手 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,而后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段之后,就关闭链接;此时,主机1等待2MSL后依然没有收到回复,则证实Server端已正常关闭,那好,主机1也能够关闭链接了。

为何要四次挥手?

TCP协议是一种面向链接的、可靠的、基于字节流的运输层通讯协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经所有发送完毕了;可是,这个时候主机1仍是能够接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,可是主机2仍是能够发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,以后彼此就会愉快的中断此次TCP链接。

简单的 HTTP 协议


请求行

请求行(Request line)分为三个部分:请求方法请求地址协议版本

请求头

  • Cache-Control
    • no-cache 指客户端不缓存过时资源
    • no-store 指不进行缓存
    • max-age 指缓存资源的缓存时间比指定的值小,那么客户端就接受缓存资源,且缓存服务器不对资源有效性进行再次确认
  • Connection 指控制再也不转发给代理的首部字段(Hop-by-hop),管理持久链接
    • close 指服务器像明确断开链接
    • Keep-Alive 指保存持久链接,HTTP/1.1前默认链接是非持久性的,如须要保存持久链接,须要增长此字段
  • Upgrade 能够用来指定一个彻底不一样的通讯协议,对于这个字段,服务器能够返回101状态码

  • 请求体


    Post 和 Get 的区别

    先引入反作用和幂等的概念。

    反作用指对服务器上的资源作改变,搜索是无反作用的,注册是反作用的。

    幂等指发送 M 和 N 次请求(二者不相同且都大于1),服务器上资源的状态一致。注册10个和11个账号是不幂等的,对文章进行更改10次和11次是幂等的。

    在规范的应用场景上说,Get 多用于无反作用,幂等的场景,例如搜索关键字。Post 多用于反作用,不幂等的场景,例如注册。

    在技术上说:

    • Get 请求能缓存,Post 不能
    • Post 相对 Get 安全一点点,由于Get 请求都包含在 URL 里,且会被浏览器保存历史纪录,Post 不会,可是在抓包的状况下都是同样的。
    • Post 能够经过 request body来传输比 Get 更多的数据,Get 没有这个技术
    • URL有长度限制,会影响 Get 请求,可是这个长度限制是浏览器规定的,不是 RFC 规定的
    • Post 支持更多的编码类型且不对数据类型限制



    参考文档

    juejin.im/post/587230…

    juejin.im/post/598ba1…

    相关文章
    相关标签/搜索