Netty系列一【Java 网络编程基础】
Netty系列一【Java 网络编程基础】
最近准备学习 Netty ,在学习之前首先来复习下关于网络编程模型基础。因为在深入了解 Netty 的过程中是少不了网络编程基础知识的支持的。
首先我们了解下计算机网络体系结构。
一、计算机网络体系结构
1.1 OSI 七层模型
OSI 七层模型从最底层到最高层主要包括 物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。具体每一层的功能作用可参考下表:
层级 | 层名称 | 作用 |
---|---|---|
7 | 应用层 | 网络服务与最终用户的一个接口 |
6 | 表示层 | 把应用层提供的信息变换为能够共同理解的形式 |
5 | 会话层 | 建立,管理,终止会话 |
4 | 传输层 | 定义传输数据的协议端口号,以及流控和差错校验 |
3 | 网络层 | 路由选择和中继,在一条数据链路上复用多条网络连接 |
2 | 数据链路层 | 数据链路的建立,拆除,对数据的检错,纠错是数据链路层的基本任务 |
1 | 物理层 | 物理层并不是物理媒体本身,它只是开发系统中利用物理媒体实现物理连接的功能描述和执行连接的规程 |
1.2 TCP/IP 概念层模型
Transmission Control Protocol/Internet Protocol 的简写,中译名为传输控制协议/因特网互联协议,是 Internet 最基本的协议、Internet 国际互联网络的基础,由网络层的 IP 协议和传输层的 TCP 协议组成。协议采用了4层的层级结构。然而在很多情况下,它是利用 IP 进行通信时所必须用到的协议群的统称。
下图为 OSI 七层模型与 TCP/IP 四层协议的对应关系:
1.3 TCP 和 UDP
- TCP 是面向连接的、可靠的流协议,通过三次握手建立连接,通讯完成时要拆除连接;
- UDP是面向无连接的通讯协议,UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象;
- 端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。
1.4 三次握手和四次挥手
关于三次握手和四次挥手,可以查看下面两个图便可以理解:
- 三次握手
- 四次挥手
二、HTTP 请求的过程
2.1 HTTP 请求的传输过程
2.2 一次完整 HTTP 请求的 7 个过程
- 建立 TCP 连接(之前可能还有一次DNS域名解析);
- 客户端向服务器发送请求命令;
- 客户端发送请求头信息;
- 服务服务器应答器;
- 返回响应头信息;
- 服务器向客户端发送数据;
- 服务器关闭 TCP 连接;
三、HTTP 报文结构
HTTP报文结构如下图,在具体细分可分为请求报文和响应报文。
报文首部,在客户端和服务器处理时起至关重要作用的信息几乎都在这里面;报文主体是所需的用户和资源信息。
3.1 请求报文
下面截图出具体的请求头信息,以及标注:
3.2 响应报文
响应报文具体信息描述:
响应报文中错误码类别:
code码 | 类别 | 原因 |
---|---|---|
1XX | information(信息性状态码) | 接受的请求正在处理 |
2XX | success(成功) | 请求正常处理完毕 |
3XX | redirection(重定向) | 需要进行附加操作以完成请求 |
4XX | client error(客户端错误) | 服务器无法处理请求 |
5XX | server error(服务端错误) | 服务器处理请求出错 |