文章目录
- 一. OSI和DoD模型
- 二. 运输层的概述
- 2.1 进程之间的通信
- 2.1.1 运输层为相互通信的应用进程提供了逻辑通信
- 2.1.2 应用进程之间的通信的特点
- 2.1.3 运输层协议和网络层协议的主要区别
- 2.1.4 运输层的主要功能
- 2.2 因特网的运输层协议
- 2.2.1 运输层两种协议的来源
- 2.2.2 传输层两个协议
- 1. TCP(Transmission Control Protocol)传输控制协议
- 2. UDP(User Data Protocol)用户数据报协议
- 2.3 使用UPD和TCP协议的各种应用和应用层协议
- 2.4 传输层协议和应用层协议的关系
- 2.5 服务和应用层协议的关系
- 2.6 如何在Windows上安装服务
- 2.7 如何查看服务侦听的端口
- 2.8 如何更改服务使用默认端口
- 2.9 如何设置Windows网络安全
- 2.10 运输层一些基本概念
- 2.10.1 运输层的复用与分用
- 2.10.2 运输层端口的概念
- 2.10.3 端口在进程之间的通信中所起的作用
- 2.10.4 运输层端口的分类
- 三. 传输层中用户数据报协议(UDP)
- 1. UDP协议概述
- 1.1 主要特点
- 1.2 UPD的缺点
- 2. UDP报文的首部格式
- 3. UDP的多路分用模型
- 4. 套接字(Socket)地址
- 四. 传输层的传输控制协议(TCP)
- 4.1 TCP协议概述
- 4.1.1 TCP 的主要特点
- 4.1.2 TCP 面向流的概念
- 4.1.3 TCP 的连接
- 4.2 TCP报文段的格式
- 4.2.1 TCP报文段的特点
- 4.2.2 TCP报文段的首部格式
- 2. 抓包分析TCP首部
- 五. TCP的运输连接管理
- 5.1 TCP连接建立的过程
- 5.2 TCP的连接释放
- 六. TCP可靠传输的实现
- 6.1 概述
- 6.2 TCP实现可靠传输的机制
- 6.3. 如何实现可靠传输->以字节为单位的滑动窗口技术
- 七. TCP如何实现流量控制
- 八. TCP如何避免网络拥塞
- 8.1 概述
- 8.2. 拥塞控制起到的作用
- 8.3 拥塞控制的四种算法
- 8.4. 慢开始和拥塞避免
- 3. 快重传和快恢复
- 3. 发送窗口的实际上限制
一. OSI和DoD模型
二. 运输层的概述
实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务
2.1 进程之间的通信
从通信和信息处理的角度看,运输层向它上面的应用层提供端到端的通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
2.1.1 运输层为相互通信的应用进程提供了逻辑通信
位于网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,核心部分的路由器只有三层
2.1.2 应用进程之间的通信的特点
- 两个主机进行通信实际上就是两个主机中的应用进程互相通信。
- 应用进程之间的通信又称为端到端的通信。
- 运输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。
- “运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。
2.1.3 运输层协议和网络层协议的主要区别
2.1.4 运输层的主要功能
- 运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。
- 运输层还要对收到的报文进行差错检测。
- 运输层可选的功能:可靠数据传输、流量控制、拥塞控制
2.2 因特网的运输层协议
2.2.1 运输层两种协议的来源
因特网的网络层为主机提供逻辑通信服务,是一种尽最大努力交付的数据报服务,在IP报文传输过程可能有差错、丢失、失序等,这些对于电子邮件,文件传输,万维网等很多应用,数据的丢失可能造成灾难性后果,所以运输层必须提供可靠的数据传输服务
但是,对于实时的音频,他们可以承受一定程度损失,如果仍然使用可靠传输这个复制的机制,可能会带来一些不利的因素
总结 :运输层不断要提供可靠的传输服务,也要提供高速的具有少量不可靠的传输服务
2.2.2 传输层两个协议
两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元TPDU (Transport Protocol Data Unit)。
在因特网上:
- TCP 传送的协议数据单元称为 TCP 报文段(segment)
- UDP 传送的协议数据单元称为 UDP 报文或用户数据报。
传输层最大数据包是65535字节,而数据链路层数据最大只有1480字节。所以需要分段,但是只要分段,就有可能丢包,因为网络层不负责可靠传输。所以要求服务器和客户端保持会话,直到数据传输完成。
1. TCP(Transmission Control Protocol)传输控制协议
特点:
TCP 则提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
应用场景:
需要将要传输的文件分段传输时;就需要TCP协议来建立会话实现可靠传输;同时也有流量控制功能。
2. UDP(User Data Protocol)用户数据报协议
特点:
UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。
应用场景:
一个数据包就能完成数据通信;不需要建立会话和流量控制;屏幕广播/多播;是一种不可靠传输。
2.3 使用UPD和TCP协议的各种应用和应用层协议
2.4 传输层协议和应用层协议的关系
- 运输层的 UDP 用户数据报与网际层的IP数据报有很大区别。IP 数据报要经过互连网中许多路由器的存储转发,但 UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
- TCP 报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接。
(1) TCP和UDP协议和不同的端口即可对应一个应用层的协议。注意,53大部分是与UDP相连。
(2) 熟知数值一般为0-1023,登记端口号数值1024-49151,客户端口号数值为49152-65535.
(3) 常用的应用层协议使用的端口(号):
2.5 服务和应用层协议的关系
防火墙是基于网卡的,只打开必要的端口,不必要的端口不允许接收数据,不影响服务的运行和监听。
服务使用TCP或UDP的端口侦听客户端请求,服务必须是启动状态,它才侦听客户端的请求
客户端使用IP地址定位服务器,使用目标端口,定位服务;
可以在服务器网卡上设置只开放必要的端口,实现服务器网络安全。
2.6 如何在Windows上安装服务
DNS服务
Web服务
SMTP //发邮件
POP3 //收邮件
2.7 如何查看服务侦听的端口
netstat -a
netstat -an 以数字的形式查看端口
netstat -n 查看建立的会话
netstat -nb 查看建立会话的进程
telnet 192.168.80.100 3389 测试到远程计算机某个端口是否打开
2.8 如何更改服务使用默认端口
可以迷惑入侵者,使系统更加安全。
改完端口之后,入侵者就不知道你这个端口代表什么服务了
2.9 如何设置Windows网络安全
设置本地连接 TCP/IP筛选
2.10 运输层一些基本概念
2.10.1 运输层的复用与分用
- 复用是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据(当然需要加上适当的首部);
- 而分用是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
- 要能正确地将数据交付给指定应用进程,就必须给每个应用进程赋予一个明确的标志。
- 在TCP/IP网络中,使用一种与操作系统无关的协议端口号(protocol port number)(简称端口号)来实现对通信的应用进程的标志。
2.10.2 运输层端口的概念
- 端口就是应用进程的运输层地址。
- 端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。
- 从这个意义上讲,端口是用来标志应用层的进程。
2.10.3 端口在进程之间的通信中所起的作用
- 端口用一个 16 位端口号进行标志。
- 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。
- 并且TCP和UDP端口号之间也没有必然联系
2.10.4 运输层端口的分类
- 熟知端口 其数值一般为 0~1023。当一种新的应用程序出现时,必须为它指派一个熟知端口。
- 登记端口 其数值为 1024~49151。这类端口是 ICANN 控制的,使用这个范围的端口必须在 ICANN 登记,以防止重复。
- 动态端口 其数值为 49152~65535。这类端口是留给客户进程选择作为临时端口。
三. 传输层中用户数据报协议(UDP)
1. UDP协议概述
- UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。
- 虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点
1.1 主要特点
(1) UDP是无连接的,即发送数据之前不需要建立连接。
(2) UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
(3) UDP是面向报文的,UDP没有拥塞控制,适合多媒体通信的要求。
(4) UDP支持一对一,一对多,多对一,多对多交互通信。
(5) UDP首部开销小,只有8个字节。
1.2 UPD的缺点
- 虽然某些实时应用需要使用没有拥塞控制的 UDP,但当很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,结果大家都无法正常接收。
- 还有一些使用 UDP 的实时应用需要对UDP 的不可靠的传输进行适当的改进以减少数据的丢失。
2. UDP报文的首部格式
首部中的长度指的是UDP用户数据报的长度(首部+数据)。计算UDP检验和的例子:
3. UDP的多路分用模型
4. 套接字(Socket)地址
UPD报文首部中最重要的字段就是源端口和目的端口,他们用来标识UDP发送方和接收方。
实际上,UPD通过二元组(目的IP地址,目的端口号)来定位一个接受方应用进程,
而用二元组(源IP地址,源端口号)来标识一个发送方进程
二元组(IP地址,端口号)被称为套接字(socket)地址
四. 传输层的传输控制协议(TCP)
4.1 TCP协议概述
4.1.1 TCP 的主要特点
(1) TCP是面向连接的传输层协议。(三次握手)
(2) 每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。
(3) TCP提供可靠交付的服务。(确保不丢包)
(4) TCP提供全双工通信。(因为需要接收端的反馈,例如如果接收端处理不过来,可让发送端慢一点,流量控制)
(5) 面向字节流。
注意事项:
4.1.2 TCP 面向流的概念
如果要传输一个比较大的数据,首先一次只会传输一小块,这个数据块的大小是没有规律的。加上数据包数据帧的头,发送给接收端,接收端去掉首部,再次拼接。
4.1.3 TCP 的连接
(1) TCP把连接作为最基本的抽象。
(2) 每一条 TCP 连接唯一地被通信两端的两个端点所确定
(3) TCP连接的端点不是主机,不是主机的IP地址,不是应用程序,也不是传输层协议端口,TCP连接的端点叫 套接字(socket).
(4) 端口号拼接到IP地址即构成了套接字。
4.2 TCP报文段的格式
4.2.1 TCP报文段的特点
- TCP 报文段分为首部和数据两部分。
- TCP 的全部功能都体现在它首部中各字段的作用。
- TCP 报文段首部的前 20个 字节是固定的,后面有 4N 字节是根据需要而增加的选项(N 必须是整数)。因此 TCP 首部的最小长度是 20 字节。
4.2.2 TCP报文段的首部格式
(1) 源端口:2个字节16位。
(2) 目的端口:2个字节16位。
(3) 序号(seq):当前数据的第一个字节在整个文件中的序号。
(4) 确认号ack:接收端发送,提示发送端下一次该发的数据在整个文件中的序号。接收端收到后,会把这个序号之前的数据从缓存中删掉。
(5) 数据偏移:当前TCP报文段第多少个字节后是TCP的数据部分了。数据偏移最多表示1111,即15(因为是以4字节为单位),所以他最多可以表示15乘以4,即60个字节的偏移量(即TCP首部长度最大为60字节),所以选项+填充最多只能是40个字节。
(6) 保留:6位,无作用。
(7) URG紧急位:urgent,意思是优先级高,发送端优先发送,而不是在缓存中排队。
(8) ACK确认位:acknowledge,1意味着确认建立了会话。
(9) PSH推送位:1意味着接收端优先读取,而不是在缓存中排队。
(10) RST复位位:reset,1意味着TCP会话出现严重错误,必须释放和重新连接。
(11) SYN同步位:同步。1意味着要发起会话。
(12) FIN终止位:finish,1意味着释放连接。
(13) 窗口:接收端先发,发送端根据接收端的窗口尺寸确定发送端窗口尺寸。
(14) 检验和:校验范围是首部和数据两部分
(15) 紧急指针:只有URG为1才有用。
(16) 选项:可以规定最大数据报(MSS)的长度,还可以判断是否支持选择性确认(SACK)
(17) 填充字段:为了使整个首部长度是 4 字节的整数倍
2. 抓包分析TCP首部
第一个数据包
第二个数据包
第三个数据包
确认数据包
五. TCP的运输连接管理
传输连接有三个阶段,即:连接建立,数据传送,连接释放。
TCP连接的建立都是采用客户服务器方式。
主动发起连接建立的应用进程叫做客户(client)。
被动等待连接建立的应用进程叫做服务器(server)。
5.1 TCP连接建立的过程
使用三次握手建立
头两次握手除了确定双方都能联通外,还通知了双方的一些端口信息。
第三次握手原因:假如把三次握手改成仅需要两次握手,死锁是可能发生的。
作为例子,考虑计算机A和B之间的通信,假定A给B发送一个连接请求分组,B收到了这个分组,并发送了确认应答分组。按照两次握手的协定,B认为连接已经成功地建立了,可以开始发送数据分组。可是,B的应答分组在传输中被丢失的情况下,A将不知道B是否已准备好,A认为连接还未建立成功,将忽略B发来的任何数据分组,这样就形成了死锁。
缺点:
5.2 TCP的连接释放
六. TCP可靠传输的实现
6.1 概述
6.2 TCP实现可靠传输的机制
(1)可靠传输的工作原理——停止等待协议。
(2)确认丢失和确认迟到
(3)可靠通信的实现
使用上述的确认和重传机制,微秒就可以在不可靠的传输网络上实现可靠的通信。
这种可靠传输的协议常称为自动重传请求ARQ(Automatic Repeat reQuest)。
ARQ表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。
停止等待协议缺点:信道利用率低。
停止等待协议优点:简单
- 信道利用率
信道利用率U
如何提高利用率?
进行流水线传输
发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。由于信道上一直有数据不间断的传送,这种传输方式可获得很高的信道利用率。
流水线传输可靠传输是如何进行确认的?
使用连续ARQ协议
如果1确认收到了,则滑动窗口。
如果12收到了,3没有收到,则滑动窗口会会回溯到3位置,重新发送。
因为滑动窗口每一个数据包都要有一个确认,效率还是不高
我们使用:累计确认(接收方)提高效率
接收方一般采用累计确认的方式。
优点:容易实现,信道利用率高。
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息
6.3. 如何实现可靠传输->以字节为单位的滑动窗口技术
如果丢包了会进行SACK(选择性确认)
- 超时重传时间的选择
七. TCP如何实现流量控制
解决通信两端处理时间不一样的问题。通过实时调整滑窗尺寸的大小(尺寸甚至可以是0)来实现流量控制。接收端主动调整滑窗大小,发送端根据接收端发送的报文调整相应的滑窗。发送端也会定时发送报文向接收端确认滑窗信息,避免接收端发送的相关调整滑窗大小的报文丢失带来的影响。
8.1 概述
(1)出现资源拥塞的条件:对资源需求的总和>可用资源。
(2)拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。
(3)流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制,它所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
拥塞控制的目的:
防止过多的数据注入到网络中(全局性)
8.2. 拥塞控制起到的作用
红线和绿线之间是数据丢失内容。
8.3 拥塞控制的四种算法
8.4. 慢开始和拥塞避免
(1)发送方维持 拥塞窗口cwnd(congestion window)
(2)发送方控制拥塞窗口的原则是:
只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去;
只要网络出现拥塞,拥塞窗口就减少一些,以减少注入到网络中的分组数。
(3)慢开始算法的原理
(4)设置慢开始门限状态变量ssthresh
慢开始门限状态变量ssthresh的用法如下:
当cwnd<ssthresh时,使用慢开始算法;
当cwnd>ssthresh时,停止使用慢开始算法,改用拥塞避免算法;
当cwnd=ssthresh时,使用慢开始算法或拥塞避免算法均可;
(5)拥塞避免算法的思路
让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,使拥塞窗口cwnd按线性规律缓慢增长。
(6)当网络出现拥塞时对策
无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但是不能小于2)。
然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。
这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间吧队列中积压的分组处理完毕。
(7)慢开始和拥塞避免算法的实现举例
必须强调指出:
拥塞避免并非指完全能够避免拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。
拥塞避免是说在拥塞避免阶段吧拥塞避免窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
3. 快重传和快恢复
快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认,这样做可以让发送方及早知道有报文段没有到达接收方。
当发送端收到连续三个重复的确认时,就执行“乘法减少”算法,即把慢开始门限ssthresh减半,但拥塞窗口cwnd现在不设置为1,而是设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大
3. 发送窗口的实际上限制
取接收方窗口和 拥塞窗口 这两个变量中的较小值,按以下公式确定。
发送窗口的上限制 = Min [rwnd, cwnd].