DNS协议
1、DNS协议的作用是将域名解析为IP,网络上的每个站点的位置是用IP来确定的,访问一个网站首先就要知道它的IP,不过数据组成的IP记起来不方便,所以就使用域名来代替IP,由于IP和域名的对应关系经常变化,所以就需要有专门将域名解析为IP的服务器,我们称为:DNS服务器。把域名发给DNS服务器,它就返回相应的IP。在window中可以使用nslookup 或者ping 的命令查看DNS解析后的IP。
2、世界各地有很多DNS服务器,ISP(Internat服务提供商)会提供给我们默认的DNS服务器。
TCP/IP协议
1、TCP和IP协议,通常会把他们放在一起,其实他们是不同的两种协议,作用也不一样。
2、IP协议:是用来查找地址,对应网际互联层,TCP协议:是用来规范传输规则的,对应的传输层。IP只负责找到地址,具体怎么传输是由TCP来完成。类似送快递,货单上填写的地址以及怎么根据填写的地址找到客户,这相当于IP协议的功能。而具体怎么将货物送过去,最后让客户签收签字就相当于TCP协议。
3、TCP传输前会进行三次沟通,我们称为"三次握手",传完数据断开的时候进行四次沟通,我们称为"四次挥手"。
4、TCP重要的概念的:
4.1、序号:seq sequence number的缩写,表示所传数据的序号,TCP传输时的每一个字节都有一个序号,发送数据时会将数据的第一个序号发送给对方,接收方会根据序号check是否接收完整,不完整则会重新传送。保证了数据的完整性。
4.1、确认号:ack:acknoledgement number缩写,表示确认号。接收方用来给发送方反馈是否成功接收到数据信息,它的值为希望接收的下一个数据包的起始序号,是接收到的seq的值+1;
比如:C端发过来的序号seq = x S端返回的ack = x+1
4.2、标志位:SYN 建立连接 FIN 断开连接 ACK确认序号有效 RST重置连接。
4.3、ACK:确认位,只有ACK=1的时候ack才起作用,正常通信时ACK=1,第一次发起请求时,因为没有需要确认接收的数据所以ACK为0。
4.4、SYN:同步位,用于在建立连接时同步序号,刚开始建立连接时并没有历史接收的数据,所以ack也就没办法设置。SYN的作用就是,当接收端接收到SYN=1的报文时就会将ack设置位接收到的seq+1的值。SYN会在前两次握手时都为1,是因为通信的双方的ack都需要设置一个初始值;
4.5、FIN:终止位,用来在数据传输完毕后释放连接。
5、三次握手流程:
第一次握手:客户端向服务端发送SYN包,等待服务端响应,并进入SYN-SEND状态
第二次握手:服务端收到SYN包,并确定SYN=ACK+1,然后响应一个SYN包和ACK包。客户端进入SYN-RECV状态。
第三次握手:客户端收到服务端SYN+ACK包。向服务器发送确认包ACK。发送完毕进入ESTABLISHED状态。
6、四次挥手:
第一次挥手:主动关闭连接一方,发送FIN包。此时发送FIN包之前发送的数据如果没有发送到。会进行重试发送。
第二次挥手:被动关闭一方收到FIN包。响应一个ACK包。
第三次挥手:被动关闭方发送一个FIN包。告诉被动关闭方。数据发送完毕。
第四次挥手:主动关闭方收到FIN包。发送一个ACK包给被动关闭方,至此四次挥手结束,断开连接。
7、为什么要进行第三次握手?两次不就已经建立连接了吗?
为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段由于网络延迟突然又传送到了服务端,因而产生错误。
第一次握手:客户端发起连接请求到服务端。服务端收到请求后响应一个请求给客户端,反馈给客户端已接收到请求。可以连接,正常理解这两次握手就可以了。为什么还要第三次呢?网络具有不稳定性,假如客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,客户端发出第二个请求,然后成功与服务端建立连接,然后数据传输完毕,客户端与服务端断开连接。而这时第一个建立请求才到达服务端,其实这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手,如果只有两次握手,那么到这里,连接就建立了,但是其实客户端并没有任何数据要发送,造成很大的资源浪费。所以需要第三次握手,只有客户端再次回应一下,就可以避免这种情况。
8、为什么建立连接需要三次握手而断开连接要四次挥手呢?
建立连接的时候:被动方服务器端不需要任何准备,再收到第一次握手客户端的SYNC 后就可以直接第二次握手返回SYN和ACK报文,开始建立连接。
断开连接的时候:被动方服务器端突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。
9、为什么客户端在TIME-WAIT阶段要等2MSL?
当客户端发出最后的ACK确认报文时,并不能确定服务器端能够收到该段报文,2MSL是TCP报文在传输过程中最大生命周期。2MSL即是服务器端发出为FIN报文和客户端发出的ACK确认报文所能保持有效的最大时长。服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文;
HTTP协议
1、HTTP协议是应用层的协议,在TCP/IP协议接受到数据后需要通过HTTP协议来解析后才能使用。
2、HTTP中报文很重要,报文分请求报文和响应报文两种类型,这两种类型都包括三部分:首行,头部,主体。请求报文的首行是请求行,包括方法(请求类型),URL和HTTP版本三项内容,响应请求的首行是状态行,包括HTTP版本,状态码,剪短原因其中原因可有可无。头部保存一些键值对的属性,用冒号分割。主体保存具体内容,请求报文中主要保存Post类型的参数,响应报文中保存页面要显示的结果。
3、请求报文中的方法有:GET、HEAD、POST、PUT、DELETE等
4、响应报文常见状态码:
4.1、1XX:信息性状态码。
4.2、2XX:成功状态码。如:200表示成功。
4.3、3XX:重定向状态码。如:301表示发生重定向。
4.4、4XX:客户端错误状态码:如:404表示没有找到请求的资源。
4.5、5XX:服务端错误状态码:如:500表示系统内部错误。
Servlet和JAVA WEB开发
通过TCP/IP协议和HTTP协议可以得到数据,Servlet的作用是对接受到的数据进行处理并生成要返回给客户端的接口。Servlet指定了java处理WEB请求的标准和规范,我们只需按照标准去做就OK了。但规范自己是不能干活的,所以要想使用Servlet需要有相应的Servlet容器,常见的Tomcat就是一个Servlet容器。