一、传输控制协议TCP
1、TCP 最主要的特点
TCP 是面向连接的运输层协议。
每一条TCP 连接只能有两个端点,每一条TCP 连接只能是点对点的(一对一)。
TCP 提供可靠交付的服务。
TCP 提供全双工通信。
面向字节流。
2、TCP 连接是一条虚连接而不是一条真正的物理连接。
3、TCP 连接的端点:不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口,而是套接字(socket)或插口,是端口号拼接到IP 地址后面构成的。
套接字socket = (IP地址: 端口号) 192.168.1.1:80
TCP 连接::= {socket1, socket2}
= {(IP1: port1), (IP2: port2)}
4、同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。
二、可靠传输的工作原理
1、理想传输条件的两个特点:传输信道不产生差错,无论发送发以多快的速度发送,接送方总来的及接受数据。在这种条件下不需要采取何种措施就可以实现可靠传输。
2、停止等待协议:每发送完一个分组就停止发送,等待对方确认。确认后再发下一个分组
3、为了在出现差错时能够继续通信:在发送完一个分组后,必须暂时保留已发送的分组的副本;分组和确认分组都必须进行编号;超时重传,超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。
4、确认丢失和确认迟到
5、使用确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
6、可靠传输协议又称为自动重传请求ARQ
7、信道利用率: TD:分组发送时间;RTT:分组往返时间;TA:发送确认分组所需的时间
8、停止等待协议的优点是简单,但缺点是信道利用率太低。
9、提高信道利用率的措施:采用流水线传输:发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认
10、连续ARQ 协议:TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口。发送窗口内的数据可以连续发送出去,不需要等待对方的确认,接收方采用累积确认,对按序到达的最后一个分组确认,表示:到这个分组为止的所有分组都已正确收到了。
发送方每接收到一个确认,就把发送窗口向前滑动一个分组单位。
三、TCP 报文段的首部格式
1、源端口和目的端口字段——各占2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
2、序号字段——占4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
3、确认号字段——占4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
4、数据偏移(即首部长度)——占4 位,它指出TCP 报文段的数据起始处距离TCP 报文段的起始处有多远,以四个字节为单位,其实就是首部长度,最大60字节。
5、确认ACK —— 只有当ACK 1 时确认号字段才有效。
6、复位RST (ReSeT) —— 当RST 1 时,表明TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
7、同步SYN —— 同步SYN = 1 表示这是一个连接请求或连接接受报文
8、终止FIN (FINis) —— 用来释放一个连接。FIN 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
9、窗口字段—— 占2 字节,用来让对方设置发送窗口的依据,单位为字节。
10、检验和—— 占2 字节。检验和字段检验的范围包括首部和数据这两部分。检验规则和UDP检验和一样。
11、紧急指针字段—— 占16 位,指出在本报文段中紧急数据共有多少个字节
12、MSS是TCP 报文段中的数据字段的最大长度
13、选项字段—— 长度可变。包括:
窗口扩大选项——占3 字节,
时间戳选项——占10 字节,其中最主要的字段时间戳值字段(4 字节)和时间戳回送回答字段(4 字节)。用来计算往返时间,处理TCP序号超过2的32次方的情况,防止序号绕回,时间戳可以做个标记
选择确认选项
14、填充字段,填0,这是为了使整个首部长度是4 字节的整数倍。
六、TCP 可靠传输的实现
1、TCP的滑动窗口以字节为单位
2、窗口越大,发送方就可以在收到确认之前发送更多的数据,传输效率高,但是接收方必须来的及接收。
3、 窗口的分类:发送窗口,可用窗口,未确认窗口
4、 A 的发送窗口并不总是和B 的接收窗口一样大(因为有一定的时间滞后)。
5、TCP 要求接收方必须有累积确认的功能,这样可以减小传输开销。
6、缓存和窗口的关系:缓存一般大于窗口
7、发送缓存与接收缓存的作用
发送缓存用来暂时存放:
发送应用程序传送给发送方TCP 准备发送的数据;
TCP 已发送出但尚未收到确认的数据。
接收缓存用来暂时存放:
按序到达的、但尚未被接收应用程序读取的数据;
不按序到达的数据。
8、超时重传时间的选择: RTO RTTS + 4 RTTD
平均往返时间
新的RTTS (1 ) (旧的RTTS) (新的RTT 样本)
0 1推荐=0.125
RTT 的偏差的加权平均值
新的RTTD = (1 ) (旧的RTTD) + RTTS新的RTT 样本
推荐=0.25
9、如何判定一个确认报文段是对原来的报文段1 的确认,还是对重传的报文段2 的确认?
采用Karn算法:在计算平均往返时间RTT 时,只要报文段重传了,就不采用其往返时间样本。
修正的Karn算法:报文段每重传一次,就把RTO 增大一些:
10、选择确认sack是解决:接收方收到了和前面的字节流不连续的两个字节块,怎样让发送方只发送没有到达的数据段
11、使用SACK时要将TCP首部中的SACK位置1,然后再选项字段填入未接受到的断块的边界值,每个边界值占4个字节,确定一个断块要用两个边界值,所以选项字段最多只能指明4个字节块的信息。另外还要一个选项指明是SACK选项,一个指明SACK占用的字节数
WeChall
第一道题比较简单
直接查看页面的源码
在这里我们可以看到password,本来是想复制粘贴过去,但是提交答案是错误的,而直接输入答案提交却是正确的,我也不知道这是为啥。
然后,第二道题,是一道图片隐写的题,之前做过这一类型的题,
我们将图片另存到桌面上,然后放入记事本中,
可以发现最后一个单词就是我们要的结果。