计算机网络 lab6 TCP

一、实验目的

  1. 熟悉使用wireshark软件进行抓取TCP数据包 ;
  2. 分析抓取到的TCP数据包,掌握TCP数据包结构、TCP数据包各字段的含义;
  3. 掌握TCP连接建立和释放的步骤;
  4. 掌握TCP数据传输过程;

二、实验步骤

1. Capture a Trace;
2. Inspect the Trace;
3. TCP Segment Structure;
4. TCP Connection Setup/Teardown; >>Three-way Handshake; Connection Options; FIN/RST Teardown;
5. TCP Data Transfer;
6. Explore on your own;

三、实验环境

· wireshark;· wget :获取web资源。
· Browser:本次实验用web浏览器获得页面作为工作负载,查找、获取页面。


 

四、实验过程与分析

1. Capture a Trace 捕获

TCP是全双工的,下载内容是从远程服务器端传输到本地计算机。

1. 使用一个中等大小的资源的url,使用HTTP(不是HTTPS),是单个资源,不是一个包含很多内联资源的web界面(例如a.html)。
2. 命令行>> wget http://p4.qhimg.com/bdm/0_0_100/t010fae11f356641191.jpg
3. 打开wireshark,对应上述网址设置过滤器为 “tcp and host p4.qhimg.com” ,开始捕获

2. Inspect the Trace 检查捕获

选取一个协议栏显示为TCP的较长的数据包,是服务器传递给我的计算机进行下载的,而不是初始的 “HTTP GET” 或者是结束时的 “HTTP”(虽然这些数据包的协议栏显示的是TCP)。

· source port 源端口 2B:很有可能是80,因为web服务器的端口号是80;
· destination port 目的端口 2B:source port 和 destination port是TCP在IP地址以外添加的地址。
· sequence number 序号4B:保证TCP可靠性传输的关键,记录第一个有效负载字节在字节流中的位置;
· acknowledge number 确认号 4B:每一个ACK对应一个确认号,指明下一个期待收到的字节序号,同时表明该序号之前的所有数据都已经正确接收。只有当ACK位=1时有效。建连时SYN报文的ACK位=0;
· TCP header length TCP首部长度 4b:TCP header 有多少个4B,例如这个TCP数据包的TCP header length显示为0101,说明这个TCP header长度为5(0101)*4 = 20B。TCP报文默认大小为20B。
· flags 标志位 6b:CWR、ECE用于IP header的ECN字段;
        URG:标志紧急指针是否有效;
        ACK标志确认号是否有效;
        PSH提示接收端应用程序立即将接收缓冲区数据取走;
        RST处理异常连接,告知连接不一致的一方连接还没有建立好要求重新建连,RST=1复位报文段
        SYN用于同步,SYN=1 称为同步报文段;
        FIN通知对方要关闭连接,FIN=1称为结束报文段。
· window size 窗口大小 2B:流量控制,发送方发送大量数据时,接收方利用滑动窗口进行缓冲。
· checksum 校验和 2B:CRC校验; · options选项:建连时用于协调双方支持的内容;

3. TCP Segment Structure

Turn-in: Hand in your drawing of a TCP segment.

4. TCP Connection Setup/Teardown

Turn-in: Hand in your drawings and the answers to the above questions.

Three-Way Handshake 三次握手

记sequence number为Seq;acknowledge number为Ack;
第一次握手:客户端发送一个SYN同步报文段(SYN=1的TCP数据包,包含初始序列号Seq=J),请求与服务器建立连接;
第二次握手:服务器发送SYN+ACK段(SYN=ACK=1的TCP数据包,序列号Seq=K,确认号Ack=J+1),确认号=J+1表明前J+1之前的0~J都已经正确接收,已经接收了客户端发来的SYN段;
第三次握手:客户端发送一个ACK段给服务器(ACK=1,Ack=K+1),表示已经正确接收服务器发来的SYN+ACK段;
设置过滤器 “tcp.flags.syn==1”
Draw a time sequence diagram of the three-way handshake in your trace, up to and including the first data packet (the HTTP GET request) sent by your computer when the connection is established. Put your computer on the left side and the remote server on the right side.

可见前两次握手时必要的,建立双向的连接,第三次挥手有什么作用?完成同步的功能。前两次握手的Seq序列号是一样的,第三次在其基础上+1,表示已经收到前两次的序列号,已经完成同步,接下来可以开始进行数据的传输。没有第三次握手的话,无法保证客户端收到了服务器的SYN+ACK报文段。所以整个握手过程主要有两个功能:确认双向可达+同步

Connection Options

Answer the following question:1. What TCP Options are carried on the SYN packets for your trace?

① Maximum segment size 希望接收的最大报文长度1460B
②NOP :no operation无意义字段,用于填充十七成为4B倍数。
③Window Scale 扩大窗口,实际窗口大小为2^16 * 2^8 = 2^24 = 16MB
④SACKpermitted 当发送序列中某个数据包丢失,可通过SACK报文通知发送方这个丢了,发送方于是重新传丢失的包,而不是全部重发。

 FIN/RST Teardown;

下载完成之后,关闭TCP连接。客户端与服务器交换四次报文
四次挥手的过程:
第一次挥手:客户端发送结束报文段(FIN=1,Seq=U)给服务器。
第二次挥手:服务器收到第一次挥手的数据包之后,向客户端发送确认报文(ACK=1,Seq=V,Ack=U+1),允许断开连接;
第三次挥手:服务器发送确认报文之后,继续发送结束报文段(FIN=1,ACK=1,Seq=V,Ack=U+1)给客户端;
第四次挥手:客户端接收到FIN结束报文段之后,发送确认报文(ACK=1,Seq=U+1,Ack=W+1)给服务器,告知服务器已经接收到结束报文。

服务器接收到这条ACK确认报文之后,释放TCP连接的相关资源(缓存和变量),客户端等待一段时间之后,释放处于客户端的缓存和变量。
等待一段时间TIME-WAIT:① 保证第四次挥手。客户端不确认第四次挥手时发送给服务器的ACK确认报文是否顺利到达服务器。如果没有顺利到达,服务器会重新进行第三次挥手,直到正确接收客户端第四次挥手的ACK确认报文段。所以不可以立即释放客户端资源,这会导致服务器重新进行的第三次挥手失败。
② 防止新连接中出现旧连接的报文段。四次挥手完成之后,不代表之前通过这个连接发送的所有数据都已经处理完了,有些可能在网络中传输。如果立即释放资源,然后再在用一对源端口、目的端口建立TCP连接,可能导致上一次连接中遗留在网络中的报文在新连接中到达,会被当成是新连接的数据进行处理,这就产生了错误。所以需要等待2MSL时长,确保旧连接的报文都从网络中消失。
四次挥手:TCP是全双工的,当客户端要关闭连接时,服务器要发送的数据不一定发完了,所以第二、三次挥手都是服务器完成的,第二次确认知道要关闭连接,第三次告知客户端服务器数据也发送完毕可以断开;CLOSE-WAIT等待服务器发送完数据;第四次挥手返回ACK报文段完才进入TIME-WAIT。因为结束时涉及数据有没有传送完这个问题,所以不同于建立连接时只用三次握手。

Draw a picture of the teardown in your trace, starting from when the first FIN or RST is issued until the connection is complete. As before, show the sequence and ACK numbers on each segment. If you have FINs then use the time difference to estimate the round-trip time.
在wireshark中没有找到FIN=1的数据包?是因为一端发送RST时,连接会突然断开,这个报文不需要被对方确认。

5. TCP Data Transfer

Answer the following questions to show your understanding of the data transfer:
1. What is the rough data rate in the download direction in packets/second and bits/second once the TCP connection is running well?
大约是2Mbps  200packet/sec(对应srcport)
|2. What percentage of this download rate is content? Show your calculation. To find out, look at a typical download packet; there should be many similar, large download packets. You can see how long it is, and how many bytes of TCP payload it contains. 内容下载率

1412(payload有效载荷) / 1466总长度 =96.3%
3. What is the rough data rate in the upload direction in packets/second and bits/second due to the ACK packets? ACK消息的发送速率?
大约是60Kbps  120packet/sec(对应dstport)
4. If the most recently received TCP segment from the server has a sequence number of X, then what ACK number does the next transmitted TCP segment carry? 服务器收到的TCP Seq=X 下一个发送的Ack是多少?
Ack = X + 这个TCP报文的长度segment length。

6. Explore on your own

TCP拥塞控制:拥塞窗口cwnd(congestion window):发送方维护一个状态变量(即拥塞窗口),大小取决于网络的拥塞程度且动态变化。发送方自己的发送窗口=拥塞窗口;如果要考虑接收方的接受能力,发送窗口可能<拥塞窗口。
原则:只要网络没有出现拥塞(发送方没有按时收到ACK确认报文),就增大窗口;若出现拥塞减少拥塞窗口。

经典AIMD策略:“和式增加、积式减少” “addictive increase,multiplicative decrease”;
        这样能使得双方速率逐渐成为均分的形态。
        AIMD策略的效果——收敛、公平。
参考资料:TCP——为什么是AIMD?-henrystark-ChinaUnix博客

探索TCP可靠性机制
1. 超时重传机制:超过时间还未收到ACK则重新发送。
2. 校验和:校验和错误时重传。
3. 序列号:序列号能够确认缺少了哪个位置的数据,保证按序到达,同时筛除重复数据。
4. 确认应答机制:ACK标志位=1时,检查Ack=U+1,说明前U个数据包都正确接收。

SACK: TCP的一个选项,允许TCP单独确认非连续片段,用于告知真正丢失的包,只重传丢失的片段。options字段中:SACKpermitted 当发送序列中某个数据包丢失,可通过SACK报文通知发送方这个丢了,发送方于是重新传丢失的包,而不是全部重发。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值