第2章 常见协议和标准
2.1 DNS协议
DNS协议的作用是将域名解析为IP。在Windows中可以使用nslookup命令来查看DNS解析的结果,如使用nslookup命令查看淘宝的解析记录的结果如图所示。
直接访问的DNS服务器叫做本地DNS服务器,本身没有域名和IP的对应关系,在发出请求的时候它会从主DNS服务器获取然后保存到缓存中,下次再有相同的域名请求时直接从缓存中获取就可以了。
2.2 TCP/IP协议与Socket
IP协议是用来查找地址的,对应着网际互联层,TCP协议是用来规范传输规则的,对应着传输层。IP只负责找到地址,具体传输的工作交给TCP来完成。
三次握手、四次挥手(?待理解,后续会添加一篇关于这个知识点的博文)
用于传输层的协议除了TCP还有UDP,它们的区别主要是TCP是有连接的,UDP是没有连接的,也就是说TCP协议是在沟通好后才会传数据,而UDP协议是拿到地址后直就传了,这样产生的结果就是TCP协议传输的数据更可靠,而UDP传输的速度更快。TCP就像是打电话,需要先拨通对方号码才能通信,而UDP就像是使用对讲机,拿起来就可以直接讲话。通常视频传输、语音传输等对完整性要求不高而对传输速度要求高并且数据量大的通信使用UDP比较多,而邮件、网页等一般使用TCP协议。
TCP/IP协议只是一套规则,并不能具体工作,就像是程序中的接口一样,而Socket是TCP/IP协议的一个具体体现。
2.3 HTTP协议
HTTP协议是应用层的协议,在TCP/IP协议接收到数据之后需要通过HTTP协议来解析才可以使用。就像过去的发电报一样,电报机就相当于Socket,负责选好发送的目标并将内容发过去,但是直接发过去的数据“嘀嘀嘀”并不能直接使用,还需要解码(在发送前需要先编码再发送)后才能用,电报中的编码和解码就相当于网络传输中的HTTP协议。
HTTP协议中的报文可以分为请求报文(request message)和响应报文(response message)两种类型,这两种类型都包括三部分:首行、头部和主体。请求报文的首行是请求行,包括方法(请求类型)、URL和HTTP版本三项内容,响应请求的首行是状态行,包括HTTP版本、状态码和简短原因三项内容,其中原因可有可无。头部保存一些键值对的属性,用冒号“:”分割。主体保存具体内容,请求报文中主要保存POST类型的参数,响应报文中保存页面要显示的结果。首行、头部和主体以及头部的各项内容用回车换行(\r\n)分割,另外头部和主体之间多一个空行,也就是有两个连续的回车换行。它们的结构如图所示。
请求报文中的方法指GET、HEAD、POST、PUT、DELETE等类型,响应报文中的状态码就是Response中的status,一共可以分为5类:
□1XX:信息性状态码。
□2XX:成功状态码,如200表示成功。
□3XX:重定向状态码,如301表示重定向。
□4XX:客户端错误状态码,如404表示没找到请求的资源。
□5XX:服务端错误状态码,如500表示内部错误。
报文信息可以通过firefox的firebug的插件来查看,比如,要看www.csdn.net网址请求的报文:
头信息是经过格式化之后的,要想查看原始的可以点击"原始头"来查看:
2.4 Servlet与Java Web开发
Servlet是J2EE标准的一部分,是Java Web开发的标准。标准比协议多了强制性的意义,不过它们的作用基本是一样的,都是用来制定统一的规矩,因为Java是一种具体的语言,所以为了统一的实现它可以制定自己的标准。
通过前面的TCP/IP协议、HTTP协议已经可以得到数据了,Servlet的作用是对接收到的数据进行处理并生成要返回给客户端的结果,这就像电报中接收到电报并翻译成明文后还需要有人来决策并作出回复内容一样。(通过IP找到地址,然后利用TCP协议传输文件内容,该文件内容通过HTTP协议进行解析,输入到服务器Servlet来做逻辑处理,并反馈到客户端。)
Servlet制定了Java中处理Web请求的标准,要想使用Servlet需要有相应的Servlet容器才行,比如,常见的Tomcat就是一个Servlet容器。
原文地址:https://www.cnblogs.com/nachdenken/p/11255934.html