JAVA程序员必须要学会的网络知识

时间:2022-07-22
本文章向大家介绍JAVA程序员必须要学会的网络知识,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、http协议

1.1、HTTP报文格式

1.2、HTTP请求报文方法

方法(操作)

意义

OPTION

请求一些选项的信息

GET

请求读取由 URL所标志的信息

HEAD

请求读取由 URL所标志的信息的首部

POST

给服务器添加信息(例如,注释)

PUT

在指明的 URL下存储一个文档

DELETE

删除指明的 URL所标志的资源

TRACE

用来进行环回测试的请求报文

CONNECT

用于代理服务器

1.3、HTTP响应报文状态码

状态码

含义

1xx

通知信息,如请求收到了或正在进行处理。

2xx

成功,如接受或知道了。

3xx

重定向,表示要完成请求还必须采取进一步的行动。

4xx

客户的差错,如请求中有错误的语法或不能完成。

5xx

服务器的差错,如服务器失效无法完成请求。

1.4、HTTP请求所经历的步骤

现需访问www.baidu.com,具体流程如下:

  1. 客户端通过DNS解析到www.baidu.com的IP地址为220.181.38.149,通过IP找到服务器路径。客户端发起HTTP会话到220.181.38.149,然后交给传输层
  2. 客户端传输层将HTTP会话请求分成报文段,添加源端口和目的端口。如:服务器使用80端口监听客户端请求,客户端通过系统随机选择一个端口,与服务器进行交换,服务器将请求返回给客户端发出请求的端口。
  3. 传输结束,如果是HTTP1.1可以在发送响应后仍保持一段时间的连接。

二、tcp

2.1、什么是TCP

  1. TCP是面向连接的传输层协议。在使用TCP协议前,需建立TCP连接,传输完毕后需要释放连接
  2. TCP是点对点的
  3. TCP提供可靠交付,保证无差错、不丢失、不重复、按序到达
  4. 提供全双工通信
  5. 面向字节流

2.2、TCP和UDP的区别

TCP

UDP

是否连接

面向连接

无连接

传输类型

面向字节流

面向报文

可靠性

可靠

不可靠

连接数

仅一对一

一对一、一对多、多对一、多对多

开销

拥塞控制

2.3、TCP三次握手

首先,B的TCP服务器进程进入监听状态,准备接收客户端请求

  1. A客户机在打算建立连接时,向B发出连接请求报文,同步位(SYN)置1,选择一个初始序号(seq)x,例如123。同步位为1的报文段不可携带数据,但是要消耗序号
  2. B收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+ 1即124,同时也为自己选择-一个初始序号seq= y如12。
  3. A客户机进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+ 1即13,而自己的序号seq=x+1即125。TCP的标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号,在这种情况下,下-一个数据报文段的序号仍是seq=x+1即125。
  • 为什么A最后还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。

2.4、TCP四次挥手

数据传输结束后,通信的双方都可释放连接。

  1. A数据传输完毕需要断开连接,A的应用进程向其TCP发出连接释放报文段(FIN = 1,序号seq = u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1状态,等待B的确认。 TCP规定,FIN报文段即使不携带数据,它也消耗掉一个序号
  2. B收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,A到B的连接释放。而A收到B的确认后,进入FIN-WAIT-2状态,等待B发出的连接释放报文段。也就是说,从B到A这个方向的连接并未关闭,这个状态可能会持续一段时间。 A收到来自B的确认后,就进入FIN-WAIT-2 (终止等待2)状态,等待B发出的连接A收到来自B的确认后,就进入FIN-WAIT-2 (终止等待2)状态,等待B发出的连接
  3. 若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN= 1。现假定B的序号为w (在半关闭状态B可能又发送了一些数据)。B还必须重复上次已发送过的确认号ack=u+1。这时B就进入LAST-ACK (最后确认)状态,等待A的确认。
  4. A收到B的连接释放报文段后,对此发出确认报文段(ACK = 1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSE状态

为什么A在TIME-WAIT状态必须等待2MSL(最大报文生存时间)的时间?

1.保证A发送的最后一个ACK报文段能够到达B,保证A、B正常进入CLOSED状态。

  • 这个ACK报文段有可能丢失,使得处于LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认,B超时重传FIN+ACK报文段,A能2MSL时间内收到这个重传的FIN+ACK报文段,接着A重传一次确认,同时重启2MSL计数器,2MSL时间后A和B进入CLOSE状态,如果A在TIME-WAIT状态时接收到B的FIN+ACK报文段之后向B发出确认报文段,而不再确认B是否收到立即进入CLOSED状态,如若B并没有正常收到A 的确认报文段,则B无法正正常进入到CLOSED状态。

2.防止“已经失效的连接请求报文段”出现在本连接中。

  • A在发送完最后一个ACK报文段并经过2MSL,会使本次连接持续时间内所有产生的报文段消失,保证在下一次新连接中不会出现旧连接遗留的请求报文段。