大部分计算机相关专业的本科生都有学过计算机网络等相关的课程,作为一名普通的 Android 程序员,如果你大学稍微认真学习过计算机网络的话,那么基本上就可以满足工作的需求了。
我是这样认为的,你不需要非常清楚的分清楚这七层协议或者五层协议,不需要详细的记住每层的名字和区别。当然你能记住就更好了。但是不管你能记住多少名字,多少协议,你应该理解多层协议划分的思路和意图是什么。网络协议是非常有意思的,每一层被赋予了不同的职能,每一层的封装都只负责他们所应该完成的事情,这和我们平时写代码是不是很像。咱们在设计代码的时候,经常会发现代码的耦合度很高,有人设计一个下载器,在一个 DownloadManager 里还要去控制进度条的显示,这显然是很不合理的。这些网络协议可以支撑起当今巨量的互联网流量,说明他们的设计是挺高超的,至少在咱们这种层面的程序员来说,是完全值得崇拜的。
TCP/IP 经常被一起提起,他们就是代表了网络协议,一般称为协议簇,就是一堆协议的意思。TCP 属于传输层协议,IP 属于网络层协议。还有其他常见的应用层协议,HTTP,FTP,SMTP 等等。
这两个协议在面试的过程中经常被问到,这俩都是传输层协议,但传输层协议不只他们俩。只是他们代表了两种非常经典的传输层协议,同时也被大量运用而已。TCP 是可靠的,UDP 是不可靠的。那么对应的就有很多知识点了,为什么是可靠的?可靠的代价是什么?为什么会需要不可靠的协议?不可靠的协议能用来干啥?这就包含了三次握手,四次挥手之类的问题了。UDP 会比较简单,你去看看协议的文档就知道了,很短。而 TCP 就复杂多了,严格来说是没有完全可靠的,那么就需要一些机制来保障可靠性,以及为了可靠性带来的代价。
HTTP 协议的运用就非常的广了,但是我们不能只把 HTTP 协议等同于一个网络请求那么简单。
一个 HTTP 请求包含了两个部分,请求(Request)和响应(Response)。请求又包含了三个部分,一个是请求的地址,也就是 URL,第二个是请求的头,也就是 header,第三个是请求的正文,也就是 body。当然,你可以认为请求的地址也属于是 header 的一部分。响应分为两部分,一个是响应的头 header,一个是响应的正文 body。
请求的地址,URL 又包含了这么几个信息: 协议名,也就是 scheme,一般会是 http 或者 ftp 或者 smtp 等之类的,URL 的设计并不是只给 HTTP 用的。 协议名后面跟着 :// 设计 URL 的大师后来承认两个斜杆属于冗余的信息,其实可以不用的,但是这么多年了,也没办法改变了,也就这样了。 主机地址,也就是 host ,域名(比如 www.binkery.com)或者是 IP 地址(比如 192.168.1.1) 端口号,也就是 port。http 默认的端口号是 80,可以不写,端口号和主机名之间有个分号 : 隔开。 路径,也就是 path。从主机名结束的地方开始,到 ? 符号之前的部分,就是路径,表明你要请求的文件在这个主机上的位置。 查询参数,也就是 query,? 符号之后的内容,以键值对的形式,以 & 符号分割,比如 user=binkery&password=1234
请求的 header 在请求的 header 里可以包含很多信息,又一些是约定俗成的,又一些是自定义的。
请求的 body HTTP 有 get 和 post 两种请求方式(但其实还有其他几种,put、delete 等)。一般我们认为 get 请求是没有正文的,而 post 请求是把请求的参数放在正文里的,虽然不是特别严谨,但是可以先这样理解。
响应的 header 响应的 header 一般我们比较关心 status code ,也就是 200 或者 404 之类的。200 表示成功,404 表示该文件不存在。具体的表示意思与具体的服务器有关。
响应的 body 响应的正文,在 Android 应该中,一般正文就是我们得到的接口返回的字符串,xml 或者 json 串。
- EOF -
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。
转载请注明:文章转载自 Binkery 技术博客 [https://binkery.com]
本文标题: Android 程序员所需要知道的网络知识
本文地址: https://binkery.com/archives/571.html