1.传输层和应用层概述
2.传输层
2.1.UDP的首部格式
UDP首部固定是8B,因此不需要有首部长度的字段
2.2.TCP的首部格式
ACK:确认连接后ACK = 1
SYN:第一次握手和第二次握手为1
FIN:
检验和:检验首部和数据部分(整个报文段)
2.3.TCP的连接建立
1.头握手两次不携带数据,且SYN = 1,第三次可以携带也可以不携带数据,且不再携带SYN
2.ACK = 1表示针对上一个对方发送数据的确认,从第二次握手开始都置为1,第一次并没有收到数据,因此不需要确认,之后的每一次都会收到对方的数据,因此置为1
3.两边的seq无关,是乙方数据的序号,ack和对方的seq有关
4.ack是针对对方发送数据序号的确认,x + 1表示期待收到对方发送序号x + 1的数据
5.第二次握手服务器分配缓存和变量,第三次握手客户端分配缓存和变量
2.4.TCP的连接释放
1.第一次握手:不会携带数据,专门用于通知对方要断开连接,即FIN = 1;ACK = 1,仍处于连接建立阶段;客户端侧关闭连接
2.第二次握手:表示对第一次握手的确认ACK = 1;不管带不带数据,都会消耗一个序号,因此,ack也要相应 + 1
3.第三次握手:发送剩余数据;第二次握手可能携带数据,因此seq可能会比第二次握手增加很多;ACK = 1;ack同第二次握手,因为第二次握手和第三次握手间客户并没有发送数据;FIN = 1,主动断开连接,服务器侧断开连接
4.第四次握手:ACK = 1表示收到第三次握手;seq为第一次握手 + 1;ack表示期待收到服务器的下一个数据号(虽然收不到了);不会立即关闭连接
5.FIN只有在第一次握手和第三次握手出现,且为1
6.ACK连接建立后都需要置为1,即除连接建立的第一次握手外,所有数据都要置为1
2.5.慢开始和拥塞部分、快重传和快恢复
1.发送窗口 = min{拥塞窗口,接收窗口}:可能出现接收窗口在不断减小(接收窗口由一组数据缓存区组成,可能接收数据后放入该缓存区中并不往上交付,则就会一直占用该缓存区,进而接收窗口越来越小),而拥塞窗口不变或者变大
2.拥塞窗口初始值为1表示的是1个报文段
3.TCP 采用累积确认:接收方按序接受,如果没能按序收到某一帧,则一直返回该帧的ack
4.发送方在收到接收方返回的确认后,拥塞窗口+1:拥塞窗口取决于收到确认段的个数
①1RTT:cwnd = 1(初始时为1);发1个;确认1个
②2RTT:cwnd = 1 + 1 = 2(收到1RTT的确认时 + 1);发2个(在1个RTT内几乎同时发送);确认2个(在1个RTT内几乎同时收到)
③3RTT:cwnd = 2 + 2 = 4(收到两个确认,即+ 1 + 1);发4个;确认4个
④4RTT:cwnd = 4 + 4 = 8;发8个;确认8个
⑤5RTT:cnwd = 8 + 8 = 16;发16个;确认16个
⑥6RTT:cnwd = 16 + 1 = 17(到达门限值,指数增加改为线性增加,5RTT发完后改变,即5RTT结束后,6RTT开始前);发17个,确认17个
(1)理想情况下,每收到一个确认,下一个RTT的cwnd + 1
(2)在cnwd = 24时,发送方发送了24个,但是只收到了接收方返回的20个(可以是其他任意小于24的个数),即判定发生拥塞,更改cwnd为1
5.接收窗口和TCP建立结合:
①1RTT:第一次握手和第二次握手②2RTT:第三次握手并且携带数据,从此时开始计算
①发生超时:表明使用的是慢开始和拥塞避免
②以1KB的最大段长发送TCP段:MSS = 1KB
③拥塞窗口 = 16KB发生超时,随即拥塞窗口变为1,改变是即时的,不需要等待一个RTT;门限值变为超时拥塞窗口的一半,即8;
④1(未到达门限值,指数增大)→2→4→8(到达门限值,线性增大)→9→C
该题没有强调接收缓存,故视为接收方每次收到数据后直接向上交付
①发送窗口 = min{拥塞窗口,接收窗口},故拥塞窗口增长到10之前,发送窗口随拥塞窗口的改变而改变;拥塞窗口增长到10+时,发送窗口受到接收窗口的限制一直为10
②若设接收窗口大小足够,则10个RTT后,发送窗口大小为12
①4个RTT内,总共发送的数据为1 + 2 + 4 + 8 = 15KB
②接受的数据全部存入缓存,不被取走:4RTT时,接受窗口大小为16 - 15 = 1KB
③发送窗口 = min{拥塞窗口,接收窗口} = 1