文章目录
《计算机网络自顶向下》Wireshark Lab + 套接字编程作业 + 杂项实验室编程作业 全实验博客链接
各位好 啊 学计算机想要学好真的还是挺难的 说实话 科班学计算机如果想要花大量的时间去学 只能把平时的课程大部分时间不去上 如果班级管理严格或者说 各种因素让你不得不去上
哎 真的还是挺苦恼的 想要自己花时间静下心来做很多事情真的还是好不容易 刚刚就出去买了瓶尖叫 就发生了这么多事情 我把UDP 和 TCP争取早点做出来 自己出去散步散散心吧
但还好的是 这个星期 待会还有一节课就彻底放了 cqupt三天拿出来新生迎接 当然也不能浪费时间去复习
刚刚和老师说了一下 之后又和其他老师沟通了一下 哈哈哈 挺好的 本来烦躁和困顿的心情一下子就破开了 ^^ 把握机会把Lab做完吃饭
方便大家还是给一下链接吧 官网链接
WIRESHARK LABS
下面是文档的中文截图 就截一部分 继续往下看了

进入下面链接 下载alice.txt文件 直接右键下载即可
Alice in Wonderland File Download
Alice in Wonderland File Upload
得到alice.txt文件后 我们打开浏览器 我们先上传alice.txt文件
此时不要点upload alice.txt 我们打开wireshark 先开始捕获 我们再点击 看到页面出现Congratulations! 即返回wireshark停止捕获
由于一般浏览器都有自己的访问策略 都是每次建立TCP链接 发送两三个一次 所以这里我选择了firefox浏览器 刚开始的三次握手更容易看一点

得到的wireshark截图如下图

1. 将文件传输到 gaia.cs.umass.edu 的客户计算机(源)使用的 IP 地址和 TCP 端口号码是什么? 要回答此问题,选择 HTTP 消息并使用"选定数据包头窗口的详细信息"(如果您不确定 Wireshark 窗口不确定,请参阅"从 Wireshark 开始"实验室中的图 2)来浏览用于携带此 HTTP 消息的 TCP 数据包的详细信息可能最简单。
ip地址 是我校园网ip - - 10.20.72.149 TCP端口号打开即可看到 我这边是6889
2. gaia.cs.umass.edu 的 IP 地址是什么?在此连接中,它会发送和接收哪个端口号码的 TCP 段?
ip地址 128.119.245.12 接收端口号80 首先我们的发送创建请求是发了两条 服务器只回应了其中一个端口 我们发送请求的一个是6889 一个是6890 回应了6889 如下图

3. 客户端计算机(源)用于将文件传输到 gaia.cs.umass.edu 的 IP 地址和 TCP 端口号码是多少?
这个打开直接看即可

4. 用于启动客户端计算机和 gaia.cs.umass.edu 之间的 TCP 连接的 TCP SYN 段的序列号是多少? 将该段标识为 SYN 段的细分市场中有什么?
这里火狐浏览器 刚开始的SYN序列号为0 标识为SYN段是在标识位置了1

5. gaia.cs.umass.edu 发送到客户端计算机以响应 SYN 的 SYNACK 段的序列号是多少? SYNACK 细分市场中的确认字段的价值是何等? gaia.cs.umass.edu 如何确定该值?将该细分市场识别为 SYNACK 细分市场的细分市场中有什么?
响应的序列号为0 ACK为1 ACK为1由于握手的序列号为0 则ACK = 1

6. 包含 HTTP 邮政命令的 TCP 段的序列号是多少? 请注意,要找到 POST 命令,您需要深入到 Wireshark 窗口底部的包内容字段,在其数据字段中查找带有"POST"的段。
含有POST 字段的为最后的一次握手字段 作为客户机最后一次三次握手确认 还包含了要发送的字段 序列号为1 因为是连着上面的序列号0连续发的
7. 将包含 HTTP POST 的 TCP 段视为 TCP 连接中的第一段。TCP 连接中前六个段的序列号(包括包含 HTTP POST 的段)是哪些? 每个段在什么时间发送? 收到每个段的 ACK 是什么时候? 鉴于每个 TCP 段的发送时间与收到确认项之间的区别,六个段中每个段的 RTT 值是怎样的? 收到每个 ACK 后,估计的 TRTT 值(见第 3.5.3 节,文本第 242 页)是什么? 假设估计 RTT值等于第一段的测量 RTT,然后使用第 242 页中所有后续段的估计 RTT方程进行计算。
注意 :Wireshark 具有一个很好的功能,允许您为发送的每个 TCP 段绘制 RTT 图。 在"捕获数据包列表"窗口中选择从客户端发送到 gaia.cs.umass.edu 服务器的 TCP 段。 然后选择: 统计->TCP流图->圆行程时间图。
前面三次为三次握手
C->S seq = 0 len = 0 SYN
S->C seq = 0 len = 0 ack = 1 SYN ACK
C->S seq = 1 len = 1448 ack = 1 ACK 开始发数据了
下面就是流水线了 但抛开流水线 只看两边的交互的话
S->C seq = 1 len = 0 ack = 1449 ACK
C->S seq = 1449 len = 1448 ack = 1 ACK
S->C seq = 1 len = 0 ack = 2897 ACK
从上面的数据可以看出来还是很清晰的
8. 前六个 TCP 段中每个段的长度是怎么回事?
刚开始的前两个段没长度正常 因为是正常的握手 到了第三次 也是最后一次建立连接的握手时 客户机已经确定了服务器可以接收数据了 就直接带着ACK和数据一起去了
之后的回复响应TCP len = 0 因为我们确认是否收到是只看服务器响应的序列号是多少 累计确认之前的那些已经收到了 而我们的len = 1448 是客户机发出去的那么多 也是很正常的
9. 在整个跟踪接收时所宣传的可用缓冲空间的最小数量是多少? 缺少接收器缓冲空间会限制发件人吗?
由于这边wireshark的window数目是自己计算的 所以我们这边没有办法得到还有多大的数目 详情可看下面链接
Wireshark的window size value和calculated window size
从SYN的握手过程中 还是可以看到服务器那边的window 是28960 如果缺少缓冲空间 肯定会限制发件人 因为每次发件都会给发件人回一个还有剩余多少window的提示 发件方也会根据window还有多少来自己决定发送多少
10. 跟踪文件中是否存在任何重送段?为了回答这个问题,你检查了什么(在跟踪中)?
没有看见重送段 检查了挨着送的包的序号 都是只送了一遍 - - 但是服务器方向客户端有的包发了多个确认收到的ACK
11. 接收器通常在 ACK 中确认多少数据? 您能否识别接收方在所有其他接收段中 ACKing 的情况(请参阅文本第 250 页的表 3.2)。
这个问题没有搞懂 - -咋说什么 由于是累积确认 在发送的序号之前都是确认收到的了
12.TCP 连接的吞吐量(每个单位时间传输字节)是什么? 解释您如何计算此值。
单位时间内容纳向外能够发出的字节数
13. 您能否确定 TCP 的慢启动阶段的开始和结束位置,以及避免拥堵的接管位置?
结束位置我还是没看出来 但是对于慢启动我看客户端发送还是能够看出来的
刚开始的滑动窗口仅仅容纳发送10个满载的TCP段出去 当接受了一次ACK后 很明显的后面直接窗口变大 变到几十个 但是还是有上限的 之后的发送每到一个阶段就会等待服务器的ACK后 再发送数据
刚开始仅仅容纳10个

到后面一段时间 明显滑动窗口变长 以至于一个屏幕都截不完

这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at
Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包
目标我正在尝试计算自给定日期以来周的距离,而无需跳过任何步骤。我更喜欢用普通的Ruby来做,但ActiveSupport无疑是一个可以接受的选择。我的代码我写了以下内容,这似乎可行,但对我来说似乎还有很长的路要走。require'date'DAYS_IN_WEEK=7.0defweeks_sincedate_stringdate=Date.parsedate_stringdays=Date.today-dateweeks=days/DAYS_IN_WEEKweeks.round2endweeks_since'2015-06-15'#=>32.57ActiveSupport的#weeks
技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进
如何计算两个字符串之间的字符交集?例如(假设我们有一个名为String.intersection的方法):"abc".intersection("ab")=2"hello".intersection("hallo")=4好的,男孩女孩们,感谢你们的大量反馈。更多示例:"aaa".intersection("a")=1"foo".intersection("bar")=0"abc".intersection("bc")=2"abc".intersection("ac")=2"abba".intersection("aa")=2一些补充说明:维基百科定义intersection如下:Int
给定一个包含各种语言字符的UTF-8文件,我如何计算它包含的唯一字符的数量,同时排除选定数量的符号(例如:“!”、“@”、"#",".")从这个算起? 最佳答案 这是一个bash解决方案。:)bash$perl-CSD-ne'BEGIN{$s{$_}++forsplit//,q(!@#.)}$s{$_}++||$c++forsplit//;END{print"$c\n"}'*.utf8 关于python-如何计算文件中唯一字符的数量?,我们在StackOverflow上找到一个类似的问题