ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
![](https://img.kancloud.cn/1a/1e/1a1e80afe50135b6ecf021377bf84b48_640x273.png) # tcp/ip协议 四层: ![](https://img.kancloud.cn/a1/e9/a1e9ee0fabd650c2345ceb436a7263bf_1442x808.png) ![](https://img.kancloud.cn/e9/ee/e9ee09065c695b9c60eb6b4e70720274_1516x1286.png) 1. 应用层 2. 传输层 3. 网络互联层 4. 网络访问层 ## 应用层(Application Layer) 应用层的本质是规定了应用程序之间如何相互传递报文, 以 HTTP 协议为例,它规定了 * 报文的类型,是请求报文还是响应报文 * 报文的语法,报文分为几段,各段是什么含义、用什么分隔,每个部分的每个字段什么什么含义 * 进程应该以什么样的时序发送报文和处理响应报文 ### HTTP HTTP 客户端和 HTTP 服务端的首要工作就是根据 HTTP 协议的标准组装和解析 HTTP 数据包,每个 HTTP 报文格式由三部分组成: * 起始行(start line),起始行根据是请求报文还是响应报文分为「请求行」和「响应行」。这个例子中起始行是`GET / HTTP/1.1`,表示这是一个`GET`请求,请求的 URL 为`/`,协议版本为`HTTP 1.1`,起始行最后会有一个空行`CRLF(\r\n)`与下面的首部分隔开 * 首部(header),首部采用形如`key:value`的方式,比如常见的`User-Agent`、`ETag`、`Content-Length`都属于 HTTP 首部,每个首部直接也是用空行分隔 * 可选的实体(entity),实体是 HTTP 真正要传输的内容,比如下载一个图片文件,传输的一段 HTML等 ![](https://img.kancloud.cn/90/d2/90d27649cd3696a931f6533014935620_1810x876.png) 除了我们熟知的 HTTP 协议,还有下面这些非常常用的应用层协议 * 域名解析协议 DNS * 收发邮件 SMTP 和 POP3 协议 * 时钟同步协议 NTP * 网络文件共享协议 NFS ## 传输层(Transport Layer) 传输层的作用是为两台主机之间的「应用进程」提供端到端的逻辑通信,相隔几千公里的两台主机的进程就好像在直接通信一样 虽然是叫传输层,但是并不是将数据包从一台主机传送到另一台,而是对「**传输行为进行控制**」 传输层用端口号来标识不同的应用程序,主机收到数据包以后根据目标端口号将数据包传递给对应的应用程序进行处理。 ![](https://img.kancloud.cn/c4/55/c4559da05e4fae498de8c2b7bad0b8e9_1506x510.png) 主要有TCP和UDP ## 网络互连层(Internet Layer) 网络互连层提供了主机到主机的通信,将传输层产生的的数据包封装成分组数据包发送到目标主机,并提供路由选择的能力 IP 协议是网络层的主要协议,TCP 和 UDP 都是用 IP 协议作为网络层协议。这一层的主要作用是给包加上源地址和目标地址,将数据包传送到目标地址。 IP 协议是一个无连接的协议,也不具备重发机制,这也是 TCP 协议复杂的原因之一就是基于了这样一个「不靠谱」的协议。 ## 网络访问层(Network Access Layer)网络接口层 网络访问层也有说法叫做网络接口层,以太网、Wifi、蓝牙工作在这一层,网络访问层提供了主机连接到物理网络需要的硬件和相关的协议。 ## 分层的好处 分层的本质是通过分离关注点而让复杂问题简单化,通过分层可以做到: * 各层独立:限制了依赖关系的范围,各层之间使用标准化的接口,各层不需要知道上下层是如何工作的,增加或者修改一个应用层协议不会影响传输层协议 * 灵活性更好:比如路由器不需要应用层和传输层,分层以后路由器就可以只用加载更少的几个协议层 * 易于测试和维护:提高了可测试性,可以独立的测试特定层,某一层有了更好的实现可以整体替换掉 * 能促进标准化:每一层职责清楚,方便进行标准化 ## 习题 1. 收到 IP 数据包解析以后,它怎么知道这个分组应该投递到上层的哪一个协议(UDP 或 TCP) Internet Protocol 中的 Protocol: TCP (6) , 6为TCP协议,17为UDP