◆
TCP/IP 协议与 OSI 七层模型详解
OSI 七层模型
- 应用层(
Application):提供网络与用户应用软件之间的接口服务(HTTP) - 表示层(
Presentation):数据的表示、安全、压缩 | 提供格式化的表示和转换数据服务,如加密和压缩, - 会话层(
Session):建立、管理,中止会话 | 提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制 - 传输层(
Transimission):定义传输数据的协议端口号,以及流程和差错校验 | 提供建立、维护和取消传输连接功能,负责可靠地传输数据(TCP) - 网络层(
Network):进行逻辑地址寻址,实现不同网络之间的路径选择 | 处理网络间路由,确保数据及时传送(路由器) - 数据链路层(
DataLink):建立逻辑连接、进行硬件地址寻址,差错校验等功能 | 负责无错传输数据,确认帧、发错重传等(交换机) - 物理层(
Physics) :建立、维护、断开物连接 | 提供机械、电气、功能和过程特性(网卡、网线、双绞线、同轴电缆、中继器)
TCP/IP
- 根据
OSI七层模型,TCP/IP是一个五层模型,从下往上依次是物理层、数据链路层、网络层、传输层、应用层(会话层、表示层、应用层三合一) TCP/IP协议是由网络层的IP协议和传输层的TCP协议组成,协议被称为传输控制协议/互联网协议,又称网络通讯协议

为什么定义 TCP/IP 协议
为了让计算机能够通信,计算机需要定义通信规则,这些规则就是协议,协议定制了数据的封装格式+传输
有哪些常见的协议
| 层级 | 名称 | 含义 |
|---|---|---|
| 应用层 | HTTP | 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议 |
| 应用层 | FTP | 文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式 |
| 应用层 | TFTP | (Trivial File Transfer Protocol,简单文件传输协议)是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议 |
| 应用层 | SMTP | 简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是在 Internet 传输 Email 的标准 |
| 应用层 | SNMP | 简单网络管理协议(SNMP,Simple Network Management Protocol),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象,该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。 |
| 应用层 | DNS | 域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 |
| 传输层 | TCP | TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议 |
| 传输层 | UDP | UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是 OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务 |
| 传输层 | ICMP | ICMP(Internet Control Message Protocol)Internet 控制报文协议。它是 TCP/IP 协议簇的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息 |
| 网络层 | IGMP | Internet 组管理协议称为 IGMP 协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间 |
| 网络层 | IP | 互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为 IP 地址(英语:IP Address),是分配给用户上网使用的网际协议(英语:Internet Protocol, IP)的设备的数字标签 |
| 网络层 | ARP | 地址解析协议,即 ARP(Address Resolution Protocol),是根据 IP 地址获取物理地址的一个 TCP/IP 协议 |
| 网络层 | RARP | 反向地址转换协议(RARP:Reverse Address Resolution Protocol) 反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址 |
传输层
- 传输层是面向连接的、可靠的的进程到进程通信的协议
TCP提供全双工服务,即数据可在同一时间双向传播- 单工:单向传输
- 半双工:在同一时间点内,只能单向通信
- 全双工:在任意时间点双方都可以收发数据
TCP将若干个字节构成一个分组,此分组称为报文段(Segment)
Tcp 握手和断开
TCP是面向连接的协议,它在源点和终点之间建立虚拟连接,而不是物理连接- 在数据通信之前,发送端与接收端要先建立连接,等数据发送结束后,双方再断开连接
TCP连接的每一方都是由一个IP地址和一个端口组成
图解

三次握手
- 第一次握手客户端通过一个标识为
SYN标识位的数据段发送给服务端请求连接,通过该数据段告诉服务端希望建立连接,需要服务端应答,并告诉服务端传输的起始序列号(Seq=0) - 第二次握手是服务端用一个确认应答
ACK和同步序列号SYNC标志位的数据段来响应客户端,一是发送ACK告诉客户端收到了数据段,二是通知客户端从哪个序列号做标记(Seq=0,ACK=1),这一步操作中首先服务端接受了客户端的握手,紧接着,服务端向客户端发送了握手请求,所以合并了 - 第三次握手是客户端确认收到了服务端的数据段并可以开始传输实际数据(
Seq=1,ACK=1)
简单理解:
- 客户端询问服务端是否可用,服务器可用的话进入第二步
- 服务端告诉客户端我可以使用
- 客户端知道服务端可用,开始发送数据
四次挥手(断开)
- 客户端发送
FIN控制位发出断开连接的请求 - 服务端进行响应,确认收到断开连接请求
- 服务端提出反方向的关闭要求
- 客户端确认收到的服务端的关闭连接请求
为什么挥手阶段,2、3 步骤不能合并呢,因为在客户端发送断开请求时,服务端可能并不能立马断开连接,比如服务端此时还有数据向客户端输出, 这时就要等到服务端这边要做的事情结束了才会反方向向客户端发送关闭请求。
代码测试
下图是根据以下代码测试出来的结果

服务端
var net = require('net');
var server = new net.Server();
server.on('connection', function (socket) {
console.log('connected');
socket.on('data', function (data) {
console.log(data.toString());
socket.write('server:' + data);
});
socket.on('end', function (data) {
console.log('end');
});
socket.on('error', function (error) {
console.log(error);
});
});
server.listen(8000);
server.on('listening', function () {
console.log('Created server on http://127.0.0.1:8000/');
});
server.on('close', function () {
console.log('server closed!');
});
server.on('error', function (err) {
console.log(err);
});
客户端
var net = require('net');
var socket = net.Socket();
socket.connect(8000, '127.0.0.1', function () {
console.log('connect the server');
socket.write('hello');
});
socket.on('data', function (data) {
console.log(data.toString());
socket.destroy();
});
socket.on('error', function (err) {
console.log(err);
});
socket.on('end', function () {
console.log('data end');
});

还没有留言,来发表第一条吧~