Featured image of post BUAA CN Week4 T层

BUAA CN Week4 T层

线上系统入门之linux

说在前面

本周是五一假期周,但是实验的进度并不停滞。

学生需自行预约时间完成传输层的实验内容。

实验本身的操作难度约等于0,而理论分析的含量非常高。

TCP在理论课中已占了较大的篇幅,因此本次博客不强调理论知识,

着重讲解linux线上平台的使用。

上篇博客我们使用的是与机房环境更加相似的Winxp系统,

这次TCP实验则需要我们使用Linux系统进行操作。

还是老样子,我把需要注意的细节先放在最前面:

  1. 在第一次博客中便提到这个链接: 网络实验常见问题解答

    它应该能解决你绝大多数的问题,例如登录账号密码,如何连接中间设备,如何配置主机IP,如何修改sequence号为具体数值等等。

    下面我就讲文档里没有的内容。

  2. PC与中间设备的对应关系和之前是一样的。虽然这次桌面上没有快捷方式,但是在终端minicom之后对应的中间设备仍然是唯一确定的。

    PCA:S1、PCB:S2、PCC:R1、PCD:R2

    你问我怎么知道的? dis cu 再结合实验验证即可确定。

  3. PCB一般来说有Eth0和Eth1两个网络,请一定注意配置IP地址时,连接的是你组网的那个端口。

  4. linux的窗口关闭/最大化/最小化位于左上角。

  5. linux好像不支持双击。打开文件夹都得右键Open。

  6. 无意间探索到的一些快捷键:(超级终端均可使用)

    ctrl+L = dis ip r,可以快速查看路由表信息

    ctrl+G = dis cu,可以快速查看当前设备的配置

实验部分

正如前文所说,本次实验组网很简单,而难点在于分析。

首先提醒大家TCP的三个实验前需要记录一下发送方初始序号,实验报告要填。

TCP实验主要考察了:连接控制、流量控制、拥塞控制。

连接控制

其实就是三次握手和四次挥手。

这是理论课的重点,这里就简单概括几条:

  1. 建立连接是SYN,结束连接是FIN。
  2. 建立连接时,报文的TCP Header会有Option来约定MSS以及是否SACK等内容。
  3. 建立:Client发出SYN请求,Server回应请求并发出SYN请求,Client回应请求。
  4. 结束:Client发出FIN请求,Server回应请求(此时还可以发数据),Server发出FIN请求,Client回应请求。

滑动窗口

需要注意拥塞窗口常常写成以报文数为单位,而发送窗口与接收窗口以字节数为单位,中间有1460的倍数关系。

下面解释几个名词。

rcv_wnd:接收窗口的大小,来自于ACK报文的TCP Header信息。

snd_wnd_left:发送窗口的最左侧,也即已发出且尚未确认的最早字节号。

snd_wnd_pointer:当前正在发送的字节号。

snd_wnd_point-left:已发出且尚未确认的字节数。

snd_wnd_left+cwnd:拥塞窗口限制下的发送窗口右边缘。

snd_wnd_left+rcv_wnd:接收窗口限制下的发送窗口右边缘。

发送窗口右边沿:上面两行中的最小者作为真正的发送窗口右边缘。

通告的接收窗口:ACK报文视角下的rcv_wnd。

接收窗口左边沿:当前已接收未确认的最早字节号,数值等同于对应字节的snd_wnd_left。

接收窗口指针:当前正在接受的字节号,数值等同于对应字节的snd_wnd_pointer。

接收窗口右边沿:数值等同于对应字节的snd_wnd_left+rcv_wnd。

在接收缓存中的数据量(即未确认的数据):数值等同于对应字节的snd_wnd_point-left。

具体知识见理论。这是理论重点。

关注零窗口报文Zero-Window及其探测报文Keep-Alive。

注意理论课讲的保活计时器虽然也是Keep Alive,

但目的完全不同,保活计时器是用于Server端建立连接后迟迟收不到请求的情况,

而零窗口探测报文只是用于询问对方现在是否愿意接受字节(观测对方ACK报文的rcv_wnd)

拥塞控制

这位更是理论重重点,大题必考。

没啥讲的必要,写了也0个人会看。

后记

UDP后续再补,这篇博客目前很水,

不过水就水吧,确实没有太多需要说的。

先这样发了。

comments powered by Disqus
Easy Life and Easy Learning
使用 Hugo 构建
主题 StackJimmy 设计