线路:TCP报文下放到物理层传输。
TCP报文段中,“序号”长度为32bit,为了让序列号不会循环,则最多能传输2^32B的数据,则最多能传输:2^32/1500B个报文
结果:
吞吐率=一个周期内传输的数据/周期时间
假设窗口大小为xbit,则一个周期内传输的数据能传输xbit数据
周期时间=发送端的发送时延+A到B的传播时延+确认报文的发送时延(忽略)+确认报文的传播时延=x/256k + (128*10^-3 )*2
x=2^16bit=2^13B
注意两点:
1.数据偏移表示的就是TCP首部长度,TCP由TCP首部和数据部分组成,数据偏移表示的是TCP数据部分距离起始有多远,那就是首部长度了。单位为4B,所以首部长度要是4B的整数倍。
补充:IP片偏移单位为8B,片偏移的数据部分要为8B的整数倍。
2.可以通过端口查看TCP连接使用了什么协议?是客户端到服务器还是服务器到客户端?(客户端口随意,服务器端口固定)
例如上面例子,源端口:3368,目的端口:21
那么使用的就是FTP协议,并且这个报文段是从客户端发送到服务器端的。
首先分析一下IP分组前40B的内容:
由于TCP分组下放到网络层,会添加IP首部,所以IP的组成:20B的首部+数据部分,这个数据部分就是TCP的内容。
所以,对于一个IP分组:上面一整行共20B,表示IP首部,下面一整行表示TCP内容。
IP首部结构中一行=32bit=4B,对应的就是 "45 00 00 30”这样的一段:
1.1
哪几个是由H发送的:
H的IP地址为192.168.0.8,转化为16进制:C0 A8 00 08
查看IP首部的结构,源IP地址为192.168.0.8的IP分组有:1,3,4
也可以通过标识判断:发送方每产生一个IP数据报,标识字段自动+1。
那么,服务器就先后发送了2,5号IP分组,服务器S不仅仅只是和主机H进行通信,所以其标识字段是不连续的。
1.2
TCP连接的建立,是主机H与服务器S刚通信时就必须完成的。所以三次握手应该是主机H与服务器S通信的前3个IP分组:1,2,3
也可以通过IP首部首部的标志字段判断:
1:SYN=1,ACK=0
2:SYN=1,ACK=1
3:SYN=0,ACK=1
3,4号SYN,ACK和seq相同,为什么不是4:因为标识字段3:019c ,4:019d,说明H先发送3号,而TCP的建立一定是H先发送的两个IP分组建立的。
1.3
以太网数据帧长最少64字节,根据以太网数据帧的结构,那么数据部分(即IP数据报)最少要有46B。
根据IP首部“总长度”字段:
1,2号为30H=48B,3,5号为28H=40B,需要填充。
2.1
TCP建立连接时,只有最后一次连接能携带数据,也就是在1,2,3中只有3能携带数据,H发送的是1,3,4号IP分组,所以能携带数据的是3,4号分组。
携带的数据部分怎么算:IP分组的总长度 - IP首部 - TCP首部 (TCP的“数据偏移”字段)
拿第一个分组说,其总长度为30H,单位1B,总长度=30H=48B;IP首部长度为5H,单位是4,所以IP首部长度为5*4=20B,TCP首部长度为7H,单位为4,4*7=28B,数据部分:
48-20-28=0,所以第一个IP分组不携带数据。
其他同理,得发送的数据:
0+0+16B=16B
也可以从TCP的“确认号”来分析,确认号表示服务器S期待收到主机H下次发送的报文序号是多少。从刚开始的84 6b 41 b6到84 6b 41 d6,两者相减也能得到16B
3.1
经过多少路由器看“生存时间”字段:
刚开始S发出时生存时间字段为40H,发送给H的第一个分组“生存时间”字段值为31H
40H-31H=FH=15,则表示经过了15个路由器。
1
H3请求建立TCP连接,虽然这个过程不携带数据,但是会消耗一个seq。
所以H3从序号101开始发送数据。
以MSS大小的段向S发送数据,发送窗口取min{拥塞窗口,接收窗口}
当发送方返回对8个报文段的确认时,拥塞窗口变为16,而此时的接收窗口为5,取最小值,所以下次发送5个报文段
2.1
当H3收到8个确认段时,说明S已经收到了8个TCP段,所以通告给H3的接收窗口是20-8=12。
2.2
慢开始阶段,H3每收到一个确认报文段,拥塞窗口+1,例如:
主机发送1个报文,收到1个报文段确认,拥塞窗口变为1+1=2。主机发送2个报文段,收到2个报文段的确认,拥塞窗口变为2+2=4,所以我们看到的是拥塞窗口成倍增加的现象
这里收到了8个确认段,所以主机H3的拥塞窗口为8+1=9,发送窗口=min{9,12}=9。
补充:而在拥塞避免阶段,每收到一个确认报文段,只会时拥塞窗口+1/n(n分之1)的MSS。因为一个轮次中有n个确认帧,所以拥塞窗口+(n*1/n=1)个MSS。
3
刚开始seq=101,总共发送了20K的数据,所以发送窗口为0时,下一个数据段序号是:
20*1024+101=20581
平均传输速率,20KB数据,总共往返5轮:
20KB/(5*200ms)=20KB/s
4.最短时间表示:H3给服务器发送断开连接请求,服务器确认后,也不再发送数据。
时间为1.5*MSS=1.5*200=300ms
(1)持久,非持久,控制连接
(2)第一个字节序号:101;第二次挥手seq:102+18000=18102
(3)H收到2101的确认段时,拥塞窗口+1:则为2+1=3MSS
由于拥塞控制初始阈值为4MSS,所以当接收到7101确认帧后,拥塞窗口增加为5MSS
(4)数据总大小18000B,总共6个传输轮次:
18000B/60ms=0.3MB/s=2.4Mb/s