网络协议
《圣经》中有一个通天塔的故事,大致是说,上帝为了阻止人类联合起来,就让人类说不同的语言。人类没法儿沟通,达不成“协议”,通天塔的计划就失败了。
但是千年以后,有一种叫“程序猿”的物种,敲着一种这个群体通用的语言,连接着全世界所有的人,打造这互联网世界的通天塔。如今的世界,正是因为互联网,才连接在一起。
文末有福利!!!
当 “Hello World!” 从显示器打印出来的时候,还记得你激动的心情吗?
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World!");
}
}
如果你是程序员,一定看得懂上面这一段文字。这是每一个程序员向计算机世界说“你好,世界”的方式。但是,你不一定知道,这段文字也是一种协议,是人类和计算机沟通的协议,只有通过这种协议,计算机才知道我们想让它做什么。
当然,这种协议还是更接近人类语言,机器不能直接读懂,需要进行翻译,翻译的工作教给编译器,也就是程序员常说的 compile。这个过程比较复杂,其中的编译原理非常复杂,我在这里不进行详述。
但是可以看得出,计算机语言作为程序员控制一台计算机工作的协议,具备了协议的三要素。
- 语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
- 语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
- 顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。
会了计算机语言,你就能够教给一台计算机完成你的工作了。恭喜你,入门了!
但是,要想打造互联网世界的通天塔,只教给一台机器做什么是不够的,你需要学会教给一大片机器做什么。这就需要网络协议。只有通过网络协议,才能使一大片机器互相协作、共同完成一件事。
这个时候,你可能会问,网络协议长啥样,这么神奇,能干成啥事?我先拿一个简单的例子,让你尝尝鲜,然后再讲一个大事。
当你想要买一个商品,常规的做法就是打开浏览器,输入购物网站的地址。浏览器就会给你显示一个缤纷多彩的页面。
那你有没有深入思考过,浏览器是如何做到这件事情的?它之所以能够显示缤纷多彩的页面,是因为它收到了一段来自 HTTP 协议的“东西”。我拿网易考拉来举例,格式就像下面这样:
HTTP/1.1 200 OK
Date: Tue, 27 Mar 2018 16:50:26 GMT
Content-Type: text/html;charset=UTF-8
Content-Language: zh-CN
<!DOCTYPE html>
<html>
<head>
<base href="https://pages.kaola.com/" />
<meta charset="utf-8"/> <title> 网易考拉 3 周年主会场 </title>
这符合协议的三要素吗?我带你来看一下。
- 首先,符合语法,也就是说,只有按照上面那个格式来,浏览器才认。例如,上来是状态,然后是首部,然后是内容。
- 第二,符合语义,就是要按照约定的意思来。例如,状态 200,表述的意思是网页成功返回。如果不成功,就是我们常见的“404”。
- 第三,符合顺序,你一点浏览器,就是发送出一个 HTTP 请求,然后才有上面那一串 HTTP 返回的东西。
浏览器显然按照协议商定好的做了,最后一个五彩缤纷的页面就出现在你面前了。
既然网络协议这么重要,那我们该如何学习呢?
关于如何学习网络协议的知识,小编准备了一份资料,这份资料是我们结合包括有百度、阿里巴巴、字节跳动、美团等大厂的学员内部资料进行整理得来的,总共6万字,全篇共十七个大的章节,近百个知识点,通过TCP、UDP、WebSocket、OkHttp、Retrofit等来加深大家对协议的印象和理解。今天就拿出来分享给大家。
由于篇幅原因,这份纯手写笔记已经被整理成了PDF文档,有需要网络协议笔记完整文档和PDF的可以添加下方微信回复JJ即可免费领取!(承诺:100%免费)
全篇目录如下:
第一章:5层协议体系结构
将计算机网络分层结构进行一个分层简单的介绍,将本文的大纲展示给各位。
本章内容:
-
各层作用
-
数据封装与解封装
第二章:TCP、UDP协议
本章内容:
-
TCP
- 主要特点
- TCP连接管理
- TCP连接的三次握手
- TCP释放连接的四次挥手
- TCP可靠传输
-
UDP
第三章:HTTP
-
HTTP的连接方式
-
非持久连接
-
持久连接
-
第四章:TCP/IP 协议简介
-
IP
-
TCP
第五章:跟 TCP/IP 学协议设计
-
协议版本如何升级?
-
如何发送不定长数据的数据包
-
上传多个文件,只有所有文件都上传成功时才算成功
-
如何保证数据的有序性
-
如何保证对方收到了消息
第六章:Socket
-
Socket 基本用法
-
Socket、ServerSocket 傻傻分不清楚
-
Socket 长连接的实现
第七章:WebSocket
-
WebSocket 握手
-
客户端的简单示例
-
客户端 API
-
构造函数
-
WebSocket
-
webSocket.readyState
-
webSocket.onopen
-
webSocket.onclose
-
webSocket.onmessage
-
webSocket.send()
-
webSocket.bufferedAmount
-
webSocket.onerror
-
-
WebSocket 服务器
第八章:Volley
-
Volley简介
-
下载Volley
-
StringRequest的用法
-
JsonRequest的用法
-
使用Volley加载网络图片
-
ImageRequest的用法
-
ImageLoader的用法
-
NetworkImageView的用法
-
-
定制自己的Request
-
自定义XMLRequest
-
自定义GsonRequest
-
-
Volley源码解读
第九章:OkHttp
-
使用方法
-
基本对象介绍
-
OkHttpClient
-
Request
-
Call
-
RealCall
-
AsyncCall
-
Dispatcher
-
小结
-
-
流程分析
-
同步请求
-
异步请求
-
获取Response
-
Interceptor
-
RealInterceptorChain
-
-
拦截器
-
client.interceptors
-
RetryAndFollowUpInterceptor
-
BridgeInterceptor
-
CacheInterceptor
-
ConnectInterceptor
-
client.networkInterceptors
-
CallServerInterceptor
-
-
总结
-
反思
-
设计模式
-
线程安全
-
数据结构
-
第十章:Retrofit使用
-
Retrofit入门
-
创建Retrofit实例
-
接口定义
-
接口调用
-
-
Retrofit注解详解
-
第一类:HTTP请求方法
-
第二类:标记类
-
第三类:参数类
-
-
Gson与Converter
-
RxJava与CallAdapter
-
自定义Converter
-
自定义CallAdapter
-
其它说明
-
Retrofit.Builder
-
Retrofit的Url组合规则
-
Retrofit提供的Converter
-
Retrofit提供的CallAdapter:
-
第十一章:Retrofit原理
-
什么是动态代理?
-
源码解析
-
loadServiceMethod(method)
-
invoke(args)
-
CallAdapted
-
Converter
-
-
Retrofit是如何将子线程切换到主线程?
-
Retrofit为什么要使用动态代理?
-
总结
第十二章:Retrofit面试
-
使用方法
-
流程解析
-
构建 Retrofit 实例
-
构建 API 接口实例
-
执行请求,解析响应
-
-
为什么要引入CallAdapter与Converter?
-
CallAdapter 是如何工作的?
-
添加
-
匹配
-
工作
-
-
Converter 是如何工作的?
-
添加
-
匹配
-
工作
-
说说使用到了哪些设计模式
-
动态代理模式
-
为什么要使用动态代理来获取API方法?
-
策略模式
-
适配器模式
-
工厂方法模式
-
建造者模式
-
-
使用过程中踩过什么坑?
-
总结
第十三章:Netty之搭建服务端与客户端
-
简单的介绍一下Netty
-
创建Tcp服务端
-
创建客户端,与创建服务端差不多一至
-
先启动服务端 在启动客户端,这样就可以建立起连接了
第十四章:Netty之Encoder、Decoder、Handler 的使用
-
Encoder的作用
-
Decoder的作用
-
Handler的作用
-
示例
-
运行
第十五章:Netty之心跳处理、断线重连
-
客户端添加心跳处理
-
修改
-
断线重连处理
第十六章:Netty之粘包、拆包,处理
-
什么粘包呢?
-
一般处理粘包的手段
-
示例
-
首先给服务端添加DelimiterBasedFrameDecoder
-
添加$符号
-
我们写个连续发送数据包的代码
-
-
同步
-
效果展示
第十七章:Netty之创建Web服务、作为HTTP服务器
-
创建Http服务
-
在HttpServerHandler中处理收到的HTTP请求
-
响应HTTP请求
-
示例
-
上面使用到的测试接口地址
-
运行效果
关于如何学习网络协议的知识,小编准备了一份资料,这份资料是我们结合包括有百度、阿里巴巴、字节跳动、美团等大厂的学员内部资料进行整理得来的,总共6万字,全篇共十七个大的章节,近百个知识点,通过TCP、UDP、WebSocket、OkHttp、Retrofit等来加深大家对协议的印象和理解。今天就拿出来分享给大家。
由于篇幅原因,这份纯手写笔记已经被整理成了PDF文档,有需要网络协议笔记完整文档和PDF的可以添加下方微信回复JJ即可免费领取!(承诺:100%免费)