当前位置: 首页 > article >正文

CS144 (二)

CS144 (二)

TCP协议

在这里插入图片描述
在这里插入图片描述

目的端口:告诉使用哪个服务,如网络:80
源端口:告诉另一端TCP,应该使用哪个端口发送
序列号:TCP数据字段第一个字节在字节流位置
确认序列号:告诉另一端期望接收的下一个字节
HLEN:最左边头部长度字段:TCP头部有多长

TCP连接由TCP和IP头中的五部分信息唯一标识,IP源地址和目的地址唯一标识端点,协议ID表示这个是TCP连接

在这里插入图片描述

序列号:

  1. 序列号包括第一个字节的序列号,偏移量为初始序列号
  2. 从B返回A的段中的确认序列号告诉我们B期望接收的下一个字节,偏移量为A的初始序列号

端口:

在这里插入图片描述

UDP协议

在这里插入图片描述

ICMP 互联网控制消息协议

ICMP运行网络层之上,

在这里插入图片描述
在这里插入图片描述

Traceroute:

traceroute的目标是找出从A到B路径上的路由器

在这里插入图片描述
在这里插入图片描述

错误检验:

校验和(checksum) : 只需将数据包中的所有数据相加;

将一系列数字(通常是二进制)通过某种算法计算出一个值,并将这个值附加到数据后面。接收方收到数据后,同样使用这个算法对数据计算校验和,并与接收到的校验和进行比较。如果两者相同,则认为数据传输过程中没有发生错误;如果不同,则认为数据可能已经损坏

  1. 简单校验和

    将数据划分为固定长度的段;将这些段相加(通常是模256或模65536);将得到的总和取反(即对模数取补码),得到校验和

  2. CRC(循环冗余校验)

    在数据后面添加一定数量的0,这些0的数量等于生成多项式的度数;使用生成多项式对数据进行模2除法;计算得到的余数就是CRC校验和;将CRC校验和附加到数据后面

  3. 奇偶校验

    奇校验:确保整个数据(包括校验位)中1的个数为奇数;偶校验:确保整个数据(包括校验位)中1的个数为偶数

滑动窗口

滑动窗口发送方:

  1. Every segment has a sequence number(SeqNo)每个段有个序列号
  2. Maintain 3 variables 维护3个变量
    1. Send window size(SWS) 发送窗口的大小(表示发送方在某一时刻最多可以发送多少未被确认的数据)
    2. Last acknowledgment received (LAR) 接收方最后确认接收到的数据序列号
    3. Last segment sent(LSS) 发送方最后一个发送的数据段的序列号
  3. 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
  1. 应用层的责任:可靠性、安全性、完整性等高层功能应该在应用层实现,而非依赖底层网络
  2. 网络层的简单性:网络的设计尽量通用化,负责提供基础的连接和传输功能,而不对数据本身的内容进行过多干预
  3. 冗余的最小化:避免在网络中重复实现高层功能(例如错误检测、重传等),以免浪费资源

eg: HTTP协议

  1. 应用程序负责检查文件是否完整(如通过 MD5 校验)
  2. TCP 提供了基础的可靠传输功能(通过重传和窗口控制保证数据包顺序到达)
  3. 网络层只负责尽力将数据包发送到目的地,而不关心数据内容

http://www.kler.cn/a/420541.html

相关文章:

  • 华为HarmonyOS 让应用快速拥有账号能力 -- 1 华为账号一键登录
  • ELK的Filebeat
  • 在Scala中Array不可变的学习
  • 多人聊天室项目 BIO模型实现
  • 我不是挂王-用python实现燕双鹰小游戏
  • Brain.js(二):项目集成方式详解——npm、cdn、下载、源码构建
  • Redhat8部署docker27.3.0 防火墙策略怎样配置
  • 使用pymupdf提取PDF文档中的文字和其颜色
  • 前端基础的讲解-JS(18)
  • CentOS修改yum.repos.d源,避免“Could not resolve host: mirrorlist.centos.org”错误
  • 【C++】多线程
  • 如何成为一名优秀的炼丹师(三)
  • Docker下的seafile修改配置参数
  • MySQL底层概述—6.索引原理
  • centos搭建keepalive
  • 【AI】Sklearn
  • PHP和GD如何给图片添加模糊边缘效果
  • Flink 常见面试题
  • Pytorch深度学习笔记
  • qml项目创建的区别
  • Linux 下安装 Golang环境
  • webGL入门教程_06变换矩阵与绕轴旋转总结
  • Mysql远程工具Navicat Premium连接报错1130、2003解决方案
  • C++小问题
  • 朗迪锋亮相2024人因工程与智能系统交互国际会议
  • 2024年Java面试八股文大全(附答案版)