计算机网络
计算机网络相关的原理知识,包括TCP及UDP,更多的可能包括各种IO模型。
JiahongWu
追求卓越的程序员。
展开
-
Quic协议为什么这么快
文章目录为什么需要QUIC?QUIC概述目标QUIC连接过程如何做到0RTT?连接过程QUIC连接迁移QUIC解决队头阻塞问题QUIC的拥塞控制(可插拔)热拔插QUIC前向纠错FECQUIC重传序列号单调递增保证包的顺序不允许 Reneging更多的 ACK 块ACK DelayQUIC流量控制(基于 stream 和 connecton 级别)加密认证的报文如何让网络数据传输地更快?(合并一些层)为什么需要QUIC?中间设备的僵化可能是 TCP 协议使用得太久,也非常可靠。所以我们很多中间设原创 2020-11-18 18:36:02 · 504 阅读 · 0 评论 -
拥塞控制算法
TCP拥塞控制算法的目的可以简单概括为:公平竞争、充分利用网络带宽、降低网络延时、优化用户体验,然而就目前而言要实现这些目标就难免有权衡和取舍。算法分类基于丢包策略的传统拥塞控制算法的几个迭代版本,如图所示:与此同时还有一类算法是基于RTT延时策略来进行控制的,但是这类算法在发包速率上可能不够激进,竞争性能不如其他算法,因此在共享网络带宽时有失公平性,但是算法速率曲线却是很平滑基于链路容量的拥塞控制:实时测量网络带宽和时延,认为网络上报文总量大于带宽时延乘积时出现了拥塞,如 BBR。基于学习的原创 2020-11-18 16:09:56 · 1289 阅读 · 0 评论 -
为什么网络需要分层
OSI与TCP/IP分层模型为什么网络需要分层?大部分软件系统都是分层架构的,为了工程上实现/调试/维护方便。网络系统分得更明显一点,因为其系统设计写成了协议。把TCP/IP层次化是有好处的。比如,如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需把变动的层替换掉即可。把各层之间的接口部分规划好之后,每个层次内部的设计就能够自由改动了。分层模型传输过程发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收原创 2020-11-14 13:58:20 · 2136 阅读 · 0 评论 -
Select、Poll、Epoll详解
同步异步与阻塞非阻塞用户空间和内核空间操作系统为了支持多个应用同时运行,需要保证不同进程之间相对独立(一个进程的崩溃不会影响其他的进程 , 恶意进程不能直接读取和修改其他进程运行时的代码和数据)。 因此操作系统内核需要拥有高于普通进程的权限, 以此来调度和管理用户的应用程序。于是内存空间被划分为两部分,一部分为内核空间,一部分为用户空间,内核空间存储的代码和数据具有更高级别的权限。内存访问的相关硬件在程序执行期间会进行访问控制( Access Control),使得用户空间的程序不能直接读写内核空间的原创 2020-08-30 16:54:33 · 1538 阅读 · 2 评论 -
Linux Socket接口使用方法
Linux内核net/socket.c定义了一套socket的操作api。图1展示了socket层所处与TCP/IP协议栈之上和应用层之下。socket()函数socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而**socket()**用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。int socket(int doma原创 2020-08-28 00:43:42 · 881 阅读 · 0 评论 -
Http协议浅析
HTTP/1.x在早期,HTTP 使用一个简单的模型来处理这样的连接。这些连接的生命周期是短暂的:每发起一个请求时都会创建一个新的连接,并在收到应答时立即关闭。当请求发起时,网络延迟和带宽都会对性能造成影响。现代浏览器往往要发起很多次请求(十几个或者更多)才能拿到所需的完整信息,证明了这个早期模型的效率低下。在 HTTP/1.x 里有多种模型:短连接, 长连接, 和 HTTP 流水线。短链接模型HTTP/1.0 的默认模型。每一个 HTTP 请求都由它自己独立的连接完成;这意味着发起每一个原创 2020-07-28 12:21:02 · 354 阅读 · 0 评论