IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络:分层结构、TCP/UDP学习笔记 -> 正文阅读

[网络协议]计算机网络:分层结构、TCP/UDP学习笔记

本文内容大部分为个人觉得有用的网课讲义。

1. 分层结构

1.1 分层的必要性

计算机网络是非常复杂的系统,“分层”可将繁而多的问题转化为易于研究的较小的局部问题。

原理体系结构局部问题
应用层解决通过应用进程的交互来实现特定应用网络的问题
运输层解决进程之间基于网络通信的问题
网络层解决分组在多个网络上传输(路由)的问题
数据链路层解决分组在一个网络(或一段链路)上传输的问题
物理层解决使用何种信号来传输比特的问题

1.2 分层思想

举例:
主机属于网络N1,Web服务器属于网络N2,N1和N2通过路由器互连。

分层思想举例
这个过程实际上是主机中的浏览器应用进程和Web服务器中的应用进程基于网络间的通信。

过程的实现(这里只说明主机往Web服务器通信,反过来同理):
在这里插入图片描述

这个过程可以简单理解为寄快递和收快递,首先要拿个纸盒子贴上具体信息,封装好后变成一个包装好的包裹之后,去快递站转交给快递小哥;快递小哥处理信息后,根据地址送给收件人;收件人拿到快递后把包裹拆开,为了自己的信息不泄露,把贴在快递盒子的信息撕掉,然后去掉纸盒子,拿到盒子里面的东西。

主机发HTTP请求报文给Web服务器时,它的分层结构是如何处理的(看图,自上而下):

应用层构建HTTP请求报文,然后交给运输层;
运输层给HTTP请求报文添加一个TCP首部,成为TCP报文段(实现可靠传输),然后交给网络层;
网络层在TCP报文段的基础上增加IP首部,成为IP数据报,然后交给数据链路层;
数据链路层给IP数据报加一个首部和尾部,使之成为帧,然后交给物理层;
物理层将帧看作比特流,由于网络是以太网,给比特流前面添加前导码,物理层将已添加前导码的比特流转变成相应的信号发送给传输媒体

TCP首部:主要作用是为了区分应用进程以及实现可靠传输;
IP首部:主要作用是使IP数据报可以在互联网上传输,也就是被路由器转发;
数据链路层添加的首部:主要作用是使帧能够在一段链路上或者一个网络上传输,可以被相应的目的主机接收;
数据链路层添加的尾部:主要作用是为了让目的主机检查所接收到的帧是否有误码;
前导码:让目的主机做好接受帧的准备

信号通过传输媒体到达路由器,接下来说一下路由器的处理过程(先自下而上,后自上而下):

物理层转换为比特流,去掉前导码之后交付给数据链路层;
数据链路层实际上接收到的是帧,将帧的首部和尾部去掉,交给网络层;
网络层接收到的实际上是IP数据报,网络层解析IP数据报的首部,从中提取目的网络地址,查找自身的路由表,确定转发端口进行转发,将IP数据报交给数据链路层;
数据链路层给IP数据包加一个首部和尾部,成为帧,交给了物理层;
物理层把帧看作是比特流,由于网络是以太网,所以加了前导码,物理层将已添加前导码的比特流转变成相应的信号发送给传输媒体

信号通过传输媒体到达Web服务器,最后说下Web服务其的处理过程(自下而上):
物理层转换为比特流,去掉前导码之后交付给数据链路层;
数据链路层实际上接收到的是帧,将帧的首部和尾部去掉,交给网络层;
网络层接收到的实际上是IP数据报,将IP首部去掉后,交给运输层;
运输层收到的是TCP报文段,把TCP首部去掉后,交给应用层;
应用层收到的是HTTP请求报文,应用层对HTTP请求报文进行解析,然后给主机发送HTTP响应报文,发送过程类似,HTTP响应报文需要经过Web服务器的层层封装。

1.3 专用术语

1.3.1 实体

实体是指任何可发送或接收信息的硬件或软件进程。
对等实体是指收发双方相同层次中的实体。

该图片来源于计算机网络微课堂(湖南科技大学)
(截图来源于计算机网络微课堂(湖南科技大学))

1.3.2 协议

协议是指控制两个对等实体进行逻辑通信的规则的集合。
在这里插入图片描述
(截图来源于计算机网络微课堂(湖南科技大学))

逻辑通信是不存在的,这样的描述有助于方便单独研究体系结构的某一层时,不用考虑其他层。
协议的三要素:语法、语义、同步
语法:定义所交换信息的格式,定义了所交换信息由哪些字段以及何种顺序构成
语义:定义收发双方所要完成的操作
同步:定义通信双方的时序关系 ,注意并不是始终频率同步

1.3.3 服务

在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务。
要实现本层协议,还需要使用下一层所提供的服务。
协议是“水平的”,服务是“垂直的”。
实体看得见相邻下层所提供的服务,但并不知道实现该服务的具体协议。也就是说,下面的协议对上面的实体是“透明”的。
在这里插入图片描述
(截图来源于计算机网络微课堂(湖南科技大学))

服务访问点 是指同一系统中相邻两层实体交换信息的逻辑接口,用于区分不同的服务类型。
数据链路层的服务访问点为帧的“类型”字段。
网络层的服务访问点为IP数据报首部中的“协议字段”。
运输层的服务访问点为“端口号”

服务原语是指上层使用下层所提供的服务必须通过与下层交换一些命令。

协议数据单元PDU:对等层次之间传送的数据包成为该层的协议数据单元。
服务数据单元SDU:同一系统内,层与层之间交换的数据包称为服务数据单元。
多个SDU可以合成一个PDU,一个SDU可以划分为几个PDU
在这里插入图片描述
(截图来源于计算机网络微课堂(湖南科技大学))

2. TCP/UDP

2.1 概述

运输层直接为应用进程间的逻辑通信提供服务。根据应用需求的不同,因特网的传输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP, 是 TCP/IP体系结构中两个重要的协议。
运输层的两个兄弟,大哥TCP和二弟UDP,大哥靠谱,二弟不靠谱

TCP:面向连接的传输控制协议
传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。
可靠,面向连接,时延大,适用于大文件。

UDP:无连接的用户数据报协议
传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能。
不可靠,无连接,时延小,适用于小文件

2.2 TCP和UDP的对比

TCP协议的主要特点:
1.TCP是面向连接(虚连接)的传输层协议;
2.每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的;
3.TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重;
4.TCP提供全双工通信,有发送缓存(准备发送的数据&已发送但尚未收到确认的数据),接收缓存(按序到达但尚为被接受应用程序读取的数据&不按序到达的数据);
5.TCP面向字节流,TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。

UDP协议的主要特点:
1.UDP是无连接的,减少开销和发送数据之前的时延;
2.UDP使用最大努力交付,即不保证可靠交付;
3.UDP是面向报文的,适合一次性传输少量数据的网络应用;
4.UDP无拥塞控制,适合很多实时应用;
5.UDP首部开销小,8字节
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述(截图均来源于计算机网络微课堂(湖南科技大学))

2.3 运输层端口号、分用复用的概念

2.3.1 端口号

运行在计算机上的进程使用进程标识符PID来标志的,但是不同的操作系统使用的进程标识符格式不一样。为了使不同操作系统的计算机之间能够进行网络通信,就必须要使用统一的方法对TCP/IP体系的应用进程进行标识。 TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程
端口号只有本地意义,在因特网中不同计算机的相同端口 是没有联系的,在不同主机之间是没有区分的意义的。
请添加图片描述(截图来源于计算机网络(王道考研))
熟知端口号:

应用程序熟知端口号
FTP(文件传输协议)21
SSH(安全外壳协议)22
TELNET( 远程终端协议 )23
SMTP(简单邮件传输协议)25
DNS(域名系统)53
TFTP(简单文件传送协议 )69
HTTP(超文本传输协议)80
SNMP(简单网络管理协议)161
HTTPS(超文本传输安全协议)443
MYSQL3306

2.3.2 发送方的复用和接收方的分用

在这里插入图片描述(截图来源于计算机网络微课堂(湖南科技大学))
根据上图,来解释一下发送方的复用和接收方的分用:

  1. 发送方的某些应用进程所发送的不同应用报文,在运输层使用UDP协议进行封装,这称为UDP复用;而在运输层使用TCP协议进行封装,这称为TCP复用
  2. 运输层使用端口号来区分不同的应用进程,不管是使用运输层的UDP协议封装成UDP用户数据报,还是使用TCP协议封装成的TCP报文段,在网络层都需要使用IP协议封装成IP数据报,这称为IP复用。
  3. IP数据报首部中协议字段的值,用来表明IP数据报的数据载荷部分封装的是何种协议数据单元,取值为6,标识封装的是TCP报文段,取值为17,表示封装的是UDP用户数据报。
  4. 接收方的网络层收到IP数据报后进行IP分用,若IP数据报首部中的协议字段的值为17,则把IP数据报的数据载荷部分所封装的UDP用户数据报上交运输层的UDP;若协议字段的值为6,则把IP数据报的数据载荷部分所封装的TCP报文段上交运输层的TCP。
  5. 运输层对UDP用户数据报进行UDP分用,对TCP报文段进行TCP分用,也就是根据端口号,将它们交付给上层相应的应用进程。

在这里插入图片描述(截图来源于计算机网络微课堂(湖南科技大学))
不管在运输层使用UDP还是TCP协议,在网络层都需要使用IP协议。

举个栗子:
在这里插入图片描述假设:Web服务器的域名是www.porttest.com, DNS服务器知道该域名以及其对应的IP地址,现在用户PC使用网页浏览器来访问Web服务器的内容。
过程:询问地址——>DNS服务器给出答复——>获得回答——>根据地址去找内容——>Web服务器发送内容——>获得内容

详细过程如下:

  1. 在浏览器地址栏上输入域名:www.porttest.com,该PC的DNS客户端进程会发送一个DNS查询请求报文,报文的内容是“歪?这网站的IP地址是什么?”。这个报文需要使用UDP协议,封装成UDP用户数据报,UDP首部中的源端口字段的值在49151~65535中挑选一个未被占用的,用来表示DNS客户端进程(源端口号可以理解为发送人的地址),例子中使用了49151;目的端口号(可以理解为接收人的地址)为53,这是DNS服务端进程所使用的端口号(看上一小节熟知端口号表)。之后将UDP用户数据报封装在IP数据报中,通过以太网,发送给DNS服务器。在这里插入图片描述

  2. DNS服务器收到IP数据报后,从中解封出UDP用户数据报,UDP首部中的目的端口号为53,这表明应该将UDP用户数据报的数据载荷部分,即DNS查询请求报文,交付给本服务器中的DNS服务器端进程,DNS服务器端进程解析DNS查询请求报文的内容,然后按其要求,查找对应的IP地址,之后会给用户PC发送DNS响应报文,其内容为“这域名对应的IP地址是192.168.0.3”。DNS响应报文需要运用运输层的UDP协议,封装成UDP用户数据报,其首部中的源端口字段值设为53,表明这是DNS服务端进程所发送的UDP用户数据报(回信时,表明发送人是DNS服务器端);目的端口号为刚刚用户PC所使用的源端口号。之后将UDP用户数据报封装在IP数据报中,通过以太网发给用户PC。

  3. 用户PC收到IP数据报后,从中解封出UDP用户数据报。UDP首部中的目的端口号为49152,这表明应将该UDP用户数据报的数据载荷部分也就是DNS响应报文,交付给用户PC中的DNS客户端进程。DNS客户端进程解析DNS响应报文的内容,就可知道自己之前所请求的Web服务器的域名所对应的IP地址。

  4. 用户PC知道域名所对应的IP地址后,用户中的HTTP客户端进程可以向Web服务器发送HTTP请求报文了,其内容为“这网页内容是什么”。HTTP请求报文需要使用运输层的TCP协议封装成TCP报文段源端口字段的值在49151~65535中挑选一个未被占用的,用来表示HTTP客户端进程,这里使用之前使用过的49152;目的端口字段的值设为80,这是HTTP服务端进程所使用的熟知端口号(看上表)。之后将TCP报文段封装在IP数据报中,通过以太网发送给Web服务器。

  5. Web服务器收到IP数据报后,从中解封出TCP报文段,TCP首部中的目的端口号为80,这表明应将该TCP报文段的数据载荷部分也就是HTTP请求报文交付给HTTP服务端进程。HTTP服务端进程解析HTTP请求报文的内容,然后按其要求查找首页内容。之后会给用户PC发送HTTP响应报文,其内容时HTTP客户端所请求的首页内容。HTTP响应报文需要使用运输层的TCP协议封装成TCP报文段,其首部中的源端口字段(发件人地址)的值设置为熟知端口号80,表明这是HTTP服务器端进程所发送的TCP报文段;目的端口字段(收件人地址)的值为49152,这是用户PC中发送HTTP请求报文的HTTP客户端进程。将TCP报文段封装在IP数据包中,通过以太网发送给用户PC。

  6. 用户PC收到该数据报后,从中解封出TCP报文段,其首部目的端口号为49152,这表明应该将TCP报文段的数据载荷部分也就是HTTP响应报文交付给HTTP客户端进程。HTTP客户端进程解析HTTP响应报文的内容并在网页浏览器中进行显示。

2.4 TCP的流量控制

一般来说,我们总是希望传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小。
TCP发送方收到接收方的零窗口通知后,应启动持续计时器,持续计时器超时后,向接收方发送零窗口探测报文。

2.5 TCP的拥塞控制(网课)

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
这部分内容讲的是四种拥塞控制的方式:慢开始、拥塞避免、快重传、快恢复。
这部分网课我觉得讲得十分清晰,用文字都难以描述(课程里举了很多例子很详细,搬过来就有点繁琐了),这里不具体展开了,下同,建议反复观看网课视频。

2.6 TCP超时重传时间的选择[(网课)](https://www.bilibili.com/video/BV1c4411d7jb?p=62

2.7 TCP可靠传输的实现(网课)

在这里插入图片描述

2.8 TCP的运输连接管理

TCP时面向连接的协议,它基于运输连接来传送TCP报文段。
TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。
TCP运输连接有以下三个阶段:

  1. 建立TCP连接
  2. 数据传输
  3. 释放TCP连接
    TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行。

2.8.1 TCP的连接建立

TCP使用“三报文握手”建立连接
在这里插入图片描述 TCP的连接建立解决了三个问题:

  1. 使TCP双方能够确知对方的存在;
  2. 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
  3. 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

2.8.2 TCP的连接释放

在这里插入图片描述为什么TCP客户要时间等待呢?因为防止报文丢失。如果TCP客户直接关闭了,最后一次发送的报文丢失了,TCP就处于关闭不了的状态,就会一直发送最后确认状态,无法达到CLOSE状态。
这可以理解为,你跟女朋友闹分手了,女朋友一声不吭没表明是否真的要分手,把你锁在门外,你只能急着一直敲门请求回应。(狗头)

2.9 TCP报文段的首部格式(网课)

这部分本应该在最开始,但是我看的计算机网络微课堂把它放在了运输层的最后,如果上文你弄明白了,看着部分就会有种恍然大悟的感觉,如果一开始就学习TCP首部格式,个人认为容易学不进去。上文有许多例子,如发送方的复用和接收方的分用中,最后为“不管在运输层使用UDP还是TCP协议,在网络层都需要使用IP协议。”举的例子中,出现了源端口和目的端口,现在在本节看来,应该是好理解多了。
在这里插入图片描述为了实现可靠传输,TCP采用面向字节流的方式。但可以在上文举的例子(2.3.2)可以看出,TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送。一个TCP报文段由首部和数据载荷两部分构成;TCP的全部功能都体现在它的首部中各字段的作用。
固定首部:
源端口:占16比特,用来标识发送该TCP报文段的应用进程。
目的端口:占16比特,用来标识接收该TCP报文段的应用进程。
序号:占32比特,指出本TCP报文段数据载荷的第一个字节的序号。
确认号:占32比特,指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。即若确认号为n,则表明到序号n-1为止的所有数据都已经正确接收,期望接受序号为n的数据。
确认标志位ACK:取值为1时确认号字段有效,为0时确认号字段无效。 TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置为1。
数据偏移:占4比特,并以4字节为单位。用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。这个字段实际上是指出了TCP报文段的首部长度。

  • 首部固定长度为20字节,因此数据偏移字段的最小值为二进制的0101
  • 首部最大长度为60字节,因此数据偏移字段的最大值为二进制的1111在这里插入图片描述

保留:占6比特,保留为今后使用,但目前应置为0。
窗口:占16比特,以字节为单位。指出发送本报文段的一方的接收窗口。

  • 窗口值作为接收方让发送方设置其发送窗口的依据。(发送窗口还取决于拥塞窗口的大小,要从中取小者)
  • 这是以接收方的接受能力来控制发送方的发送能力,成为流量控制。

检验和:占16比特,检验范围包括TCP报文段的首部和数据载荷两部分。在计算校验和时,要在TCP报文段前面加上12字节的伪首部。
同步标志位SYN:在TCP连接建立时用来同步序号。在“三报文握手”建立连接时,TCP客户发送报文段中,SYN=1表明这是一个TCP连接请求报文段,在TCP服务器进程发送的TCP连接请求报文段中,SYN和ACK设为1,表明这是个TCP连接请求确认报文段。
终止标志位FIN:用来释放TCP连接。在“四报文挥手”中,FIN=1表明这是TCP连接释放报文段。
复位标志位RST:用来复位TCP连接。当RST=1时,表明TCP连接出现了异常,必须释放连接,再重新建立连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。
紧急标志位URG和紧急指针字段用来实现紧急操作。

  • 紧急标志位URG:取值为1时紧急指针字段有效,为0时紧急指针字段无效。
  • 紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度。

当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。

扩展首部:
TCP首部除了20字节的固定首部之外,还有最大为40字节的扩展首部。
增加选项可以增加TCP功能,有以下选项:

  • 最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度。
  • 窗口扩大选项:为了扩大窗口(提高吞吐率)。
  • 时间戳选项:用来计算往返时间RTT;用于处理序号超范围的情况,又称为防止序号绕回PAWS。
  • 选择确认选项:用来实现选择确认功能.

填充:由于选项的长度可变,因此使用填充来确保报文段首部能被4整除。(因为数据字段,即首部长度字段,是以4字节为单位的)。

参考资料

计算机网络微课堂(湖南科技大学)第8讲(分层结构的必要性)、第9讲(分层思想举例)、第10讲(专用术语)
王道考研-计算机网络5.2、 5.3整章
TCP和UDP详解(非常详细) 作者:Hansionz
https://blog.csdn.net/hansionz/article/details/86435127

下一篇是HTTP/HTTPS、状态码、Cookie和Session、URI和URL的相关学习笔记,等我的《图解HTTP》到了,就开始写了~

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 11:06:18  更:2021-09-08 11:08:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:50:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码