【计算机网络】模块一:互联网和传输层协议

文章目录TCP的封包格式 滑动窗口 & 流速控制 UDP协议DUP的封包格式 思考题 总结
蜂窝网络 公司内网
【【计算机网络】模块一:互联网和传输层协议】移动网络
+在一定范围内的区域,离用户较近的地方还可以部署服务器,帮助用户完成计算 。这相当于 计算资源的下沉,称为边缘计算 。相比中心化的计算,边缘计算延迟低、链路短,能够将更好的体验带给距离边缘计算集群最近的节点 。
家用网络整体关系
数据的传输
**网络基础设施往往不能一次性传输太大的数据量,因此通常会将数据分片传输 。**比如传输一个 MP3 , 我 们会将 MP3 内容切分成很多个组,每个组也称作一个封包,英文都是。如果部分损坏,只需重发损坏的封包 。
网络中两点间的路径非常多 , 如果一条路径阻塞了,部分封包可以考虑走其他路径 。发送端 将数据拆分成封包(),封包在网络中遇到岔路,由交换器和路由器节点决定走向
TCP协议 主机到主机连接和会话单工和双工
TCP的挥手和握手建立连接的过程(三次握手)断开连接的过程(4 次挥手)小结TCP的封包格式 TCP的封包和粘包TCP
也是 TCP 保证稳定性并进行流量控制的工具 是校验和,用于校验 TCP 段有没有损坏指向最后一个紧急数据的序号( ) 。它存在的原因是:有时候紧 急数据是连续的很多个段,所以需要提前告诉接收方进行准备 。中存储了一些可选字段 存在的意义是因为的长度不固定,需要进行对齐 。拆包.:数据被拆分成很多个部分,部分增加了协议头 。合并成为一个 TCP 段,进行传输TCP 段经过复杂的网络结构,由底层的 IP 协议 , 负责传输到目的 地,然后再进行重组.稳定性要求是数据无损地传输(拆包获得数据,又需要恢复到原来的样子). : 累计的发送字节数 : 累计的接收字节数 。
无论 Seq 还是 ACK,都是针对“对方”而言的 。是对方发送的数据和对方接收到的数据 。MSS(Size)滑动窗口 & 流速控制请求/响应模型
吞吐量提升的方法 : 就是让发送方有请求就发送出去,而不是等待响应 。通过这样的处理方式 , 发送的数 据连在了一起,响应的数据也连在了一起,吞吐量就提升了. [下图 : 而不是请求后就等待 然后再发送]
排队()机制
滑动窗口( )
** 快速重传:**
控制流速UDP协议
HTTP 协议 1.1 和 2.0 都基于 TCP,而到了 HTTP 3.0 就开始用 UDP 了 。
DUP的封包格式UDP 与 TCP的区别2.可靠性差异 :
+ TCP 核心是要在保证可靠性提供更好的服务 。TCP 会有握手的过程 , 需要建立连接 , 保证双方同时在 线 。而且TCP 有时间窗口持续收集无序的数据,直到这一批数据都可以合理地排序组成连续的结果 。
+ UDP 并不具备以上这些特性,它只管发送数据封包,而且 UDP 不需要 ACK,这意味着消息发送出去成 功与否 UDP 是不管的.3.连接 vs 无连接流控技术(Flow ): TCP 使用了流控技术来确保发送方不会因为一次发送过多的数据包而使接收方不堪重负 。TCP 在发送缓冲区中存储数据 , 并在接收缓冲区中接收数据 。当应用程序准备就绪时,它将从接收缓冲区读取数据 。如果接收缓冲区已满,接收方将无法处理更多数据,并将其丢弃 。UDP 没有提供类似的能力.传输速度: UDP 协议简化,封包小,没有连接、可靠性检查等,因此单纯从传输速度上讲,UDP 更快 。场景差异思考题 TCP 为什么是 3 次握手,4 次挥手?
TCP 是一个双工协议,为了让双方都保证,建立连接的时候 , 连接双方都需要向对方发送 SYC (同步请求)和 ACK(响应) 。握手阶段双方都没有烦琐的工作,因此一方向另一方发起同步(SYN)之后 , 另一方可以将自己的 ACK 和 SYN 打包作为一条消息回复,因此是 3 次握手——需要 3 次数据传输
到了挥手阶段,双方都可能有未完成的工作 。收到挥手请求的一方,必须马上响应(ACK),表示接收到了挥手请求 。最后等所有工作结束,再发送请求中断连接(FIN),然后响应ACK , 因此是 4 次挥手 。
一台内存在 8G 左右的服务器,可以同时维护多少个连接?
public class Server {public static void main(String[] argv) throws IOException {var serverSocket = new ServerSocket();var addr = new InetSocketAddress(3001);serverSocket.bind(addr);var list = new LinkedList<>();while(true) {var client = serverSocket.accept();list.add(client);System.out.println(list.size());}}}public class Client {public static void main(String[] argv) throws IOException, InterruptedException {var clients = new LinkedList<>();for(int i = 0; i < 1000000; i++) {var client = new Socket("127.0.0.1", 3001);clients.add(client);}Thread.sleep(10000000);}}
在用sudo cat /proc/{进程ID}/ | grep VmHWM可以看到 实际的内存占用
完全可以运行100W的连接,当时连接太多会报一个的异常
核心的问题是,通信需要缓冲区 , 通信需要 I/O 。这是因为通信占用资 源 , 连接本身占用资源
TCP 协议是如何恢复数据的顺序的,TCP 拆包和粘包 的作用是什么?
TCP 拆包的作用是将任务拆分处理,降低整体任务出错的概率 , 以及减小底层网络处理的压力 。拆包过程需要保证数据经过网络的传输,又能恢复到原始的顺序 。这中间,需要数学提供保证顺序 的理论依据 。TCP 利用(发送字节数、接收字节数)的唯一性来确定封包之间的顺序关系 。
有哪些好用的压测工具?滑动窗口和流速控制是怎么回事?既然发送方有窗口,那么接收方也需要有窗口吗?
接收方收到发送方的每个数据分组(或者称为 TCP ),接收方肯定 需要缓存 。举例来说,如果发送方发送了:1, 2, 3, 4 。那么接收方可能收到的一种情况是:1,4 , 3 。注意,没有收到 2 的原因可能是延迟、丢包等 。这个时候,接收方有两种选择 。
TCP 协议和 UDP 协议的优势和劣势?Moba 类游戏的网络应该用 TCP 还是 UDP?总结