您的位置:首页 > 理论基础 > 计算机网络

http协议详解

2017-07-10 14:40 274 查看
目前网络中实际使用的传输协议为tcp/ip网络协议,它分为四层:应用层、传输层、网络层和网络接口层;

应用层主要包括:http、ftp、SMTP等应用协议;传输层主要有tcp和udp协议,网络层主要有ip协议,icmp协议;

 

网络协议的传输过程中,数据包的封装过程为:

 

http数据包进入传输层,传输层会添加tcp包头,tcp包头包含了:源端口、目的端口、包序、包头长等信息;

如下图:



添加完tcp包头组成tcp数据包,进入网络层,网络层添加ip数据包包头,包头信息包含:版本号(ipv4还是ipv6)、包头长、总长度、上层协议类型(如TCP)、源ip地址、目的ip地址等信息,如下图:





添加完头部做成网络层数据包,进入数据链路层(网络接口层,即以太网),该层继续添加相应的包头,包头主要包括:源MAC地址、目的MAC地址以及上层协议类型(如上层协议为ipv4协议)等信息,这样整个数据包就组合完毕,通过物理介质进行传输;

 

在传输的过程中,每一层都有数据包的大小限制,如数据链路层数据包最小为64个字节,最大为1518个字节,头部固定为18个字节,则数据最大为1500个字节,最小为48个字节;

网络层中数据包的最大总长度为65535个字节,ip头部长度为20到60个字节,其中前20个字节固定,后40个字节为可选,因为数据链路层中数据包最大为1500个字节,所以会进行分包;

传输层中的数据包大小,UDP协议的总长度不能够超过65535个字节,TCP协议没有长度限制,但为了保证网络效率,TCP数据包的长度不会超过IP数据包的长度,以确保TCP不会再分割;

 

http协议数据包格式如下图:

http中GET请求:





http响应数据结构:




http数据包主要是请求(request)和应答(respose)方式,

请求方式分为八种:

POST、GET、PUT、DELETE、HEAD、TRACE、CONNECT、OPTIONS,其中比较常见的为:POST 和GET这两种请求方式,http数据包的格式已上图为例:

首先第一行为请求行:GET / HTTP/1.1    ,主要包含用户请求的数据地址信息和http版本信息;

Host: www.xxx.com.cn //为域名

Accept: text/html //可以接受的数据格式,(*/*表示任意格式)

user-agent: //对应用户使用的操作系统终端类型等信息;

connection: keep-live //相应完后是否断开连接,在http 1.0之前都是短连接,每一次请求等待相应结束后都会断开连接,在http1.1中默认情况下是长连接,是在第一次请求应答完后保持当前连接,如果后面再次请求会直接使用该链接;

应答数据中:

第一行为:状态行,包括http版本及服务器返回来的状态码:

1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

如上图:200 ok表示客户端请求成功;

Content-type表示服务器响应传回来的数据类型,如text/html;

Content-encoding表示数据正文中编码(压缩方式);

Content-length表示数据实体正文的长度,有时候无法计算正文长度,所以无法写入content-length字段,而是transfor-encoding:chunked,这种情况主要出现在请求动态页面,动态页面的数据长度无法确定情况,目前出现比较多的是和Content-encoding:gzip这种方式一起的情况,因为gzip压缩后如果要计算他的长度,需要将其存到一个大的数组中然后计算其数据长度,但使用chunked编码,会直接将进行分块传输,即缓存区满后就传输给客户端,编码使用若干chunk块组成,由一个长度为0的chunk结束,每个chunk有两部分组成,第一部分是该chunk的长度和长度单位,第二部分为指定长度的内容,每个部分用CRLF隔开,最后一个长度为0的chunk中的内容成为footer内容;

Server表示使用什么服务器,如Apache或者微软的IIS;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  http 网络协议