文档章节

网络七层模型与TCP/UDP

爱宝贝丶
 爱宝贝丶
发布于 09/17 08:13
字数 3163
阅读 1669
收藏 44

        为了使全球范围内不同的计算机厂家能够相互之间能够比较协调的进行通信,这个时候就有必要建立一种全球范围内的通用协议,以规范各个厂家之间的通信接口,这就是网络七层模型的由来。本文首先会对网络七层模型的功能进行介绍,然后会讲解传输层的两个重要协议:TCP和UDP协议,并且会着重讲解TCP协议中的三次握手和四次挥手的过程。

1. 网络七层模型

        关于网络七层模型,我们首先以一个图例来展示其功能:

  • 应用层:主要指的是应用程序部分,比如我们的Java程序,应用层所产生的数据成为应用层数据,典型的应用层协议,比如有HTTP协议,dubbo的rpc协议,这些都是由我们的应用层程序自己定义的;
  • 表示层:这一层主要是对应用层的数据进行一些格式转换,加解密或者进行压缩和解压缩的功能;
  • 会话层:会话层的主要作用是负责进程与进程之间会话的建立、管理以及终止的服务;
  • 传输层:传输层提供了两台机器之间端口到端口的一个数据传输服务,因为应用层、表示层和会话层所针对的都是某个应用进程,而进程是和端口绑定的,但是同一台服务器上是可以有多个进程的,因而传输层提供的就是这种不同的端口到端口的访问,以实现区分不同进程之间的通信服务。在传输层最典型的协议有TCP和UDP协议,TCP提供的是面向连接的、可靠的数据传输服务,而UDP则是无连接的、不可靠的数据传输服务。在上面的图中我们也可以看出,经过传输层之后,数据会被加上TCP或者UDP头部,用以实现不同传输层协议的功能;
  • 网络层:传输层提供的是同一台主机上的端口到端口的传输服务,而网络层则提供的是不同主机之间的连接服务,最典型的网络层协议就是IP协议,网络层会将当前的数据包加上一个IP头部,从而实现目标机器的寻址;
  • 数据链路层:这一层是承接软件和硬件的一层,由于其会将当前的数据报发送到不稳定的物理层硬件上进行传输,因而为了保障数据的完整性和可靠性,数据链路层就提供了校验、确认和反馈等机制,用以提供可靠的数据报传输服务;
  • 物理层:物理层的主要作用就是将0101这种二进制的比特流数据转换为光信号,用以在物理介质上进行传输。

        网络七层模型主要是提供的一种规范,而在这每一层上为了实现不同的功能,各个计算机厂商都会实现自己的协议,这些协议的标识就是通过一些协议头和进行的,比如上面图中,数据在经过每一层的封装之后都会为其加上自己的协议头部,当数据经过屋里介质传输到目标机器上后,其就会反过来,将数据进行一层一层的解析,解析的过程其实就是根据其每一层头部信息来实现该层的相关功能。

        另外,网络七层模型是一种比较理想化的模型,现在应用比较广泛的是网络五层模型,五层模型与七层模型的主要区别在于将应用层、表示层和会话层统一划分到应用层中了,由应用程序实现其相关的功能。

2. TCP与UDP

        在我们的应用开发过程中,我们其实不需要太过于关注底层相关的功能,这些只需要相关的服务提供商提供相应的功能即可。不过在传输层之中,我们需要特别关注一下现在广泛使用的两个协议:TCP和UDP协议。这两个协议之间的主要区别如下:

TCP UDP
面向连接 无连接
提供数据可靠保证 不提供数据可靠性保证
速度相对较慢 速度较快
占用资源较多 占用资源较少

        关于TCP和UDP,可以看到,这两个协议各自分别有非常鲜明的特点:TCP虽然占用资源较多,速度相对较慢,但是提供了可靠的数据传输服务,这在大多数的互联网业务中是非常必要的;而UDP虽然不提供可靠性的数据保证,但是其速度非常快,而且占用资源较小,这在一些对数据可靠性较低的场景中是非常有用的,比如音视频服务,物联网数据上报服务等等,这些情况下,数据丢失一两帧都是可以接受的。

        TCP和UDP在资源占用上的区别,不仅体现在数据传输方式上,还体现在了数据的传输格式上。对于数据传输方式,TCP每次发送数据的方式都是按照时间窗口的方式一个数据报一个数据报的发送,并且需要等待每个数据报都给数据发送方响应ACK,这个时候才会发送下一个数据窗口的数据,如果当前窗口内有任意一个数据报没有发送成功,那么整个窗口内的数据都会重新发送;而UDP则没有窗口的概念和对应的ACK机制,其获取到每一个数据报之后,都只是简单的为其封装UDP协议头,然后将其发送出去,其不会管这个数据是否发送成功,因而UDP传输比TCP是要快很多的。对于数据传输格式,这里我们以TCP和UDP的数据报的格式进行讲解,如下是TCP的数据报格式:

        可以看到,TCP数据报的头部中不仅包含了源端口号和目的端口号,还包含了序号、确认序号、首部长度、标志位等等信息,总的来看,除去真正的数据部分,头部信息占用的位数就达到了192位,当然,这么多字段主要的作用是为了实现TCP面向连接的可靠性传输的功能。如下则是UDP数据报的格式:

        可以看到,这里UDP的数据包格式相对于TCP就非常的精简了,其头部主要就只有源端口号、目的端口号、长度和校验和字段,这些总共占用的字节数是8个字节。这也就是UDP协议传输速率非常快的另一个原因。

2.1 三次握手和四次挥手

        TCP是一个提供可靠传输服务、面向连接的的传输层协议,其可靠性保证主要是通过每次数据报发送时的ACK机制实现的,而其连接的建立和释放则主要是通过三次握手和四次挥手的方式实现的。如下是其三次握手和四次挥手的过程:

        对于三次握手,其整体过程如下:

  • 首先客户端会发送一个建立连接的请求,其标志位中会带上SYN=1, seq=x,这里的SYN=1根据前面TCP头部信息的讲解中我们知道,其表示建立连接的请求,而seq=x则只是当前请求的一个序号,不同的请求是有不同的序号的,加这个序号的原因也是为了将其与服务端的响应请求关联起来;
  • 在服务端接收到客户端建立连接的请求之后,其就会返回SYN=1, ACK=1, seq=y, ack_seq=x+1,这里的SYN=1, ACK=1表示的是对客户端建立连接的请求的同意响应,seq=y则标识了这是服务端的一次数据发送,而ack_seq=x+1则表示其是对客户端的seq=x的请求的一个响应;
  • 在客户端接收到服务端的响应的时候,客户端就能够确认服务端是能够正常接收和发送数据的,而服务端在接收到客户端的第一次请求的时候也能够确认客户端能够正常的发送请求。这个时候,客户端就会发送一个ACK=1, seq=x+1, ack_seq=y+1给服务器,服务器接收到后就会完成连接的建立。

        可以看到,前两次请求都是建立连接所必要的,而客户端要发送第三次请求的原因主要有两点:

  • 可以让服务器确保客户端是能够正常发送和接收请求的;
  • 由于连接的建立是在不稳定的网络上进行的,因而这里有可能第一次请求是由于客户端在某个时间点发送的,但是由于网络延迟,导致很久之后服务器才接收到该请求,但此时服务器并不知道这个连接建立的请求是否是正常请求,其还是会正常发送一个同意建立连接的响应给客户端,如果第一请求是由于网络延迟造成的,那么客户端是不会再发送第三次握手给服务器的,这个时候服务器等待超时后也就不会建立这一次的连接了。

        对于四次挥手,其是在客户端与服务器交互完成之后,由客户端发起的。四次挥手的主要流程如下:

  • 客户端首先会发送一个FIN=1, seq=u给服务器,根据前面TCP头部信息的讲解,我们知道FIN=1表示这是一个断开连接的请求,而seq=u则标识了这次请求的一个序号;
  • 服务器接收到客户端的断开连接的请求后,其就会向客户端发送一个ACK=1, seq=v, ack_seq=u+1的响应,这里的seq=v还是表示当前请求的序号,而ack_seq=u+1则表示这是对客户端发送的seq=u的断开连接的请求的响应,但是需要注意的是,这个请求并不表示服务器同意断开连接,此时还只是一个半关闭的状态,因为此时服务器可能还有数据在进行处理没有发送给客户端,此时服务器就会完成这些断开连接的工作;
  • 待服务器完成了断开连接的准备工作之后,其就会给客户端发送一个FIN=1, ACK=1, seq=w, ack_seq=u+1的响应,注意,这个过程中客户端一直都处于等待状态的。这里相对于前一次响应,多了一个FIN=1,就是表示当前是确认断开连接的请求;
  • 客户端在接收到服务器的响应之后,其就会给服务器发送一个ACK=1, seq=u+1, ack_seq=w+1的响应,表示同意断开连接,服务器接收到后就会断开连接,而客户端则会等待一小段时间后自行断开连接。

3. 小结

        本文首先讲解了OSI网络七层模型,详细讲解了模型中每一层的作用,然后讲解了传输层中TCP和UDP的主要区别,从传输方式和传输数据格式上对两种协议进行了对比,最后讲解了TCP协议中三次握手和四次挥手的主要过程,并且详细讲解了每一步的作用。

© 著作权归作者所有

上一篇: Kafka使用示例
爱宝贝丶

爱宝贝丶

粉丝 354
博文 141
码字总数 481251
作品 0
武汉
程序员
私信 提问
加载中

评论(5)

W_Lu
W_Lu
请问配图用什么制作的?
爱宝贝丶
爱宝贝丶 博主
PowerPoint
卞晓冬
卞晓冬
头部信息占用的字节数就达到了192字节????
16位等于2字节,固定长度5*32位=5*4字节,不应该是固定20字节吗?192字节是怎么算出来的???
爱宝贝丶
爱宝贝丶 博主
是192位,这里写错了,谢谢提醒🙏👆🙏👆🙏👆这里通过上面的图可以计算,应该是6 * 32 = 192位。
卞晓冬
卞晓冬
😜
TCP/IP四层模型和OSI七层模型

TCP/IP四层模型和OSI七层模型对应表。我们把OSI七层网络模型和Linux TCP/IP四层概念模型对应,然后将各种网络协议归类。 表1-1 TCP/IP四层模型和OSI七层模型对应表 OSI七层网络模型 Linux TC...

晨曦之光
2012/03/09
755
0
深入浅出-网络七层模型&&网络数据包

Posted by 微博@iOS音视频 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 引言 今天回顾一下--网络七层模型&&网络数据包 网络基本概念 OSI模型 ...

iOS音视频
2016/02/13
0
0
Socket学习网络基础准备

1.OSI七层网络模型浅析 当然,我们不是专业搞网络工程的,只要知道有哪些层,大概是拿来干嘛的就可以了! OSI七层网络模型(从下往上): 物理层(Physical):设备之间的数据通信提供传输媒体及...

白志华
2015/09/19
62
0
网络基础之(ISO七层模型与TCP/IP四层模型)

ISO/OSI七层模型 ISO ISO:国际标准化组织 OSI:开放系统互联模型 IOS:苹果操作系统 七层模型 七层模型 上三层:为用户提供服务 下四层:提供数据传输服务 传输单位: 比特:一个比特是一个...

analanxingde
2017/06/26
0
0
OSI七层模型和TCP/IP参考模型

要知道,数据在网络之间的传输过程是非常复杂的,因此应首先建立分层模型,分层模型是一组用于开发网络协议的设计方法,就是把网络之间各个节点通信这个复杂的问题分层若干个相对简单的问题,...

杨书凡
2017/07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端面试题汇总

一. HTML常见的兼容性 1.HTML5 标签在低版本浏览器不兼容 解决办法:使用html5shiv库,引入下列语句 <!--[if lte IE 8]> <script src="https://cdn.bootcss.com/html5shiv/r29/html5.js"></sc......

蓝小驴
24分钟前
5
0
OSChina 周四乱弹 —— 我气的脸都黑了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐《Red Battle》- 高橋李依 / 豊崎愛生 《Red Battle》- 高橋李依 / 豊崎愛生 手机党少年们想听歌,请使劲儿戳(这里) @丶Lion ...

小小编辑
37分钟前
435
19
找OSG教程, B站就有

https://www.bilibili.com/video/av64849038?from=search&seid=11632913960900279653

洛克人杰洛
58分钟前
5
0
学习记录(day07-Vue组件、自定义属性、自定义事件)

[TOC] 1.1.1什么是组件 一个vue文件就是一个组件 组件将html标签/css样式/对应JS打包成一个整体,也可以理解钻进一个具有样式和特效的自定义标签。 一、编写组件(提供方)<template> <di...

庭前云落
今天
5
0
使用Prometheus监控SpringBoot应用

通过之前的文章我们使用Prometheus监控了应用服务器node_exporter,数据库mysqld_exporter,今天我们来监控一下你的应用。(本文以SpringBoot 2.1.9.RELEASE 作为监控目标) 编码 添加依赖 使...

JAVA日知录
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部