OSI 模型
开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织(ISO)提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。 — 维基百科
上图中,从左往右分别是 五层协议、TCP/IP 的四层协议、OSI 的七层协议。
OSI 的七层协议体系结构的概念清楚,理论完整,但是既复杂又不适用。TCP/IP 是一个四层的体系结构,它包含应用层、运输层、网际层和网络接口层。不过从实质上讲,TCP/IP 只有最上面的三层,因为最下面的网络接口层基本上和一般的通信链路在功能上没有多大差别,对于计算机网络来说,这一层并没有什么特别新的具体内容。因而在学习计算机网络的原理时往往采取这种的办法,采用一种只有五层协议的体系结构。
更多:TCP/IP协议族
运输层的两个主要协议 TCP & UDP
TCP/IP 运输层的两个主要协议都是因特网的正式标准,即:
(1)用户数据包协议 UDP(User Datagram Protocol)
(2)传输控制协议 TCP(Transmission Control Protocol)
UDP 在传送数据之前不需要先建立连接。远地主机的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 却是一种最有效的工作方式。
TCP 则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP 不提供广播或多播服务。由于 TCP 提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
TCP 连接的建立
TCP 的连接通常称为 “三次握手”,过程如下图
要理解上面的过程,首先要了解 TCP 的报文段,报文段是 TCP 的传送的数据单元。关于 TCP
报文段首部有 6 个标志
- 紧急 URG(URGent):当 URG = 1 时,表明紧急字段有效。
- 确认 ACK(ACKnowledgment)仅当 ACK = 1 时确认号字段才有效
- 推送 PSH(PuSH)PSH = 1 时,接收方就尽快地交付接收应用进程。
- 复位 RST(ReSeT)当 RST = 1 时,表明 TCP 连接中出现严重差错,需要重新建立连接
- 同步 SYN(SYNchronization)当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段。
- 终止 FIN(FINis)当 FIN = 1 时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接
还有序号和确认号
- 序号 seq:指的是本报文段所发送的数据的第一个字节的序号。
- 确认号 ack:期望收到对方下一个报文段的第一个数据字节的序号。总之,应该记住:若确认号 = N,则表明:到序号 N - 1 为止的所有数据都已正确收到。
现在来分析三次握手的过程:
连接对象有客户端(Client),简称 C,服务端(Server)简称 S;
(1)客户端 C 发出连接请求,置 SYN = 1,序号 seq = client_isn;
(2)服务端 S 接收到 SYN 报文段,如同意建立连接,则向 C 发送确认。在确认报文段中置 SYN = 1,ACK = 1,确认号 ack = client_isn + 1,同时为自己选择一个初始序号 seq = server_isn;
(3)C 收到 S 的确认后,还要向 S 给出确认,置 ACK = 1,确认号 ack = server_isn + 1,自己的序号 seq = client_isn + 1。
为什么要三次握手
“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。
本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。
采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”
TCP 连接的释放
TCP 连接的释放又称为 “四次挥手”,过程如图
(1)A 先向 B 发出释放报文段,并停止再发送数据。A 在报文段中置 FIN = 1,序号 seq = u。请注意,TCP 规定,FIN 报文段即时不携带数据,也消耗一个序号。
(2)B 收到连接释放报文段后发出确认,确认号 ack = u + 1,而这个报文段自己的序号是 v。
(3)B 发送释放报文段,置 FIN = 1,序号 seq = w(B 可能又发送了一些数据),确认号 ack = u + 1。
(4)A 收到 B 的连接释放报文段后,必须对此发出确认。置 ACK = 1,确认号 ack = w + 1,序号 seq = u + 1。
这篇博客介绍了计算机网络中的OSI模型与TCP/IP协议。OSI模型由七层构成,而TCP/IP则简化为四层。重点讲述了TCP和UDP的区别,以及TCP连接的‘三次握手’建立过程和‘四次挥手’释放过程,旨在帮助理解TCP连接的可靠性。

16万+

被折叠的 条评论
为什么被折叠?



