HTTP报文格式、TCP、IP报头,以及链接过程总结

本身总结了一下tcp报头,,ip报头和三次握手四次挥手的过程,以及状态链接图中链接断开的过程,以此记录。缓存

关于TCP、IP报头,以及链接过程总结

TCP报头

图片描述

  1. 首先是源端口号和目标端口号,各占16位,标志的链接的端口号和被链接的端口号,它和IP报头中的源IP以及目的IP一块儿标识出一条TCP的连接。
  2. 而后是序号seq,这个占32位,增加由1-2^32-1,它由数据字节号增加,增加范围在0~2^32-1,换句话说也就是说对于发送数据的长度计数。
  3. 下来则是确认序号ack,也是占32位,当ACK为1时候有效,它的值通常为seq+1。
  4. 首部长度,占4位,,用来记录TCP的报头长度,它的值能够直接偏移到数据位置。
  5. 后面则是保留了6位,规定不能使用。
  6. URG,占一位,当为1时标志紧急指针有效。
  7. ACK,占一位,当为1时标志ack确认序号有效。
  8. PSH,占一位,当为1时标志紧急传输,也就是说这个包应当不用等待缓冲区放满就能够发送。
  9. RST,占一位,当为1时标志重置链接,用于复位。
  10. SYN,占一位,当为1时标志发起链接请求。
  11. FIN,占一位,当为1时标志发起断开链接的请求。
  12. 窗口大小,占16位,指出接收方的接收窗口的大小,控制流量。
  13. 校验和,占16位,将总TCP报文计算出一个校验值放入其中,用于检验。
  14. 紧急指针,占16位,TCP是面向数据流的协议,但当有时一些应用程序在某些紧急状况下(如在某些链接中进行强制中断),要求在接收方在没有处理完数据以前就可以发送一些紧急数据,这就使得发送方将CODE字段的URG置为1 即紧急指针字段有效,这样能够没必要考虑你发送的紧急数据在数据流中的位置,也就是至关于优先级最高,紧急指针指出的是紧急数据在报文段中结束的位置。
  15. 选项,在下面单独说。

TCP报头选项

图片描述

  1. 0:选项结束
  2. 1:空选项,通常用来将报文填充到4字节整数倍
  3. 2:服务器

    • 最大报文段长度选项,通讯双方在链接初始化的时候用此选项来协商最大报文段长度MSS。
    • TCP模块通常将MSS设置为(MTU-40)字节(减去TCP报头20字节,减去IP报头20字节),这样携带TCP报文段的IP数据报长度就不会超过MTU,从而避免IP分片。
    • 通常MSS值为1460字节(1500-40)。
  4. 3:tcp

    • 是窗口扩大选项,TCP链接初始化时候双方用该选项来协商接收窗口的扩大因子,在TCP头部中,接收通告窗口大小是用15位来表示的,所以最大为65535字节。但实际TCP模块容许的窗口大小远不止这个数(提升TCP通讯吞吐量)。
    • 扩大选项是一个移位数,若是窗口大小为M,移位数为n,那么至关于M*2n字节,也就是M左移n位
  5. 4:确认性选择(Selectibe Acknoewledgment, SACK)选项。TCP通讯时,某个报文段丢失则TCP模块会重传被确认的TCP报文段后面全部的后续报文。SACK便是改善这种状况使TCP只发送丢失的报文段,不用发送全部的未确认报文段的技术,在TCP链接初始化时,用该选项来确认是否支持SACK技术
  6. 5:是SACK技术工做时候的选项。该选项告诉发送端本端已经接收并缓存且不连续的数据块,使得发送方检查重发丢失的报文段。
  7. 8:时间戳选项,该选项提供了较准确的计算通讯双方之间的回路时间(RTT)的方法,从而为TCP流量控制提供重要信息。

IP报头

图片描述

  1. 版本号,占4位,用来指明IP版本号。
  2. IP头长度,占4位,用来指明IP报头长度值,能够用来偏移到数据位置。
  3. 服务类型,占用8位性能

    有3bits的优先权字段,如今已经闲置。
    4bitsTOS字段,这四位中只能有一个为1,用来选中选项,分别是最小时延,最大吞吐量,最高可靠性,最小费用。
    1bit弃用。
  4. 总长度,占16位,记录整个报文长度。
  5. 标识,占16位,用来标识数据报序号。
  6. 标志,占3位。测试

    【2】为1标志这是最后一个分段。
    【1】为1标志这个数据报可分段。
    【0】保留,统一置零。
  7. 片偏移,占13位,,标志这段数据在本来数据中所处的位置。
  8. 生存时间,TTL,占8位,由DNS查询到所访问的目标服务器这个过程来计时,而后保存在DNS缓存中,当DNS缓存过时时再重复这个过程。与其说它是个时间,不如说它更像一个跳数,每通过一个路由,规定路由对于这个字段的值至少减1,当它为零时候这个数据报会被抛弃,以用来处理永远抵达不了的数据。
  9. 协议,占8位,用来指明处理后由哪一个上层协议来接收,例如TCP。
  10. 头部校验和,占16位,确保IP报头信息。
  11. 源IP,占用32位,标记发送方的IP地址。
  12. 目的IP,占用32位,标记目标方的IP地址。
  13. 选项,可选,最多40位,会用0填充以保证是32的倍数。

三次握手

图片描述

第一二次链接时候不能加数据,也必须消耗序号。
在第三次握手时候,能够加入数据,那么会消耗序号,可是若是不携带数据的话是不消耗数据的,下次发送时候seq = x + 1。

四次挥手

图片描述

四次挥手这个过程也是能够在三次完成的,也就是将二三合一,服务器同时将ACK和FIN返回给客户端,那么就能够简洁到三次挥手。

状态转移图断开

图片描述

图片描述


加入一个HTTP的报文格式,emmmmm,好像违背了开闭原则哈,连题目都改了。。。。。编码

HTTP请求报文格式:

图片描述

  1. 请求方法spa

    GET:请求获取Request——URL所标识的资源
    POST:在Request——URL所标识的资源后附加资源
    HEAD:请求获取由Request——URL所标识的资源的响应消息报头
    PUT:请求服务器存储一个资源,由Request——URL做为其标识
    DELETE:请求服务器删除由Request——URL所标识的资源
    TRACE:请求服务器回送收到的请求信息(用于测试和诊断)
    CONNECT:保留
    OPTIONS:请求查询服务器性能
  2. URL
    URI全名为Uniform Resource Indentifier(统一资源标识),用来惟一的标识一个资源,是一个通用的概念,URI由两个主要的子集URL和URN组成。URL全名为Uniform Resource Locator(统一资源定位),经过描述资源的位置来标识资源。URN全名为Uniform Resource Name(统一资源命名),经过资源的名字来标识资源,与其所处的位置无关,这样即便资源的位置发生变更,其URN也不会变化。
  3. 协议版本
    格式为 HTTP/主版本号.次版本号,经常使用为:HTTP/1.1 HTTP/1.0
  4. 请求头部3d

    Host:接受请求的服务器地址,能够是IP或者是域名
    User-Agent:发送请求的应用名称
    Connection:指定与链接相关的属性,例如(Keep_Alive,长链接)
    Accept-Charset:通知服务器端能够发送的编码格式
    Accept-Encoding:通知服务器端能够发送的数据压缩格式
    Accept-Language:通知服务器端能够发送的语言

HTTP响应报文:

图片描述

    1. 协议版本,同请求报文
    2. 状态码,100~199表示请求已收到继续处理,200~299表示成功,300~399表示资源重定向,400~499表示客户端请求出错,500~599表示服务器端出错指针

      200:响应成功
      302:跳转,重定向
      400:客户端有语法错误
      403:服务器拒绝提供服务
      404:请求资源不存在
      500:服务器内部错误
    1. 响应头部orm

      Server:服务器应用软件的名称和版本 Content-Type:响应正文的类型 Content-Length:响应正文的长度 Content-Charset:响应正文所使用的编码 Content-Encoding:响应正文使用的数据压缩格式 Content-Language:响应正文使用的语言
    相关文章
    相关标签/搜索