HTTP与TCP/IP网络协议基础知识与重点

参考

一篇文章带你详解 HTTP 协议

一篇文章带你熟悉 TCP/IP 协议

图解HTTP

图解TCP/IP

HTTP协议重点

1.常用的HTTP方法

  • GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器。
  • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
  • PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
  • HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
  • OPTIONS:查询相应URI支持的HTTP方法。

2.GET方法与POST方法的区别

  • 区别一:

    get重点在从服务器上获取资源,post重点在向服务器发送数据;
  • 区别二:

    get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用”?”连接,多个请求数据间用”&”连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;

    post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
  • 区别三:

    Get传输的数据量小,因为受URL长度限制,但效率较高;

    Post可以传输大量数据,所以上传文件时只能用Post方式;
  • 区别四:

    get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;

    post较get安全性较高;
  • 区别五:

    get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。

    post支持标准字符集,可以正确传递中文字符

3.HTTP请求报文与响应报文格式

  • 请求报文包含三部分:
  1. 请求行:包含请求方法、URI、HTTP版本信息
  2. 请求首部字段
  3. 请求内容实体
  • 响应报文包含三部分:
  1. 状态行:包含HTTP版本、状态码、状态码的原因短语
  2. 响应首部字段
  3. 响应内容实体

4.常见的HTTP相应状态码

  • 返回的状态

    1xx:指示信息–表示请求已接收,继续处理

    2xx:成功–表示请求已被成功接收、理解、接受

    3xx:重定向–要完成请求必须进行更进一步的操作

    4xx:客户端错误–请求有语法错误或请求无法实现

    5xx:服务器端错误–服务器未能实现合法的请求


  • 常见状态码

    200:请求被正常处理

    204:请求被受理但没有资源可以返回

    206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。

    301:永久性重定向

    302:临时重定向

    303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上

    304:发送附带条件的请求时,条件不满足时返回,与重定向无关

    307:临时重定向,与302类似,只是强制要求使用POST方法

    400:请求报文语法有误,服务器无法识别

    401:请求需要认证

    403:请求的对应资源禁止被访问

    404:服务器无法找到对应资源

    500:服务器内部错误

    503:服务器正忙

TCP/IP协议重点

1.计算机网络体系结构分层

分层模型

2.数据处理流程

数据处理流程

3.TCP连接建立、释放时的握手过程  

三次握手

  • TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。
  • 所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。


    下面来看看三次握手的流程图:
    流程图
  • 第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
  • 第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
  • 第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。


    四次挥手
  • 四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
  • 由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。


    下面来看看四次挥手的流程图:
    流程图
  • 中断连接端可以是客户端,也可以是服务器端。
  • 第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说”我客户端没有数据要发给你了”,但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
  • 第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
  • 第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
  • 第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。

总结

以上的都是些网络协议方面的老生常谈的基础知识,其中内容十分不完整和全面。主要是要有一些网络方面的基础概念,遇到问题的时候懂得要到哪里去查,一些细的方面的知识可以等到实际应用中去体会。