diff --git a/docs/undergraduate/软件工程学院/计算机网络/README.md b/docs/undergraduate/软件工程学院/计算机网络/README.md index 7de6443..e323b49 100644 --- a/docs/undergraduate/软件工程学院/计算机网络/README.md +++ b/docs/undergraduate/软件工程学院/计算机网络/README.md @@ -4,3 +4,17 @@ title: 计算机网络 !!! warning "施工中" + +# 计算机网络 + +## 实验报告 + +- [lab1](./lab/lab1/lab1) +- [lab2 Ethernet](./lab/lab2/lib2) +- [lab3 IPV4](./lab/lab3/lib3) +- [lab4 ARP](./lab/lab4/lib4) +- [lab5 UDP](./lab/lab5/lib5) +- [lab2 TCP](./lab/lab6/lib6) +- [lab2 Socket Programming](./lab/lab7/lib7) + +> 除第一个实验外,其余实验所用到的 `.pcapng` 文件均附在对应文件夹下 diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000032800000154F3640027.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000032800000154F3640027.png new file mode 100644 index 0000000..403bb59 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000032800000154F3640027.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000032900000152B123680E.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000032900000152B123680E.png new file mode 100644 index 0000000..aa7ab10 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000032900000152B123680E.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000003320000015C8A9E98EE.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000003320000015C8A9E98EE.png new file mode 100644 index 0000000..b9bd396 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000003320000015C8A9E98EE.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000033300000151977B0DF0.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000033300000151977B0DF0.png new file mode 100644 index 0000000..70365f3 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000033300000151977B0DF0.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000004000000007864293250.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000004000000007864293250.png new file mode 100644 index 0000000..e6743ea Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000004000000007864293250.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/1000000100000470000000F4B4E41AC7.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/1000000100000470000000F4B4E41AC7.png new file mode 100644 index 0000000..d985765 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/1000000100000470000000F4B4E41AC7.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000004EE0000005E50C8B369.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000004EE0000005E50C8B369.png new file mode 100644 index 0000000..e9b2e07 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/10000001000004EE0000005E50C8B369.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000094B000002EADEAFEA2E.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000094B000002EADEAFEA2E.png new file mode 100644 index 0000000..5ebf16b Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/Pictures/100000010000094B000002EADEAFEA2E.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/lab1.md b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/lab1.md new file mode 100644 index 0000000..fea48f1 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab1/lab1.md @@ -0,0 +1,122 @@ +**华东师范大学软件学院实验报告** + +**一、实验目的** + +1. 学会使用curl与wget指令 + +2. 学会通过Wireshark获取数据包 + +3. 了解协议层数据包的结构 + +4. 学会计算并分析协议开销 + +**二、实验内容与实验步骤** + +1. 在控制台中输入"curl OK" + +2. 启动Wireshark,选择监听以太网,并将捕获过滤器设置为tcp port + > 80,关闭混杂模式,并启用"enable network name resolution"选项 + +3. 关闭所有浏览器窗口后开始捕获 + +4. 重新在控制台输入"curl [**http://1st.moe/**](http://1st.moe/)" + +5. 停止Wireshark捕获 + +**三、实验环境** + +> B226机房电脑 + +**四、实验过程与分析** + +1. 实验过程 + + 1) 捕获内容如图所示 + +> ![](./Pictures/100000010000094B000002EADEAFEA2E.png){width="17.007cm" +> height="5.3cm"} + +2. 1) 分析协议包的内容 + +> ![](./Pictures/10000001000003320000015C8A9E98EE.png){width="8.504cm" +> height="3.6cm"}![](./Pictures/100000010000032800000154F3640027.png){width="8.504cm" +> height="3.579cm"}![](./Pictures/100000010000032900000152B123680E.png){width="8.504cm" +> height="3.556cm"}![](./Pictures/100000010000033300000151977B0DF0.png){width="8.504cm" +> height="3.489cm"} + +> 根据如上四张图片,可以发现各个协议所占的字节数为 + ++---------------------------------------+-------------+ +| > 协议 | > 字节数 | ++---------------------------------------+-------------+ +| > Ethernet (eth) | > 14 bytes | ++---------------------------------------+-------------+ +| > Internet Protocol Version 6 (ipv6) | > 40 bytes | ++---------------------------------------+-------------+ +| > Transmission Control Protocol (tcp) | > 20 bytes | ++---------------------------------------+-------------+ +| > Hypertext Transfer Protocol (http) | > 128 bytes | ++---------------------------------------+-------------+ + +> 则包的结构大致如下 + ++-------------------+--------------------+------------+-------------+ +| > eth | > ip | > tcp | > http | ++-------------------+--------------------+------------+-------------+ +| > 14 bytes | > 40 bytes | > 20 bytes | > 128 bytes | ++-------------------+--------------------+------------+-------------+ +| > Ethernet Header | > Ethernet Payload | | | ++-------------------+--------------------+------------+-------------+ +| > IP Header | > IP Payload | | | ++-------------------+--------------------+------------+-------------+ + +3. 问题 + + 1) 分析协议开销 + +> 一个GET本身的大小为128 +> bytes,而其相应产生的SYN、ACK请求也应算入其开销中。根据图片 + +> ![](./Pictures/10000001000004EE0000005E50C8B369.png){width="17.096cm" +> height="1.281cm"} + +> 可以计算得出由于协议产生的总开销为86+74+(202-128)+74=308 +> bytes,从而计算得出比值约为0.4156,考虑到信息传输的稳定性,协议开销是值得的。 + +4. 1) 以太网头部中哪一部分是解复用键并且告知它的下一个高层指的是IP,在这一包内哪一个值可以表示IP + +> 根据图片 + +> ![](./Pictures/10000001000004000000007864293250.png){width="17.096cm" +> height="2.009cm"} + +> ![](./Pictures/1000000100000470000000F4B4E41AC7.png){width="17.096cm" +> height="3.667cm"} + +> 可以直观看出ipv6对应的分解键为0x86dd,tcp对应的分解键为6 + +5. 故障分析 + +> 在实验过程中出现了控制台有反馈但Wireshark没有捕获的情况,经排查后发现是由于控制台指令输入错误:误将http输入为https所致。 + +**五、实验结果总结** + +1. 实验完成了对一个HTTP包的拆解与分析,其大体结构大致如下 + ++-------------------+--------------------+------------+-------------+ +| > Eth | > ip | > tcp | > http | ++-------------------+--------------------+------------+-------------+ +| > 14 bytes | > 40 bytes | > 20 bytes | > 128 bytes | ++-------------------+--------------------+------------+-------------+ +| > Ethernet Header | > Ethernet Payload | | | ++-------------------+--------------------+------------+-------------+ +| > IP Header | > IP Payload | | | ++-------------------+--------------------+------------+-------------+ + +2. 实验通过curl指令与Wireshark软件完成,在其中熟悉网络工具的使用,并体会到其强大之处 + +3. 通过查询相关资料,了解开销、分解键等概念 + +**六、附录** + +**无** diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lab2-2.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lab2-2.pcapng new file mode 100755 index 0000000..bd54834 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lab2-2.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lab2.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lab2.pcapng new file mode 100755 index 0000000..34abe32 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lab2.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-1.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-1.png new file mode 100755 index 0000000..9e1af72 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-1.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-2.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-2.png new file mode 100755 index 0000000..49711f3 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-2.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-3.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-3.png new file mode 100755 index 0000000..9ea382a Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-3.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-4.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-4.png new file mode 100755 index 0000000..9da7fba Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-4.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-5.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-5.png new file mode 100755 index 0000000..d41c99d Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2-5.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2.html b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2.html new file mode 100755 index 0000000..f75899e --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2.html @@ -0,0 +1,250 @@ + + + + + <center>华东师范大学软件学院实验报告</center> + + + + + + + + + + + + +

华东师范大学软件学院实验报告

+ + + + + + + + + + + + + + + + + + + + +
实验课程: 计算机网络年级: 2024实验成绩:
实验名称: Ethernet姓名: 张春晓实验日期: 2024.11.29
实验编号: 2学号: 10234507025实验时间: 2学时
+
+

一、实验目的

+

学习以太网帧的组成

+

二、使用内容与实验步骤

+
    +
  1. 捕获帧 +
      +
    1. 对一个远程服务器使用 ping 指令发送信息,并检查是否有回复;
    2. +
    3. 启动 Wireshark ,选择过滤 icmp ,开启“启用 MAC 名称解析”选项,开始捕获以太网帧;
    4. +
    5. 重复第一步;
    6. +
    7. 终止 ping 指令,返回 Wireshark 并停止捕获。
    8. +
    +
  2. +
  3. 检查捕获到的数据 +
      +
    1. 选择捕获到的任意数据包,查看其结构与组成数据包字节的详细信息;
    2. +
    3. 展开以太网报头字段并查看详细信息。
    4. +
    +
  4. +
  5. 以太网帧结构 +绘制一个显示以太网头字段位置与大小的 ping 报文图。
  6. +
  7. 以太网地址范围 +绘制一张图,显示电脑、路由器、远程服务器的相对位置。
    +用以太网地址标注计算机与路由器,IP 地址标注计算机与远程服务器。
    +并显示以太网和互联网其他部分在图中的位置。
  8. +
  9. 广播帧 +启动 Wireshark ,选择过滤 ether multicast ,等待一段时间,捕获广播与组播以太网帧,并根据结果完成以下两个任务:
    +
      +
    1. 找到广播以太网地址
    2. +
    3. 找到以太网地址的哪一位确认是单播还是组播
    4. +
    +
  10. +
+

三、实验环境

+ +

四、实验过程与分析

+
    +
  1. 捕获帧
    +ping
    +Wireshark
  2. +
  3. 检查捕获到的数据

    +ping
  4. +
  5. 以太网帧结构
    + + + + + + + + + + + + + + + + + + + +
    Ethernet IIIP&ICMP
    DestinationSourceType60 Bytes
    6 Bytes6 Bytes2 Bytes
    Ethernet HeaderEthernet Payload
    +
  6. +
  7. 以太网地址范围
    +mermaid
  8. +
  9. 广播帧 +捕获内容如图:
    +broadcast
    +
      +
    1. 以太网地址为 ff:ff:ff:ff:ff:ff,在 Wireshark 中标注为 Broadcast
    2. +
    3. 第一个字节的末位为1是组播,反之则是单播,所有比特均为1则是广播
    4. +
    +
  10. +
+

五、试验结果总结

+

在本次实验中,我顺利地完成了各项任务,了解并学习到了以太网传输的各项细节

+ + + + + \ No newline at end of file diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2.md b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2.md new file mode 100755 index 0000000..eddd83a --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab2/lib2.md @@ -0,0 +1,81 @@ +#
华东师范大学软件学院实验报告
+| **实验课程:** 计算机网络 | **年级:** 2024 | **实验成绩:** | +| :------------------------ | :--------------------- | :------------------------ | +| **实验名称:** Ethernet | **姓名:** | **实验日期:** 2024.11.29 | +| **实验编号:** 2 | **学号:** | **实验时间:** 2学时 | + +--- + +## 一、实验目的 + +学习以太网帧的组成 + +## 二、使用内容与实验步骤 + +1. 捕获帧 + 1. 对一个远程服务器使用 ping 指令发送信息,并检查是否有回复; + 2. 启动 Wireshark ,选择过滤 icmp ,开启“启用 MAC 名称解析”选项,开始捕获以太网帧; + 3. 重复第一步; + 4. 终止 ping 指令,返回 Wireshark 并停止捕获。 +2. 检查捕获到的数据 + 1. 选择捕获到的任意数据包,查看其结构与组成数据包字节的详细信息; + 2. 展开以太网报头字段并查看详细信息。 +3. 以太网帧结构 + 绘制一个显示以太网头字段位置与大小的 ping 报文图。 +4. 以太网地址范围 + 绘制一张图,显示电脑、路由器、远程服务器的相对位置。
+ 用以太网地址标注计算机与路由器,IP 地址标注计算机与远程服务器。
+ 并显示以太网和互联网其他部分在图中的位置。 +5. 广播帧 + 启动 Wireshark ,选择过滤 ether multicast ,等待一段时间,捕获广播与组播以太网帧,并根据结果完成以下两个任务:
+ 1. 找到广播以太网地址 + 2. 找到以太网地址的哪一位确认是单播还是组播 + +## 三、实验环境 + +- 实验仪器:ThinkPad X230i +- 操作系统:Arch GNU/Linux x86\_64 +- 以太网控制器:Intel Corporation 82575LM Gigabit Network Connection +- 网络控制器:Realtek Semiconductor Co., Ltd. RTL8188CE 820.11b/g/n WiFi Adapter +- 网络连接:校园网ECNU-1X + +## 四、实验过程与分析 + +1. 捕获帧
+ ![ping](./lib3-1.png)
+ ![Wireshark](./lib3-2.png) +2. 检查捕获到的数据
+ ![ping](./lib3-3.png) +3. 以太网帧结构
+ + + + + + + + + + + + + + + + + + + + +
Ethernet IIIP&ICMP
DestinationSourceType60 Bytes
6 Bytes6 Bytes2 Bytes
Ethernet HeaderEthernet Payload
+4. 以太网地址范围
+ ![mermaid](./lib2-5.png) +5. 广播帧 + 捕获内容如图:
+ ![broadcast](./lib3-4.png)
+ 1. 以太网地址为 ff:ff:ff:ff:ff:ff,在 Wireshark 中标注为 Broadcast + 2. 第一个字节的末位为1是组播,反之则是单播,所有比特均为1则是广播 + +## 五、试验结果总结 + +在本次实验中,我顺利地完成了各项任务,了解并学习到了以太网传输的各项细节 diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-1.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-1.png new file mode 100755 index 0000000..790068a Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-1.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-2.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-2.png new file mode 100755 index 0000000..4ecd671 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-2.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-3.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-3.png new file mode 100755 index 0000000..f40c57b Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-3.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-calcuate.cpp b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-calcuate.cpp new file mode 100755 index 0000000..4e3ced2 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-calcuate.cpp @@ -0,0 +1,9 @@ +#include + +using namespace std; + +int main() +{ + printf("%x",0x4500+0x0034+0xd124+0x4000+0x2606+0xe0f4+0x344a+0xe83b+0xda06+0xac1e); + return 0; +} \ No newline at end of file diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-path.txt b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-path.txt new file mode 100755 index 0000000..eaa9789 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3-path.txt @@ -0,0 +1,31 @@ +traceroute to 1st.moe (52.74.232.59), 30 hops max, 60 byte packets + 1 * * * + 2 10.100.5.1 (10.100.5.1) 8.795 ms 8.962 ms 9.096 ms + 3 202.120.95.246 (202.120.95.246) 9.451 ms 9.092 ms 9.243 ms + 4 202.120.95.254 (202.120.95.254) 12.480 ms 12.777 ms 13.331 ms + 5 10.255.16.1 (10.255.16.1) 12.974 ms 13.249 ms 12.734 ms + 6 10.255.249.253 (10.255.249.253) 12.382 ms 11.127 ms 11.127 ms + 7 10.255.38.254 (10.255.38.254) 10.087 ms 9.632 ms 9.452 ms + 8 202.112.27.13 (202.112.27.13) 9.268 ms 6.546 ms 6.331 ms + 9 101.4.117.58 (101.4.117.58) 6.248 ms 9.316 ms 9.147 ms +10 * * * +11 101.4.115.250 (101.4.115.250) 37.316 ms 37.288 ms 36.908 ms +12 * * * +13 * * 101.4.114.194 (101.4.114.194) 33.724 ms +14 101.4.114.170 (101.4.114.170) 38.219 ms 101.4.117.102 (101.4.117.102) 44.767 ms 44.589 ms +15 101.4.114.222 (101.4.114.222) 67.753 ms 67.658 ms 63.246 ms +16 203.131.254.213 (203.131.254.213) 85.750 ms 85.593 ms 85.431 ms +17 203.131.242.222 (203.131.242.222) 67.546 ms 67.933 ms 67.157 ms +18 52.93.157.242 (52.93.157.242) 67.671 ms 52.93.157.226 (52.93.157.226) 67.991 ms 68.002 ms +19 52.93.35.125 (52.93.35.125) 67.392 ms 52.93.35.109 (52.93.35.109) 68.086 ms 52.93.35.35 (52.93.35.35) 68.009 ms +20 * * * +21 * * * +22 * * * +23 * * * +24 * * * +25 * * * +26 * * * +27 * * * +28 * * * +29 * * * +30 * * * diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3.md b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3.md new file mode 100755 index 0000000..5a7f593 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3.md @@ -0,0 +1,153 @@ + +#
华东师范大学软件学院实验报告
+| **实验课程:** 计算机网络 | **年级:** 2024 | **实验成绩:** | +| :------------------------ | :--------------------- | :------------------------ | +| **实验名称:** IPV4 | **姓名:** | **实验日期:** 2024.12.08 | +| **实验编号:** 3 | **学号:** | **实验时间:** 2学时 | + +## 一、实验目的 + +学习 IP 协议的相关内容 + +## 二、使用内容与实验步骤 + +1. 捕获轨迹 + 1. 对一个远程服务器使用 wget/curl 指令,并检查是否成功; + 2. 对同一远程服务器使用 traceroute 指令,查看访问的路径; + 3. 启动 Wireshark ,选择过滤 tcp port 80 ,并勾选“启用网络名称检查” + 4. 重复第一步 + 5. 返回 Wireshark ,停止捕获。 +2. 检查捕获到的数据 + 1. 选择任意捕获到的数据包,查看其结构与组成数据包字节的详细信息; + 2. 展开 IP 报头字段并查看详细信息。 +3. IP 结构 + 1. 绘制一个 IP 字段位置与大小的报文图 + 2. 回答下列问题 + 1. 电脑与远程服务端的 IP 地址分别是多少? + 2. 总长字段包括 IP 报头与 IP 负载还是仅计算 IP 负载? + 3. 对于不同数据包,标识字段的值是不同还是相同? + 4. 电脑发送的数据包的 TTL 字段的初始值是什么?是最大可能值还是一个较小的值? + 5. 如何通过查看数据包确认其是否被分段? + 6. IP 报头长度是多少,它如何在报头字段中编码? +4. IP 路径 + 绘制 1.2 步骤中访问的路径 +5. IP 报头校验 + 通过如下步骤检验 IP 报头校验和是否正确 + 1. 将报头划分为等长的 10 段,每段长度为 2 个字节,将其视为 10 个十六进制数字; + 2. 将 10 个 16 进制数字相加,计算他们的和; + 3. 将得到的和分为两段,使得其中的一段为最右边的 4 位 16 进制数,计算两段之和; + 4. 检查结果是否为 0xffff 。 + + +## 三、实验环境 + +- 实验仪器:ThinkPad X230i +- 操作系统:Arch GNU/Linux x86\_64 +- 以太网控制器:Intel Corporation 82575LM Gigabit Network Connection +- 网络控制器:Realtek Semiconductor Co., Ltd. RTL8188CE 820.11b/g/n WiFi Adapter +- 网络连接:校园网ECNU-1X + +## 四、实验过程与分析 + +1. 捕获轨迹 + ![wget](./lib3/lib3-2.png) + traceroute 获取到的信息如下: + ``` + traceroute to 1st.moe (52.74.232.59), 30 hops max, 60 byte packets + 1 * * * + 2 10.100.5.1 (10.100.5.1) 8.795 ms 8.962 ms 9.096 ms + 3 202.120.95.246 (202.120.95.246) 9.451 ms 9.092 ms 9.243 ms + 4 202.120.95.254 (202.120.95.254) 12.480 ms 12.777 ms 13.331 ms + 5 10.255.16.1 (10.255.16.1) 12.974 ms 13.249 ms 12.734 ms + 6 10.255.249.253 (10.255.249.253) 12.382 ms 11.127 ms 11.127 ms + 7 10.255.38.254 (10.255.38.254) 10.087 ms 9.632 ms 9.452 ms + 8 202.112.27.13 (202.112.27.13) 9.268 ms 6.546 ms 6.331 ms + 9 101.4.117.58 (101.4.117.58) 6.248 ms 9.316 ms 9.147 ms + 10 * * * + 11 101.4.115.250 (101.4.115.250) 37.316 ms 37.288 ms 36.908 ms + 12 * * * + 13 * * 101.4.114.194 (101.4.114.194) 33.724 ms + 14 101.4.114.170 (101.4.114.170) 38.219 ms 101.4.117.102 (101.4.117.102) 44.767 ms 44.589 ms + 15 101.4.114.222 (101.4.114.222) 67.753 ms 67.658 ms 63.246 ms + 16 203.131.254.213 (203.131.254.213) 85.750 ms 85.593 ms 85.431 ms + 17 203.131.242.222 (203.131.242.222) 67.546 ms 67.933 ms 67.157 ms + 18 52.93.157.242 (52.93.157.242) 67.671 ms 52.93.157.226 (52.93.157.226) 67.991 ms 68.002 ms + 19 52.93.35.125 (52.93.35.125) 67.392 ms 52.93.35.109 (52.93.35.109) 68.086 ms 52.93.35.35 (52.93.35.35) 68.009 ms + 20 * * * + 21 * * * + 22 * * * + 23 * * * + 24 * * * + 25 * * * + 26 * * * + 27 * * * + 28 * * * + 29 * * * + 30 * * * + ``` +2. + ![wget](./lib3/lib3-2.png) +3. + 1. IP结构 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPTCP
VersionHeader LengthDifferentiated + Services FieldTotal LengthIdentificationFlagsFragment OffsetTTLProtocalHeader ChecksumSource AddressDestinatoin Address32 Bytes
4 bits4 bits1 Byte2 Bytes2 Bytes3 bits13 Bits1 Byte1 Byte2 Bytes4 Bytes4 Bytes
Ethernet HeaderEthernet Payload
+ 2. + 1. 服务端 IP 地址为 52.74.232.59;电脑 IP 地址为 172.30.218.6 + 2. 总长字段为 52 = 20 + 32 ,所以计算时包含 IP 报头与 IP 负载 + 3. 不同 + 4. 电脑发送的 TTL 值为 38 ,是一个较小的值 + 5. 通过查看 Flags 字段 + 6. 长度为 20 Bytes ,编码在 IP 报头第一个字节的 4~8 位 +4. + ![wget](./lib3/lib3-3.png) +5. 执行如下代码: + ``` + #include + + using namespace std; + + int main() + { + printf("%x",0x4500+0x0034+0xd124+0x4000+0x2606+0xe0f4+0x344a+0xe83b+0xda06+0xac1e); + return 0; + } + ``` + 其结果为0x4fffb,计算4+fffb=ffff,故正确。 diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3.pcapng new file mode 100755 index 0000000..1b0978d Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab3/lib3.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arp.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arp.pcapng new file mode 100755 index 0000000..bdee7e7 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arp.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arpa.txt b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arpa.txt new file mode 100755 index 0000000..ff3d3df --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arpa.txt @@ -0,0 +1 @@ +_gateway (172.31.0.1) at 54:c6:ff:7b:38:02 [ether] on wlan0 diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arpd b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arpd new file mode 100755 index 0000000..1366416 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/arpd @@ -0,0 +1 @@ +No ARP entry for 172.31.0.1 diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/ifconfig.txt b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/ifconfig.txt new file mode 100755 index 0000000..fb25400 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/ifconfig.txt @@ -0,0 +1,26 @@ +enp0s25: flags=4099 mtu 1500 + ether 3c:97:0e:27:a3:96 txqueuelen 1000 (Ethernet) + RX packets 0 bytes 0 (0.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + device interrupt 20 memory 0xf2500000-f2520000 + +lo: flags=73 mtu 65536 + inet 127.0.0.1 netmask 255.0.0.0 + inet6 ::1 prefixlen 128 scopeid 0x10 + loop txqueuelen 1000 (Local Loopback) + RX packets 1511 bytes 158325 (154.6 KiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 1511 bytes 158325 (154.6 KiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + +wlan0: flags=4163 mtu 1500 + inet 172.31.215.159 netmask 255.255.0.0 broadcast 172.31.255.255 + inet6 fe80::eb67:d196:62b:626a prefixlen 64 scopeid 0x20 + ether e0:06:e6:c4:be:04 txqueuelen 1000 (Ethernet) + RX packets 4206 bytes 2310892 (2.2 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 4771 bytes 2531632 (2.4 MiB) + TX errors 0 dropped 76 overruns 0 carrier 0 collisions 0 + diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-1.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-1.png new file mode 100755 index 0000000..8c1fd59 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-1.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-2.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-2.png new file mode 100755 index 0000000..5503ad4 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-2.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-3.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-3.png new file mode 100755 index 0000000..05fb7cf Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4-3.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4.md b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4.md new file mode 100755 index 0000000..6542d3f --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/lib4.md @@ -0,0 +1,105 @@ +#
华东师范大学软件学院实验报告
+| **实验课程:** 计算机网络 | **年级:** 2024 | **实验成绩:** | +| :------------------------ | :--------------------- | :------------------------ | +| **实验名称:** ARP | **姓名:** | **实验日期:** 2024.12.13 | +| **实验编号:** 4 | **学号:** | **实验时间:** 2学时 | + +## 一、实验目的 + +了解 ARP 的工作原理。 + +## 二、使用内容与实验步骤 + +1. 捕获 + 1. 使用`ifconfig`指令查找电脑的以太网地址。 + 2. 使用`route`指令查看默认网关 ip 地址。 + 3. 启动 Wireshark ,将过滤器设置为`arp`,开始捕获。 + 4. 使用`arp -a`指令查看 ARP 缓存,并使用`sudo arp -d 网关ip地址`从缓存中清除默认网关。 + 5. 使用浏览器浏览网页一段时间。 + 6. 在捕获到 arp 流量后停止捕获。 +2. 检查捕获 + 1. 将页面内的过滤器设置为`eth.addr == 电脑以太网地址`。 + 2. 查看捕获到的内容 +3. ARP 请求与应答 + 绘制计算机与默认网关之间发送 ARP 请求与回复数据包的图解。 +4. 以太网上的 ARP 详细信息 + 回答以下问题 + 1. 什么操作码用于请求,什么操作码用于回复。 + 2. 请求的 ARP 报头有多大?回复的 ARP 报头有多大? + 3. 对于未知目标 MAC 地址的请求中携带什么值? + 4. 什么以太网类型值表明 ARP 是更高级协议? + 5. ARP 回复是否为广播? + +## 三、实验环境 + +- 实验仪器:ThinkPad X230i +- 操作系统:Arch GNU/Linux x86\_64 +- 以太网控制器:Intel Corporation 82575LM Gigabit Network Connection +- 网络控制器:Realtek Semiconductor Co., Ltd. RTL8188CE 820.11b/g/n WiFi Adapter +- 网络连接:校园网ECNU-1X + +## 四、实验过程与分析 + +1. 捕获 + 1. 执行`ifconfig`指令,得到的输出如下: + ``` + enp0s25: flags=4099 mtu 1500 + ether 3c:97:0e:27:a3:96 txqueuelen 1000 (Ethernet) + RX packets 0 bytes 0 (0.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + device interrupt 20 memory 0xf2500000-f2520000 + + lo: flags=73 mtu 65536 + inet 127.0.0.1 netmask 255.0.0.0 + inet6 ::1 prefixlen 128 scopeid 0x10 + loop txqueuelen 1000 (Local Loopback) + RX packets 1511 bytes 158325 (154.6 KiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 1511 bytes 158325 (154.6 KiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + + wlan0: flags=4163 mtu 1500 + inet 172.31.215.159 netmask 255.255.0.0 broadcast 172.31.255.255 + inet6 fe80::eb67:d196:62b:626a prefixlen 64 scopeid 0x20 + ether e0:06:e6:c4:be:04 txqueuelen 1000 (Ethernet) + RX packets 4206 bytes 2310892 (2.2 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 4771 bytes 2531632 (2.4 MiB) + TX errors 0 dropped 76 overruns 0 carrier 0 collisions 0 + ``` + 在 `wlan0` 下的 `ether` 一行可以得知计算机以太网地址为 `e0:06:e6:c4:be:04` 。 + 2. 执行 `route` 指令,得到的输出如下: + ``` + Kernel IP routing table + Destination Gateway Genmask Flags Metric Ref Use Iface + default _gateway 0.0.0.0 UG 600 0 0 wlan0 + 172.31.0.0 0.0.0.0 255.255.0.0 U 600 0 0 wlan0 + ``` + 可以得知默认网关的 ip 地址为 `172.31.0.0` 。 + 3. 启动捕获。 + 4. 执行 `arp -a` 指令,得到输出 `_gateway (172.31.0.1) at 54:c6:ff:7b:38:02 [ether] on wlan0` 。随后执行 `sudo arp -d 172.31.0.1` 指令清除缓存,该指令没有输出,若重复执行,则会得到 `No ARP entry for 172.31.0.1` 输出。 + 5. 在观察到已经捕获 7 个 ARP 流量包后停止捕获,其界面如图:
+ ![arp](./lib4-1.png) +2. 检查捕获
+ *因为捕获到的包数量较少,故不设置过滤器。*
+ 请求包:
+ ![request](./lib4-2.png) + 回复包:
+ ![reply](./lib4-3.png) +3. ARP 请求与回复 + 其图例如下 + ```mermaid + flowchart LR + computer[计算机
MAC e0:06:e6:c4:be:04
IP 172.31.215.159] + gateway[网关
MAC 54:c6:ff:7b:38:02
IP 172.31.0.1] + computer--request
Who has 172.31.0.1? Tell 172.31.215.159-->gateway + gateway--reply
172.31.0.1 is at 54:c6:ff:7b:38:02-->computer + ``` +4. 以太网上的 ARP 详细信息 + 1. 请求的操作码为 `0x0001` ,回复的操作码为 `0x0002` 。 + 2. 请求与回复的的 ARP 报头均为 28 bytes,对于报文,请求的报文为 42 bytes,回复的报文为60 bytes。 + 3. 目标 MAC 地址为 `00:00:00_00:00:00` 。 + 4. 以太网报头中的 `type` 字段为 `0x0806` 。 + 5. ARP 回复为单播而非广播。 diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/route.txt b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/route.txt new file mode 100755 index 0000000..c6b155a --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab4/route.txt @@ -0,0 +1,4 @@ +Kernel IP routing table +Destination Gateway Genmask Flags Metric Ref Use Iface +default _gateway 0.0.0.0 UG 600 0 0 wlan0 +172.31.0.0 0.0.0.0 255.255.0.0 U 600 0 0 wlan0 diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-1.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-1.png new file mode 100755 index 0000000..8bbcaf1 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-1.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-2.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-2.png new file mode 100755 index 0000000..e5980ca Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-2.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-3.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-3.png new file mode 100755 index 0000000..ba66e09 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-3.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-4.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-4.png new file mode 100755 index 0000000..87a5a65 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5-4.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5.md b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5.md new file mode 100755 index 0000000..a7d959e --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab5/lib5.md @@ -0,0 +1,81 @@ +#
华东师范大学软件学院实验报告
+| **实验课程:** 计算机网络 | **年级:** 2024 | **实验成绩:** | +| :------------------------ | :--------------------- | :------------------------ | +| **实验名称:** UDP | **姓名:** | **实验日期:** 2024.12.20 | +| **实验编号:** 5 | **学号:** | **实验时间:** 2学时 | + +## 一、实验目的 + +学习 UDP 的构成等详细信息。 + +## 二、使用内容与实验步骤 + +1. 捕获 + 1. 启动 Wireshark ,关闭混杂,将过滤器设置为“udp”,开始捕获。 + 2. 浏览网页以产生 UDP 流量。 + 3. 停止浏览,等待一分钟左右观察背景 UDP 流量。 + 4. 停止捕获。 +2. 检查捕获到的数据
+ 观察所捕获到的流量包,UDP 协议包包括如下字段:源端口、目标端口、长度、校验和。
+ **注意:协议列所列出的协议可能是 UDP 之上的应用程序协议名称而非 UDP** +3. UDP 消息结构
+ 制作一份 UDP 报文图例并回答如下问题:
+ 1. 长度字段包含什么? + 1. UDP 有效负载 + 2. UDP 有效负载与 UDP 报头 + 3. UDP 有效负载、UDP 报头与底层报头 + 2. UDP 校验和的长度为多少?(以位为单位) + 3. UDP 报头的长度为多少字节? +4. UDP 使用
+ 回答如下问题:
+ 1. 给出标识上层协议为 UDP 的 IP 协议字段的值 + 2. 检查 UDP 消息并提供**当电脑既不是源IP地址也不是目标IP地址时**使用的目标 IP 地址 + 3. 捕获到的 UDP 消息的典型大小为多少 + +## 三、实验环境 + +- 实验仪器:ThinkPad X230i +- 操作系统:Arch GNU/Linux x86\_64 +- 以太网控制器:Intel Corporation 82575LM Gigabit Network Connection +- 网络控制器:Realtek Semiconductor Co., Ltd. RTL8188CE 820.11b/g/n WiFi Adapter +- 网络连接:校园网ECNU-1X + +## 四、实验过程与分析 + +1. 捕获 + 本步骤采用老师所提供的捕获文件 +2. 检查捕获到的数据 + 捕获包如图所示
+ ![package](./lib5-1.png) +3. UDP 消息结构
+ 观察下图所列出的包
+ ![struct](./lib5-2.png) + 1. UDP 报头为 8 bytes,负载为 143 bytes,二者之和恰为 UDP 长度字段所标注的 151 bytes,故 UDP 长度字段包括 **UDP 有效负载与 UDP 报头**。 + 2. UDP 校验和的长度为 2 bytes,即 16 位。 + 3. UDP 报头的长度为 8 bytes。 + UDP 报文结构如下表所示:
+ + + + + + + + + + + + + + + + + + +
UDP HeaderUDP Payload
Source Port Destination PortLengthChecksum many bytes
2 bytes2 bytes2 bytes2 bytes
+4. UDP 使用 + 1. 如图所示,IP 协议字段的值为 0x11 ,即 17
+ ![IP](lib5-3.png) + 2. 如图所示,目标 IP 地址为 239.255.255.250
+ ![des](lib5-4.png) + 3. 捕获到的 UDP 消息大小大多在 100 bytes 与 300 bytes 之间。 diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-1.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-1.png new file mode 100755 index 0000000..57642b4 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-1.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-2.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-2.pcapng new file mode 100755 index 0000000..c7c87c6 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-2.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-2.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-2.png new file mode 100755 index 0000000..5c90da1 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-2.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-3.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-3.png new file mode 100755 index 0000000..765d119 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-3.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-4.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-4.png new file mode 100755 index 0000000..71c0ee7 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-4.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-5.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-5.png new file mode 100755 index 0000000..a399e99 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-5.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-6.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-6.png new file mode 100755 index 0000000..15ba767 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6-6.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6.md b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6.md new file mode 100755 index 0000000..59151af --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6.md @@ -0,0 +1,234 @@ +#
华东师范大学软件学院实验报告
+| **实验课程:** 计算机网络 | **年级:** 2024 | **实验成绩:** | +| :------------------------ | :--------------------- | :------------------------------------------ | +| **实验名称:** TCP | **姓名:** | **实验日期:**
2024.12.27
2025.01.03 | +| **实验编号:** 6 | **学号:** | **实验时间:** 2学时 | + +## 一、实验目的 + +学习了解 TCP 的相关内容。 + +## 二、使用内容与实验步骤 + +1. 捕获 + + 1. 找到一个可以使用 HTTP 下载的中等大小单一资源。 + + 2. 使用 wget 或 curl 命令尝试下载,确保可以在几秒内下载至少 500 KB 的内容。 + + 3. 启用 Wireshark ,将过滤器设置为 "tcp and host $DOMAIN" ,其中 $DOMAIN 为远程服务器的域名,并开始捕获。 + + 4. 重复 1.2 中的命令。 + + 5. 返回 Wireshark 并停止捕获。 + +2. 检查捕获到的内容 + + 选择一个协议列为 TCP 的数据包,展开 TCP 协议部分。捕获到的内容中协议列除了初始 HTTP GET 和末尾的 HTTP 相应包之外均为 TCP 。在一个 TCP 包中,大致可以看到如下内容: + + 1. 源端口(可能为 80)与目标端口。 + + 2. 序列号字段,告知第一个有效负载字节在字节流中的位置。 + + 3. 确认字段,告知反向字节流中最后接收的位置。 + + 4. 报头长度,TCP 报头的长度。 + + 5. 标志字段。 + + 6. 校验和,用于检查传输错误。 + + 7. 选项字段。(可能不存在) + + 8. TCP 有效负载,表示正在传输的内容.(可能不存在) + +3. TCP 段结构 + + 绘制一个 TCP 段结构图。 + +4. TCP 建立与拆除。 + + - 三次握手 + + 查找带有 SYN 标志的 TCP 段以及其后的数据包的详细信息。绘制三次握手的时间序列图,序列图应包括如下内容: + + - 每个段上的序列号与 ACK 号(如果存在) + + - 以毫秒为单位的时间 + + - 到服务器的往返时间估计,即 SYN 和 SYN-ACK 段之间的差值 + + - 连接选项 + + SYN 数据包中携带了哪些 TCP 选项。 + + - FIN/RST 拆除 + + 查找带有 FIN 或 RES 标志的 TCP 段及其之后的数据包的详细信息。并绘制时间序列图,要求同三次握手的时间序列图。 + +5. TCP 数据传输 + + 在统计菜单下,选择“IO图表”,观察并回答以下问题: + + 1. TCP 连接运行良好后,下载方向的大致数据速率是多少(分别计算 packets/s 与 bits/s) + + 2. 查看下载数据包,通过观察包的大小与 TCP 有效负载的大小,计算下载率中有多少百分比是内容? + + 3. 传输方向的大致数据速率是多少? + + 4. 如果最近从服务器接收的 TCP 段的序列号为 x ,那么下一个传输的 TCP 段携带什么 ACK 号? + + 检查捕获到的下载数据包是否具有如下特征: + + - 延迟 ACK。 + + - 接受到的段的序列号增加,后续传输的段的 ACK 号也相应增加。 + + - 在初始获取之后,传输的段的序列号不增加,接收段上的 ACK 编号也不增加。 + + - 每个段都带有大于等于 0 的窗口信息。 + +## 三、实验环境 + +- 实验仪器:ThinkPad X230i +- 操作系统:Arch GNU/Linux x86\_64 +- 以太网控制器:Intel Corporation 82575LM Gigabit Network Connection +- 网络控制器:Realtek Semiconductor Co., Ltd. RTL8188CE 820.11b/g/n WiFi Adapter +- 网络连接:校园网 ECNU-1X + +## 四、实验过程与分析 + +1. 捕获 + +2. 检查捕获到的内容 + + 捕获到的内容如图所示: + + ![wireshark](lib6-1.png) + +3. TCP 段结构 + + + + + + + + + + + + +
TCP 报头TCP 负载
源端口 + 目标端口 + 序列号 + 确认号 + 报头长度 + Flags + 窗口 + 校验和 + 紧急指针 + Options + TCP Payloads
2 bytes + 2 bytes + 4 bytes + 4 bytes + 4 bits + 12 bits + 2 bytes + 2 bytes + 2 bytes + 12 bytes + Many bytes
+ +4. TCP 建立与拆除。 + + - 三次握手 + + SYN及其之后包的信息如图所示: + + ![SYN-ACK](lib6-3.png) + + 根据所得到的信息画图: + + ```mermaid + sequenceDiagram + autonumber + participant Client + participant Server + Client->>Server: 0th ms, SYN, 序列号: 0 + Note left of Client: Δ = 96ms + Server->>Client: 96th ms, SYN-ACK, 序列号: 0, ACK号: 1 + Client->>Server: 96th ms, ACK, 序列号: 1, ACK号: 1 + ``` + + - 连接选项 + + SYN 包具体信息如图所示: + + ![SYN](lib6-2.png) + + 故可以观察到 SYN 包携带的选项有: + + - Maximum segment size(最大段大小) + - SACK permitted(SACK 许可) + - Timestamps(时间戳) + - NOP(无操作) + - Window sacle(窗口比例) + + - FIN/RST 拆除 + + FIN及其之后包的信息如图所示: + + ![FIN](lib6-4.png) + + 根据所得到的信息画图: + + ```mermaid + sequenceDiagram + autonumber + participant Client + participant Server + Client->>Server: 844th ms, FIN-ACK, 序列号: 237, ACK号: 256850 + Note left of Client: Δ = 45ms + Server->>Client: 889th ms, FIN-ACK, 序列号: 256850, ACK号: 238 + Client->>Server: 889th ms, ACK, 序列号: 238, ACK号: 256851 + ``` + +5. TCP 数据传输 + + IO 图表如图: + + ![IO](lib6-5.png) + + ![IO](lib6-6.png) + + 1. 下载方向的大致数据速率是 + + $$ + \frac{\frac{1}{8}(18+35+13+8+46+23+28+21) packets}{0.1 s} = 240\ packets/s + $$ + + $$ + \frac{\frac{1}{8}(185300+401500+149100+91780+527700+263900+321200+226600) bits}{0.1 s} =2708850\ bits/s + $$ + + 2. 查看下载数据包,通过观察包的大小与 TCP 有效负载的大小,计算下载率中有多少百分比是内容? + + $$ + \frac{1368 bytes}{1434 bytes}=\frac{228}{239} \approx 95.40\% + $$ + + 3. 传输方向的大致数据速率是 + + $$ + \frac{\frac{1}{8}(16+29+13+8+32+10+23+22) packets}{0.1 s} = 191.25\ packets/s + $$ + + $$ + \frac{\frac{1}{8}(8448+15310+6864+4224+16990+5280+12140+11620) bits}{0.1 s} =101095\ bits/s + $$ + + 4. 如果最近从服务器接收的 TCP 段的序列号为 x ,那么下一个传输的 TCP 段携带什么 ACK 号? + + **x+TCP 负载字节数** diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6.pcapng new file mode 100755 index 0000000..97a5713 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab6/lib6.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/F.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/F.png new file mode 100755 index 0000000..28eabb4 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/F.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client new file mode 100755 index 0000000..4ed3417 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client.c b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client.c new file mode 100755 index 0000000..ecb4be9 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client.c @@ -0,0 +1,69 @@ +/* Source: Peterson & Davie (2007), Computer Networks, a Systems Approach, + * 4th ed., Morgan Kaufmann, p. 34-35. + * Included stdlib.h, string.h, and strings.h so it compiles on Linux. + * Changed port from 5432 (postgresql) to 7701 (unassigned). + * - JLND Feb 7 2009 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define SERVER_PORT 7701 +#define MAX_LINE 256 + +int +main(int argc, char * argv[]) +{ + FILE *fp; + struct hostent *hp; + struct sockaddr_in sin; + char *host; + char buf[MAX_LINE]; + int s; + int len; + + if (argc==2) { + host = argv[1]; + } + else { + fprintf(stderr, "usage: simplex-talk host\n"); + exit(1); + } + + /* translate host name into peer’s IP address */ + hp = gethostbyname(host); + if (!hp) { + fprintf(stderr, "simplex-talk: unknown host: %s\n", host); + exit(1); + } + + /* build address data structure */ + bzero((char *)&sin, sizeof(sin)); + sin.sin_family = AF_INET; + bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length); + sin.sin_port = htons(SERVER_PORT); + + /* active open */ + if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) { + perror("simplex-talk: socket"); + exit(1); + } + if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) { + perror("simplex-talk: connect"); + close(s); + exit(1); + } + + /* main loop: get and send lines of text */ + while (fgets(buf, sizeof(buf), stdin)) { + buf[MAX_LINE-1] = '\0'; + len = strlen(buf) + 1; + send(s, buf, len, 0); + } +} \ No newline at end of file diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client0.txt b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client0.txt new file mode 100755 index 0000000..8dadb9e --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client0.txt @@ -0,0 +1,20 @@ +❯ ./client localhost +text0:hello, world +text1: !"#$%&'()*+,-./0123456789:;<=>?`ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_@abcdefghijklmnopqrstuvwxyz{|}~ +text2:\t \t +text3:你好,世界 +text4:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef +client0 stop +^C +❯ ./client localhost +client0 restart +server stop +a text from client +server restart +❯ ./client localhost +simplex-talk: connect: Connection refused +❯ ./client localhost +client0 +text from client0 +client0 stop +^C diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client1.txt b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client1.txt new file mode 100755 index 0000000..adb996c --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/client1.txt @@ -0,0 +1,7 @@ +❯ ./client localhost +client1 +text from client1 +client1 stop +^C +./client +usage: simplex-talk host diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-1.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-1.png new file mode 100755 index 0000000..2b62c47 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-1.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-10.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-10.png new file mode 100755 index 0000000..3d65107 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-10.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-11.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-11.png new file mode 100755 index 0000000..2e6f3e1 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-11.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-12.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-12.png new file mode 100755 index 0000000..5d14f26 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-12.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-13.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-13.png new file mode 100755 index 0000000..d0ad1bc Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-13.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-14.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-14.png new file mode 100755 index 0000000..5b18b4d Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-14.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-15.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-15.png new file mode 100755 index 0000000..f56dc26 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-15.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-17.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-17.png new file mode 100755 index 0000000..0976db7 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-17.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-18.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-18.png new file mode 100755 index 0000000..21a70a0 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-18.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-2.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-2.pcapng new file mode 100755 index 0000000..ab80e25 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-2.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-2.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-2.png new file mode 100755 index 0000000..1c8c5a5 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-2.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-3.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-3.pcapng new file mode 100755 index 0000000..a503232 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-3.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-3.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-3.png new file mode 100755 index 0000000..1a18b66 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-3.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-4.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-4.png new file mode 100755 index 0000000..6c26260 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-4.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-5.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-5.png new file mode 100755 index 0000000..a1f230f Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-5.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-7.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-7.png new file mode 100755 index 0000000..d239baf Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-7.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-8.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-8.png new file mode 100755 index 0000000..12635b1 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-8.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-9.png b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-9.png new file mode 100755 index 0000000..4524aaa Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7-9.png differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7.md b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7.md new file mode 100755 index 0000000..1778425 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7.md @@ -0,0 +1,288 @@ +#
华东师范大学软件学院实验报告
+| **实验课程:** 计算机网络 | **年级:** 2024 | **实验成绩:** | +| :-------------------------------- | :--------------------- | :------------------------ | +| **实验名称:** Socket Programming | **姓名:** | **实验日期:** 2025.01.03 | +| **实验编号:** 7 | **学号:** | **实验时间:** 2学时 | + +## 一、实验目的 + +了解套接字编程相关内容。 + +## 二、使用内容与实验步骤 + +使用实验手册中所给出的示例代码,并进行相关测试。 + +## 三、实验环境 + +- 实验仪器1:ThinkPad X230i + - 操作系统:6.12.9-arch1-1 x86_64 GNU/Linux + - 以太网控制器:Intel Corporation 82575LM Gigabit Network Connection + - 网络控制器:Realtek Semiconductor Co., Ltd. RTL8188CE 820.11b/g/n WiFi Adapter + +- 实验仪器2:raspberrypi 4B + - 操作系统:6.6.47+rpt-rpi-v8 aarch64 GNU/Linux + +- 网络连接:宿舍 Wifi + +## 四、实验过程与分析 + +本地测试记录如下图: + +![test0](./lib7-1.png) + +实验步骤 + +1. 启动 Wireshark,根据代码中常量定义,将过滤选项设置为`tcp.port==7701`,对 `Loopback: lo` 进行捕获 + +2. 启动服务端 + +3. 启动0号客户端,此时 Wireshark 捕获到三次握手包,观察到0号客户端采用44514端口: + +![png1](./lib7-2.png) + +4. 发送文本测试 + + 1. 0号客户端发送测试文本0(测试短文本):`text0:hello, world`,服务端显示:`text0:hello, world`,正常发送,Wireshark 捕获到的包信息如下。 + + ![png3](./lib7-3.png) + + 2. 0号客户端发送测试文本1(测试ACSII可显示字符):text1: !"#\$%&'()\*+,-./0123456789:;<=>?\`ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^\_@abcdefghijklmnopqrstuvwxyz{|}~,服务端显示:text1: !"#\$%&'()\*+,-./0123456789:;<=>?\`ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^\_@abcdefghijklmnopqrstuvwxyz{|}~,正常发送,Wireshark 捕获到的包信息如下。 + + ![png4](./lib7-4.png) + + 3. 0号客户端发送测试文本2(测试tab字符):`text2:\t \t`,服务端显示:`text2:\t \t`,正常发送,Wireshark 捕获到的包信息如下。 + + ![png5](./lib7-5.png) + + 可以观察到 tab 以正常形式(ACSII码为9)发出 + + 4. 0号客户端发送测试文本3(测试中文文本):`text3:你好,世界`,服务端显示:`text3:你好,世界`,正常发送,Wireshark 捕获到的包信息如下。 + + ![png7](./lib7-7.png) + + 5. 0号客户端发送测试文本4(测试长文本):`text4:0123456789abcdef...0123456789abcdef`(共计32774字节),服务端显示:`text4:0123456789abcdef...012345678`(共计4096字节),文本发送不正常,仅发送前 4096 字节,检查 Wireshark ,可以发现0号客户端共发送16个包,前15个包中每个包携带255字节的文本,最后一个包携带16字节的文本,捕获到的第一个与最后一个客户端包信息如下。 + + ![png](./lib7-8.png) + + 可以观察到 IP 协议头中 DF 为 1 ,故数据未经 IP 分片,数据的分段发生在 TCP 加工阶段。 + +5. 断连测试 + + 1. 断开0号客户端连接,捕获到由0号客户端发出的结束请求 + + ![png9](./lib7-9.png) + + 2. 重新恢复0号客户端连接 + + 3. 断开服务端连接,捕获到由服务端发出的结束请求(FIN),0号客户端发送ACK确认,但未得到服务端的ACK确认,于是0号客户端将在等待2MSL后自动断开连接,捕获到的包信息如下: + + ![png10](./lib7-10.png) + + 4. 0号客户端发送文本`a text from client`, Wireshark 捕获到的内容如下 + + ![png11](./lib7-11.png) + + 0号客户端发送了带有 PSH 的信息包,端口收到后优先处理该数据包,由于服务端已经关闭,7701端口空闲,故返回带有RST的数据报。 + + 5. 0号客户端发送文本`server restart`,按下回车后客户端自动退出,Wireshark 没有捕获到消息 + + 6. 执行指令`./client localhost`,尝试重新启动客户端,收到报错`simplex-talk: connect: Connection refused`,捕获到的包信息如下 + + ![png12](./lib7-12.png) + + 0号客户端发送了带有 SYN 的信息包,由于服务端已经关闭,7701端口空闲,故返回带有RST的数据报,0号客户端收到后报告错误并退出 + + 7. 执行指令`./client`,不指定地址,报错`usage: simplex-talk host` + +6. 多客户端测试 + + 1. 重新启动服务端 + 2. 启动0号客户端,观察 Wireshark ,可以发现0号客户端使用端口为53092 + 3. 0号客户端发送文本`client0`,服务端显示:`client0`,正常发送。 + 4. 启动1号客户端,观察 Wireshark ,可以发现1号客户端使用端口为43676,Wireshark 捕获包信息如下: + + ![png13](./lib7-13.png) + + 5. 1号客户端发送文本`client1`,服务端没有显示,但 Wireshark 捕获到信息包。 + 6. 0号客户端发送文本`text from client0`,服务端显示`text from client0`,正常发送。 + 7. 1号客户端发送文本`text from client1`,服务端没有显示,但 Wireshark 捕获到信息包。 + 8. 0号客户端发送文本`client0 stop`,服务端显示`client0 stop`,正常发送。 + 9. 0号客户端断开连接,服务端显示`client1` + 10. 0号客户端发送文本`client1 stop`,服务端显示`client1 stop`,正常发送。 + 11. 断开服务端连接。 + + 1 号客户端发送的三个携带文本的信息包如下: + + ![png14](./lib7-14.png) + +7. 端口占用测试 + + 1. 启动服务端,Wireshark 未捕获到内容 + 2. 启动第二个服务端,报错`simplex-talk: bind: Address already in use`,Wireshark 未捕获到内容 + 3. 启动客户端 + 4. 关闭服务端 + 5. 尝试重新启动服务端,报错`simplex-talk: bind: Address already in use`,Wireshark 未捕获到内容 + 6. 客户端退出 + 7. 尝试重新启动服务端,服务端正常运行 + + 测试截图如下: + + ![png15](./lib7-15.png) + +8. 局域网通信测试 + + 1. 通过 ssh 连接并控制同一局域网下的另一设备 + + 2. 通过 ftp 上传源代码server.c与client.c + + 3. 在 ssh 所控制设备上编译 + + 4. 启动 Wireshark ,将过滤器设置为`tcp.port == 7701`,对wlan0进行捕获 + + 5. 在远程主机上执行`./server`,在电脑上执行`./client 192.168.31.135`,成功连接 + + 6. 在客户端上发送信息,远程服务端成功收到 + + 7. 交换客户端与服务端,仍能成功通信 + + 通信记录与 Wireshark 捕获截图如下: + + ![png16](./lib7-17.png) + + ![png18](./lib7-18.png) + +## 五、附录 + +客户端代码如下: + +```c +/* Source: Peterson & Davie (2007), Computer Networks, a Systems Approach, + * 4th ed., Morgan Kaufmann, p. 34-35. + * Included stdlib.h, string.h, and strings.h so it compiles on Linux. + * Changed port from 5432 (postgresql) to 7701 (unassigned). + * - JLND Feb 7 2009 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define SERVER_PORT 7701 +#define MAX_LINE 256 + +int +main(int argc, char * argv[]) +{ + FILE *fp; + struct hostent *hp; + struct sockaddr_in sin; + char *host; + char buf[MAX_LINE]; + int s; + int len; + + if (argc==2) { + host = argv[1]; + } + else { + fprintf(stderr, "usage: simplex-talk host\n"); + exit(1); + } + + /* translate host name into peer’s IP address */ + hp = gethostbyname(host); + if (!hp) { + fprintf(stderr, "simplex-talk: unknown host: %s\n", host); + exit(1); + } + + /* build address data structure */ + bzero((char *)&sin, sizeof(sin)); + sin.sin_family = AF_INET; + bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length); + sin.sin_port = htons(SERVER_PORT); + + /* active open */ + if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) { + perror("simplex-talk: socket"); + exit(1); + } + if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) { + perror("simplex-talk: connect"); + close(s); + exit(1); + } + + /* main loop: get and send lines of text */ + while (fgets(buf, sizeof(buf), stdin)) { + buf[MAX_LINE-1] = '\0'; + len = strlen(buf) + 1; + send(s, buf, len, 0); + } +} +``` + +服务端代码如下: + +```c +/* Source: Peterson & Davie (2007), Computer Networks, a Systems Approach, + * 4th ed., Morgan Kaufmann, p. 35-36. + * Included stdlib.h, string.h, and strings.h so it compiles on Linux. + * Changed port from 5432 (postgresql) to 7701 (unassigned). + * - JLND Feb 7 2009 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define SERVER_PORT 7701 +#define MAX_PENDING 5 +#define MAX_LINE 256 + +int +main() +{ + struct sockaddr_in sin; + char buf[MAX_LINE]; + int len; + int s, new_s; + + /* build address data structure */ + bzero((char *)&sin, sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_addr.s_addr = INADDR_ANY; + sin.sin_port = htons(SERVER_PORT); + + /* setup passive open */ + if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) { + perror("simplex-talk: socket"); + exit(1); + } + if ((bind(s, (struct sockaddr *)&sin, sizeof(sin))) < 0) { + perror("simplex-talk: bind"); + exit(1); + } + listen(s, MAX_PENDING); + + /* wait for connection, then receive and print text */ + while(1) { + if ((new_s = accept(s, (struct sockaddr *)&sin, &len)) < 0) { + perror("simplex-talk: accept"); + exit(1); + } + while (len = recv(new_s, buf, sizeof(buf), 0)) + fputs(buf, stdout); + close(new_s); + } +} +``` diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7.pcapng b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7.pcapng new file mode 100755 index 0000000..fe67e2d Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/lib7.pcapng differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server new file mode 100755 index 0000000..a49cec3 Binary files /dev/null and b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server differ diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server.c b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server.c new file mode 100755 index 0000000..18d27e5 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server.c @@ -0,0 +1,55 @@ +/* Source: Peterson & Davie (2007), Computer Networks, a Systems Approach, + * 4th ed., Morgan Kaufmann, p. 35-36. + * Included stdlib.h, string.h, and strings.h so it compiles on Linux. + * Changed port from 5432 (postgresql) to 7701 (unassigned). + * - JLND Feb 7 2009 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define SERVER_PORT 7701 +#define MAX_PENDING 5 +#define MAX_LINE 256 + +int +main() +{ + struct sockaddr_in sin; + char buf[MAX_LINE]; + int len; + int s, new_s; + + /* build address data structure */ + bzero((char *)&sin, sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_addr.s_addr = INADDR_ANY; + sin.sin_port = htons(SERVER_PORT); + + /* setup passive open */ + if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) { + perror("simplex-talk: socket"); + exit(1); + } + if ((bind(s, (struct sockaddr *)&sin, sizeof(sin))) < 0) { + perror("simplex-talk: bind"); + exit(1); + } + listen(s, MAX_PENDING); + + /* wait for connection, then receive and print text */ + while(1) { + if ((new_s = accept(s, (struct sockaddr *)&sin, &len)) < 0) { + perror("simplex-talk: accept"); + exit(1); + } + while (len = recv(new_s, buf, sizeof(buf), 0)) + fputs(buf, stdout); + close(new_s); + } +} \ No newline at end of file diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server.txt b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server.txt new file mode 100755 index 0000000..a61efb5 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/server.txt @@ -0,0 +1,17 @@ +❯ ./server +text0:hello, world +text1: !"#$%&'()*+,-./0123456789:;<=>?`ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_@abcdefghijklmnopqrstuvwxyz{|}~ +text2:\t \t +text3:你好,世界 +text4:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345678 +client0 stop +client0 restart +server stop +^C +❯ ./server +client0 +text from client0 +client0 stop +client1 +client1 stop +^C diff --git a/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/test.txt b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/test.txt new file mode 100755 index 0000000..b37a902 --- /dev/null +++ b/docs/undergraduate/软件工程学院/计算机网络/lab/lab7/test.txt @@ -0,0 +1 @@ +0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \ No newline at end of file