文章目录
- 前言
- 1、概述
- 1.1 运输层的通信端口
- 1.2 协议端口号的作用,常见端口号
- 2、UDP
- 3、TCP
- 4、可靠传输工作原理
- 4.1 停止等待协议
- 4.2 ARQ协议与Go-Back-N机制
- 4.3 连续ARQ协议
- 5、TCP首部
- 6、可靠传输的实现
- 6.1 滑动窗口机制的工作原理
- 6.2 超时重传时间
- 7、TCP流量控制
- 8、TCP 拥塞控制
- 8.1 拥塞控制所起的作用
- 8.2 四大算法
- 9、TCP的运输连接管理
- 9.1 三次握手
- 9.2 四次挥手
前言
传输层是整个网络体系中的关键层次。为运行在不同主机上的进程提供逻辑通信。网络层为不同主机提供逻辑通信。
1、概述
1.1 运输层的通信端口
主机中的进程号
1.2 协议端口号的作用,常见端口号
协议端口号的作用:识别目的主机中需要通信的进程
2、UDP
UDP是一种轻量级的传输协议,UDP协议仅在IP数据报服务上加了复用和分用以及差错检测。UDP是一种不可靠的传输协议,但因其拥有更高的传输效率,在一些对传输数据不需要非常严谨的条件下,使用UDP较TCP更有优势。
UDP的特点:
- UDP面向无连接:因此UDP不会引入建立连接的时延。如果对可靠性要求高,则就需要使用TCP。
- 尽最大努力交付 :TCP需要在端系统中维护连接状态,而UDP不需要,因此能够支持更多的活动客户机。
- UDP首部开销小。TCP首部20B,UDP首部8B。
- 应用层能更好的控制要发送的数据和发送时间。UDP没有拥塞控制,因此在网络中的拥塞不会影响主机的发送效率。
- UDP是面向报文:对于发送方的UDP直接对应用程序传输的报文加上UDP首部后就向下交付。
- UDP无拥塞控制:网络拥塞不会影响UDP的传输效率。
- UDP支持多种通信方式:支持一对一,一对多,多对一,多对多的通信方式。
3、TCP
TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决可靠、有序、无丢失和不重复问题。
TCP特点:
- TCP是面向连接的传输协议:应用程序使用TCP协议之前,必须先建立TCP连接。
- TCP提供可靠交付:通过TCP连接传送的数据,保证传送的数据无差错、不丢失、不重复且按序到达。
- TCP点对点通信 :每条TCP的连接只能由两个端点,每条TCP连接只能是点对点的。
- TCP全双工通信:允许通信双方的应用进程在任何时候都能发送数据,因此TCP连接的两端都设有发送缓存和接受缓存,用来临时存放双向的通信的数据。
发送缓存用来暂时存放:
①发送应用程序传送给发送方TCP准备发送的数据,;
②TCP已发送单位收到确认的数据。
接收缓存用来暂时存放:
①按序到达但尚未被接收应用程序读取的数据。
②不按序到达的数据。 - TCP面向字节流:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交付下来的数据仅视为一连串的无结构字节流。
- 套接字:Socket由IP,端口号组成。网络中通过IP地址来标识和区别不同主机,通过端口号来区别和区分一台主机中不同的进程。套接字能够唯一标识网络中一台主机中的一个进程。
4、可靠传输工作原理
4.1 停止等待协议
机制:停止等待协议就是每发送一个分组就停止发送,等待对方的确认。在收到对方的确认后再发送下一个分组。
特点:显然这个这个时候信道利用率极低,为了提高信道的利用率,采取像计算机组成原理中讲到的”指令流水线思想“。在计网中流水线的体现就是ARQ滑动窗口协议。
4.2 ARQ协议与Go-Back-N机制
ARQ:自动重传请求,为了防止防止发送方一直等待下去,发送方每发送一个分组就为该分组设置计时器,当超过一定时间就自动重传该报文。接收方不必每一个分组都返回确认,只用返回按需到达的最后一个分组。
优点:容易实现,信道利用率提高。
缺点:当中间某个分组丢失时,发送方必须从丢失的那个分组开始将后面所有分组重传,也就是Go-back-N机制。以此实现可靠传输。可见,当通信线路不好时,连续ARQ协议会带来负面的影响。
4.3 连续ARQ协议
连续ARQ协议规定:发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
发送窗口不变的情况:①没有收到接收方的确认。②发送窗口变小了。
rwnd: 接收窗口
cwnd: 拥塞窗口
也就是说,发送窗口的大小是根据网络状况和点对点通信的接收窗口的大小来决定的。
5、TCP首部
理解TCP首部各字段含义非常重要,后期三次握手四次挥手客户端服务端之间的同步连接信号都是通过TCP首部字段来实现的。
- 序号(seq):本报文段所发送的数据的第一个字节的序号
- 确认号(ack):发送期望收到的下个报文段的数据的第一个字节序号。
- 数据偏移:数据起始处距离TCP报文段的起始有多远。
- URG:URG=1,表明紧急指针字段有效,因尽快传输
- ACK:确认位,ACK=1时,确认号有效,ACK=0时确认号无效。
- PSH:推送位,PSH=1时表明将发送缓存中尽快交付应用进程,而不是等到缓存位满了才交付。
- RST:复位位,当RST=1时,表明TCP连接中出现严重差错,必须释放连接,重新建立运输连接。
- SYN:同步位,当SYN=1时,表示这是一个请求连接或连接接收报文。
当SYN=1,ACK=0,这是一个请求连接报文,若对方同意建立连接,则在响应报文中SYN=1,ACK=1,即连接接收。 - FIN:中止位,用来释放一个连接,FIN=1表明此报文段的发送发的数据已经发送完毕,请求释放传输连接。
- MSS:TCP报文段中的数据字段的最大长度。
6、可靠传输的实现
6.1 滑动窗口机制的工作原理
我自己的理解是,滑动窗口机制就是,B是接收方,A是发送方,A根据B的拥塞情况设置自己的发送窗口大小。
A:已发送并收到确认,已发送未被收到确认,允许发送但未发送,不允许发送。
B:以发送确认并交付主机,未按顺序到达,语序接收,不允许接收。
可靠之处在于,发送窗口每发送一个分组都设置一个计时器,也就是超时重传时间,当超过这个时间还没收到接收端的确认,就重传。
若B收到未按顺序到达的字节先保留在接收缓存中,直到收到前面缺少字节再将给A发送确认。关键在于,超时重传时间的选择,是一个关键,设置小了会导致重传次数增多,导致网络拥塞,设置大量导致网络空闲时间增多,传输效率降低。因此就针对该问题,提出了超时重传时间选择的问题。
6.2 超时重传时间
TCP设置了一种自适应算法来设置最为合理的(超时重传时间)。由与两部分构成。
: 每个报文从发出到收到确认的时间间隔为(报文的往返时间)。求的一个加权平均往返时间。
: 是的偏差加权平均值,当第一次测量时,值取为测量到的样本值的一半。更新公式如下。
有了超时重传时间的计算公式,发现,当RTT的取值可能是,偏大,或者偏小的(考虑超时重传报文的特点)。如果不解决这个问题,计算出来的RTO仍然是没有用的,最先出现的karn算法,规定“只要出现了报文段重传,就不采取此时的RTT样本”。网络中可能一直发生重传也就是RTO不会得到更新,因此出现了改进的karn算法,
以上就是TCP中的可靠传输机制的实现
7、TCP流量控制一般来说,网络总是希望传输的越快越好,但是发送的过快,可能接收方来不及接收,导致数据丢失,为了解决速度不匹配的问题,出现了流量控制。使用滑动窗口机制来实现流量控制。
必出大题!
当出现网络拥塞时的情况为:。这个时候处理拥塞控制不简单的采取增加网络资源,可能会导致更坏的网络情况。需要分析拥塞发生的原因,采取更为复杂的手段处理网络拥塞。
TCP进行拥塞的算法有四种。慢开始,拥塞避免,快重传,快恢复。
假设:
① 数据是单方向的传送,对方只传送确认报文。
② 接收方总是由足够大的缓存空间,因而发送窗口的大小由网络的用色成都来决定。
8.1 拥塞控制所起的作用
拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
8.2 四大算法
(1) 慢开始和拥塞避免算法
- 慢开始算法:
先令拥塞窗口cwnd=1,即一个最大报文段长度MSS。每经过一个轮次(往返时延RTT),就将cwnd加倍,cwnd以指数增长,知道到达sstresh改用拥塞避免算法。 - 拥塞避免算法:
cwnd每经过一个RTT就增加一个MSS(加法增大),而不是加倍。需要强调的是,拥塞避免算法是在一定程度上避免网络拥塞,而不是完全避免网络拥塞。
根据cwnd大小执行不同算法如下:
cwnd < sstresh : 慢开始算法
cwnd > sstresh : 拥塞避免算法
cwnd = sstresh : 通常使用拥塞避免算法。
无论使用哪种算法,只要发生网络拥塞,就将sstresh设置为当前cwnd的一半,将cwnd设置为1,执行慢开始算法。
(2)快重传和快恢复
快重传和快回复算法是对慢开始和拥塞避免算法的改进。
快重传
当发送方连续收到三个(来自接收方)重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待报文段的计时器超时。快恢复
当发送端收到三个ACK报文后,ssthresh设置为当前cwnd的一半,cwnd也设置为当前cwnd的一半,然后开始执行拥塞避免算法。
在流量控制中,rwnd大小根据接收方确定。在拥塞控制中,cwnd则是发送发根据网络情况自行调节。
发送方窗口的实际大小由流量控制和拥塞控制共同决定的,发送窗口应该取min{rwnd, cwnd}
9、TCP的运输连接管理更加详细在这里
9.1 三次握手
服务器创建传输控制模块TCB,进入监听状态。
客户端创建传输控制模块TCB。
①客户端向服务器发送连接请求报文,SYN=1,初始化序号seq=x。进入SYN-SENT状态。
②服务器收到客户端发送的连接请求报文后,回复连接同意报文,SYN=1,seq=y,ack=x+1,ACK=1。进入SYN-RCVD状态。
③客户端收到服务端回复的连接同意报文后,再回复给服务器一个,确认报文,SYN=1,seq=x+1,ack=y+1,ACK=1。进入ESTABLISHED状态。
9.2 四次挥手
服务器创建传输控制块TCB,时刻准备接收客户进程的请求。
客户端创建传输控制块TCB,然后向服务器发送释放请求报文。
①客户端向服务端发送连接释放请求报文,FIN=1,seq=u。FIN-WAIT-1.
②服务端收到服务端的报文后,如果同意连接,回复ACK=1,seq=v, ack=u+1。进入CLOSE-WAIT状态。客户端收到服务端的同意报文后,进入FIN-WAIT-2状态。
③服务器发送完数据以后,就向客户端发送,FIN=1,seq=w,ack=u+1,进入LAST-ACK状态。
④客户端收到服务端发送的报文后,回复确认ACK=1 ,seq=u+1, ack=w+1,客户端进入TIME-WAIT(时间等待),等待2MSL以后没有收到服务端的报文就将连接释放。
(等待2MSL是,为了收到客户端的最后一个ACK报文,同时为了阻断客户端之前发送但是未传送过来的报文)