CS144 (二)
CS144 (二)
TCP协议
目的端口:告诉使用哪个服务,如网络:80
源端口:告诉另一端TCP,应该使用哪个端口发送
序列号:TCP数据字段第一个字节在字节流位置
确认序列号:告诉另一端期望接收的下一个字节
HLEN:最左边头部长度字段:TCP头部有多长
TCP连接由TCP和IP头中的五部分信息唯一标识,IP源地址和目的地址唯一标识端点,协议ID表示这个是TCP连接
序列号:
- 序列号包括第一个字节的序列号,偏移量为初始序列号
- 从B返回A的段中的确认序列号告诉我们B期望接收的下一个字节,偏移量为A的初始序列号
端口:
UDP协议
ICMP 互联网控制消息协议
ICMP运行网络层之上,
Traceroute:
traceroute的目标是找出从A到B路径上的路由器
错误检验:
校验和(checksum) : 只需将数据包中的所有数据相加;
将一系列数字(通常是二进制)通过某种算法计算出一个值,并将这个值附加到数据后面。接收方收到数据后,同样使用这个算法对数据计算校验和,并与接收到的校验和进行比较。如果两者相同,则认为数据传输过程中没有发生错误;如果不同,则认为数据可能已经损坏
-
简单校验和
将数据划分为固定长度的段;将这些段相加(通常是模256或模65536);将得到的总和取反(即对模数取补码),得到校验和
-
CRC(循环冗余校验)
在数据后面添加一定数量的0,这些0的数量等于生成多项式的度数;使用生成多项式对数据进行模2除法;计算得到的余数就是CRC校验和;将CRC校验和附加到数据后面
-
奇偶校验
奇校验:确保整个数据(包括校验位)中1的个数为奇数;偶校验:确保整个数据(包括校验位)中1的个数为偶数
滑动窗口
滑动窗口发送方:
- Every segment has a sequence number(SeqNo)每个段有个序列号
- Maintain 3 variables 维护3个变量
- Send window size(SWS) 发送窗口的大小(表示发送方在某一时刻最多可以发送多少未被确认的数据)
- Last acknowledgment received (LAR) 接收方最后确认接收到的数据序列号
- Last segment sent(LSS) 发送方最后一个发送的数据段的序列号
- Maintain invariant 最后一个收到的确认必须小于或等于发送窗口的大小
滑动窗口的设计:
1、窗口范围:LAR < SeqNo <= LAR + SWS
1. LAR: 已收到确认的序列号
1. SeqNo: 当前发送的段序列号
1. SWS: 发送窗口的大小
2、数据发送:
1. 当LSS - LAR < SWS , 发送方继续发送数据,因为窗口范围未超出,每次发送一个段,更新LSS
1. 收到确认ACKNo,若ACKNo > LAR, 则更新LAR, 滑动窗口向前移动
1. LAR增加后,新的序列区间号变为LAR + 1 到 LAR + SWS
3、停止发送条件
若LSS= LAR + SWS,发送窗口已满,发送发必须等待接收方的确认才能继续发送
eg:
假设SWS = 5, 初始LAR = 0, 序列号从1开始:
1.发送发依次发送SeqNo = 1, 2, 3, 4, 5
LSS = 5, 窗口满
2.接收方收到SeqNo = 1, 2 发送ACK= 3
LAR = 2, 滑动窗口变发 3, 4, 5, 6, 7
3.发送方继续发送SeqNo = 6, 7
窗口再次满,等待新ACk
4.如果丢失了SeqNo = 4, 接收方发送冗余ACK
发送方重传SeqNo = 4, 窗口继续滑动
端到端设计principle
- 应用层的责任:可靠性、安全性、完整性等高层功能应该在应用层实现,而非依赖底层网络
- 网络层的简单性:网络的设计尽量通用化,负责提供基础的连接和传输功能,而不对数据本身的内容进行过多干预
- 冗余的最小化:避免在网络中重复实现高层功能(例如错误检测、重传等),以免浪费资源
eg: HTTP协议
- 应用程序负责检查文件是否完整(如通过 MD5 校验)
- TCP 提供了基础的可靠传输功能(通过重传和窗口控制保证数据包顺序到达)
- 网络层只负责尽力将数据包发送到目的地,而不关心数据内容