OSI与TCP/IP各层的结构与功能,都有哪些协议?

学习计算机⽹络时我们⼀般采⽤折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采⽤⼀种只有五层 、协议的体系结构,这样既简洁⼜能将概念阐述清楚。

image.png

结合互联⽹的情况,⾃上⽽下地,⾮常简要的介绍⼀下各层的作⽤。

应⽤层

应⽤层(application-layer)的任务是通过应⽤进程间的交互来完成特定⽹络应⽤。应⽤层协议定义的 是应⽤进程(进程:主机中正在运⾏的程序)间的通信和交互的规则。对于不同的⽹络应⽤需要不同的应⽤层协议。在互联⽹中应⽤层协议很多,如域名系统DNS,⽀持万维⽹应⽤的 HTTP协议,⽀持电⼦邮件的 SMTP协议等等。我们把应⽤层交互的数据单元称为报⽂。

域名系统

域名系统(Domain Name System缩写 DNS,Domain Name被译为域名)是因特⽹的⼀项核⼼服务,它作 为可以将域名和IP地址相互映射的⼀个分布式数据库,能够使⼈更⽅便的访问互联⽹,⽽不⽤去记 住能够被机器直接读取的IP数串。(百度百科)例如:⼀个公司的 Web ⽹站可看作是它在⽹上的⻔ 户,⽽域名就相当于其⻔牌地址,通常域名都使⽤该公司的名称或简称。例如上⾯提到的微软公司 的域名,类似的还有:IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com、 Cisco公司的域名是 www.cisco.com 等。

HTTP协议

超⽂本传输协议(HTTP,HyperText Transfer Protocol)是互联⽹上应⽤最为⼴泛的⼀种⽹络协 议。所有的 WWW(万维⽹) ⽂件都必须遵守这个标准。设计 HTTP 最初的⽬的是为了提供⼀种发布 和接收 HTML ⻚⾯的⽅法。(百度百科)

运输层

运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通⽤的数据传输服务。 应⽤进程利⽤该服务传送应⽤层报⽂。“通⽤的”是指并不针对某⼀个特定的⽹络应⽤,⽽是多种应⽤可 以使⽤同⼀个运输层服务。由于⼀台主机可同时运⾏多个线程,因此运输层有复⽤和分⽤的功能。所谓 复⽤就是指多个应⽤层进程可同时使⽤下⾯运输层的服务,分⽤和复⽤相反,是运输层把收到的信息分 别交付上⾯应⽤层中的相应进程。

运输层主要使⽤以下两种协议:

1. 传输控制协议 TCP(Transmission Control Protocol)—提供⾯向连接的,可靠的数据传输服务。

  1. ⽤户数据协议 UDP(User Datagram Protocol)—提供⽆连接的,尽最⼤努⼒的数据传输服务 (不保证数据传输的可靠性)。

TCP 与 UDP 的对⽐⻅问题三。

⽹络层

在计算机⽹络中进⾏通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信⼦ ⽹。⽹络层的任务就是选择合适的⽹间路由和交换结点, 确保数据及时传送。 在发送数据时,⽹络层 把运输层产⽣的报⽂段或⽤户数据报封装成分组和包进⾏传送。在 TCP/IP 体系结构中,由于⽹络层使 ⽤ IP 协议,因此分组也叫 IP 数据报 ,简称 数据报

这⾥要注意:不要把运输层的“⽤户数据报 UDP ”和⽹络层的“ IP 数据报”弄混。另外,⽆论是哪⼀层的数据单元,都可笼统地⽤“分组”来表示。

这⾥强调指出,⽹络层中的“⽹络”⼆字已经不是我们通常谈到的具体⽹络,⽽是指计算机⽹络体系结构模型中第三层的名称.

互联⽹是由⼤量的异构(heterogeneous)⽹络通过路由器(router)相互连接起来的。互联⽹使⽤的⽹络层协议是⽆连接的⽹际协议(Intert Protocol)和许多路由选择协议,因此互联⽹的⽹络层也叫做⽹际层或IP层。

数据链路层

数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在⼀段⼀段的链路 上传送的,这就需要使⽤专⻔的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将⽹络 层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每⼀帧包括数据和必要的控制信 息(如同步信息,地址信息,差错控制等)。

在接收数据时,控制信息使接收端能够知道⼀个帧从哪个⽐特开始和到哪个⽐特结束。这样,数据链路 层在收到⼀个帧后,就可从中提出数据部分,上交给⽹络层。 控制信息还使接收端能够检测到所收到 的帧中有误差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在⽹络中传 送下去⽩⽩浪费⽹络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要 检错,⽽且还要纠错),那么就要采⽤可靠性传输协议来纠正出现的差错。这种⽅法会使链路层的协议 复杂些。

物理层

在物理层上所传送的数据单位是⽐特。 物理层(physical layer)的作⽤是实现相邻计算机节点之间⽐ 特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。 使其上⾯的数据链路层不必考虑⽹ 络的具体传输介质是什么。“透明传送⽐特流”表示经实际电路传送后的⽐特流没有发⽣变化,对传送的 ⽐特流来说,这个电路好像是看不⻅的。

在互联⽹使⽤的各种协中最重要和最著名的就是 TCP/IP 两个协议。现在⼈们经常提到的TCP/IP并不⼀ 定单指TCP和IP这两个具体的协议,⽽往往表示互联⽹所使⽤的整个TCP/IP协议族。

总结⼀下

上⾯我们对计算机⽹络的五层体系结构有了初步的了解,下⾯附送⼀张七层体系结构图总结⼀下。图⽚ 来源:https://blog.csdn.net/yaopeng_2005/article/details/7064869

image.png

TCP 三次握⼿和四次挥⼿(⾯试常客)

为了准确⽆误地把数据送达⽬标处,TCP协议采⽤了三次握⼿策略。

如下图所示,下⾯的两个机器⼈通过3次握⼿确定了对⽅能正确接收和发送消息(图⽚来源:《图解 HTTP》)。

image.png

简单示意图:

  • 客户端–发送带有 SYN 标志的数据包–⼀次握⼿–服务端
  • 服务端–发送带有 SYN/ACK 标志的数据包–⼆次握⼿–客户端
  • 客户端–发送带有带有 ACK 标志的数据包–三次握⼿–服务端

为什么要三次握⼿

三次握⼿的⽬的是建⽴可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,⽽三次握⼿最主 要的⽬的就是双⽅确认⾃⼰与对⽅的发送与接收是正常的。

第⼀次握⼿:Client 什么都不能确认;Server 确认了对⽅发送正常,⾃⼰接收正常

第⼆次握⼿:Client 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;Server 确认了:对⽅发送正常,⾃⼰接收正常

第三次握⼿:Client 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;Server 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常

所以三次握⼿就能确认双发收发功能都正常,缺⼀不可。

为什么要传回 SYN

接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。

SYN 是 TCP/IP 建⽴连接时使⽤的握⼿信号。在客户机和服务器之间建⽴正常的 TCP ⽹络连接时, 客户机⾸先发出⼀个 SYN 消息,服务器使⽤ SYN-ACK 应答表示接收到了这个消息,最后客户机再 以 ACK(Acknowledgement[汉译:确认字符 ,在数据通信传输中,接收站发给发送站的⼀种传输控制字符。它表示确认发来的数据已经接受⽆误。 ])消息响应。这样在客户机和服务器之间才能建⽴ 起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

传了 SYN,为啥还要传 ACK

双⽅通信⽆误必须是两者互相发送信息都⽆误。传了 SYN,证明发送⽅到接收⽅的通道没有问题,但是接收⽅到发送⽅的通道还需要 ACK 信号来进⾏验证。

image.png

断开⼀个 TCP 连接则需要“四次挥⼿”:

  • 客户端-发送⼀个 FIN,⽤来关闭客户端到服务器的数据传送
  • 服务器-收到这个 FIN,它发回⼀ 个 ACK,确认序号为收到的序号加1 。和 SYN ⼀样,⼀个 FIN 将占⽤⼀个序号
  • 服务器-关闭与客户端的连接,发送⼀个FIN给客户端 客户端-发回 ACK 报⽂确认,并将确认序号设置为收到序号加1

为什么要四次挥⼿

任何⼀⽅都可以在数据传送结束后发出连接释放的通知,待对⽅确认后进⼊半关闭状态。当另⼀⽅也没 有数据再发送的时候,则发出连接释放通知,对⽅确认后就完全关闭了TCP连接。

举个例⼦:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着⾃⼰的节奏结束通话,于是 B 可能⼜巴拉巴拉说了⼀通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

上⾯讲的⽐较概括,推荐⼀篇讲的⽐较细致的⽂ 章:https://blog.csdn.net/qzcsu/article/details/72861891

TCP,UDP 协议的区别

更多