Http协议及TCP/IP协议详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhou12314/article/details/52356654

一:TCP/IP协议我们在开发中基本不用用到,但是弄明白TCP/IP协议会让我们对网络通信有个更加透彻的理解,在面试中TCP/IP协议基本也是必问的知识点

二: TCP/IP协议分层

TCP/IP协议一共分为4层,应用层,传输层,网络层,数据链路层
这里写图片描述

下面详细的讲解这几层所涉及的到协议

三:.应用层之http协议:

http协议又叫做超文本传输协议。分为请求和响应两部分

1 所谓的HTTP请求,也就是Web客户端向Web服务器发送信息,这个信息由如下三部分组成:

    请求行
    HTTP头
    内容

a:请求行:请求行的写法是固定的,由三部分组成, 第一部分是请求方法,第二部分是请求网址,第三部分是HTTP版本  
    GET www.cnblogs.com HTTP/1.1
b: HTTP头:  HTTP头在HTTP请求中可以是3种HTTP头:  1: 请求头(request header) 2.普通头 (general header) 3.实体头(entity header)
    一般get请求没有实体内容,所以也不会有实体头
c: 第三部分内容只在post请求中存在,get没有任何实体

2.HTTP响应分为状态行,HTTP头,返回内容:

        状态行:
        HTTP头:
        返回内容:

  a: 状态行:      HTTP/1.1 200 OK 

     状态行返回码的种类有:

       信息类 (100-199)
       响应成功 (200-299)
       重定向类 (300-399)
       客户端错误类 (400-499)

 b: HTTP头:   响应头 普通头  实体头
        通用头(General header)
        通用头即可以包含在HTTP请求中,也可以包含在HTTP响应中。通用头的作用是描述HTTP协议本身。比如描述HTTP是否持久连接的 Connection头,HTTP发送日期的Date头,描述HTTP所在TCP连接时间的Keep-Alive头,用于缓存控制的Cache- Control头等。

        实体头(Entity header)
        实体头是那些描述HTTP信息的头。既可以出现在HTTP POST方法的请求中,也可以出现在HTTP响应中。比如图5和图6中的Content-Type和Content-length都是描述实体的类型和大 小的头都属于实体头。其它还有用于描述实体的Content-Language,Content-MD5,Content-Encoding以及控制实体 缓存的Expires和Last-Modifies头等

        请求头(HTTP Request Header)
        请求头是那些由客户端发往服务端以便帮助服务端更好的满足客户端请求的头。请求头只能出现在HTTP请求中。比如告诉服务器只接收某种响应内容的 Accept头,发送Cookies的Cookie头,显示请求主机域的HOST头,用于缓存的If-Match,If-Match-Since,If- None-Match头,用于只取HTTP响应信息中部分信息的Range头,用于附属HTML相关请求引用的Referer头等。

        响应头(HTTP Response Header)
        HTTP响应头是那些描述HTTP响应本身的头,这里面并不包含描述HTTP响应中第三部分也就是HTTP信息的头(这部分由实体头负责)。比如说 定时刷新的Refresh头,当遇到503错误时自动重试的Retry-After头,显示服务器信息的Server头,设置COOKIE的Set- Cookie头,告诉客户端可以部分请求的Accept-Ranges头等。

3.http1.0与http1.1的区别

   HTTP1.1 每次发送请求的时候不用再进行三次握手,提高效率,从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,

四:传输层之TCP协议:

      HTTP协议是基于传输层的TCP协议,而TCP协议是端到端面向连接的协议,所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的三次握手
第一次握手:   客户端向服务端发送TCP SYN = 1,ACK = 0的数据包请求进行连接
第二次握手:   服务端向客户端回应(TCP SYN = 1 ,   ACK = 1)数据包,告诉它可以通讯了,并让发送端发送一个确认数据包
第三次握手:   客户端向服务端回应确认请求(TCP SYN = 0, ACK = 1)的数据包给接收端,告诉它连接已被确认

五:网络层之IP报文格式:
这里写图片描述

版本:
    占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4)

首部长度:
    占4位,可表示的最大数值是15个单位(一个单位为 4 字节)因此IP 的首部长度的最大值是 60 字节

区分服务:
    占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.1998 年这个字段改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用这个字段

总长度:
    占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节.总长度必须不超过最大传送单元 MTU

标识:
    占16位,它是一个计数器,用来产生数据报的标识

标志(flag):
    占3位,目前只有前两位有意义

MF
    标志字段的最低位是 MF (More Fragment)
    MF=1 表示后面“还有分片”。MF=0 表示最后一个分片
DF
标志字段中间的一位是 DF (Don't Fragment)
只有当 DF=0 时才允许分片

片偏移:
    占12位,指较长的分组在分片后某片在原分组中的相对位置.片偏移以 8 个字节为偏移单位
生存时间:
    占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255

协议:
    占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为 UDP 协议

首部检验和:
    占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法

源地址和目的地址:
    都各占 4 字节,分别记录源地址和目的地址

猜你喜欢

转载自blog.csdn.net/zhou12314/article/details/52356654