打开抖音会发生什么(计算机网络相关知识)
ep12 网络交互之网络接入
ep12.1 Linux环境搭建
VMware->CentOS->FinalShell
ep12.2 安装 Wireshark
ep12.3 听课笔记
域名解析(Domain Name System,DNS)是互联网中的一种服务,用于将人类可读的域名(例如www.example.com)转换为计算机可理解的IP地址(例如192.0.2.1)。因为计算机在互联网上通信时使用IP地址,而不是域名,所以需要DNS来帮助将域名映射到相应的IP地址。
DNS的作用在互联网通信中非常重要,它帮助我们使用方便易记的域名来访问网站,而不必记住复杂的数字IP地址。
HTTP的主要目标是支持客户端和服务器之间的通信,使得客户端可以从服务器请求资源,而服务器则可以向客户端返回请求的资源。这些资源可以是网页文件(HTML、CSS、JavaScript等)、图像、视频、音频文件等。
网络接入-路由 12:20
代码片段展示了一个函数 send_one_pkt()
的伪代码,用于发送一个数据包到目标地址。
void send_one_pkt()
: 这是一个函数的声明,用于发送一个数据包。
rt = find_rt(dst)
: 这一行代码调用了一个函数 find_rt(dst)
来查找目标地址 dst
对应的路由项。在路由表中,每个目标地址都会有一个对应的路由项,包含了与该目标地址相关的信息,如出口网口和下一跳地址。
l2->dst_mac = rt->next_hop->mac
: 这一行代码将数据包的目标MAC地址设置为路由表中找到的下一跳地址(next_hop)的MAC地址。在以太网通信中,数据包需要知道下一跳设备的MAC地址,以便正确地将数据包传送到下一跳。
p = append(p, 12)
: 这一行代码将数据包添加12字节的内容(可能是某种标记或数据)。
send(p, rt->port)
: 这一行代码调用了发送函数 send()
,并指定了发送的数据包内容 p
和发送的网口 rt->port
。数据包需要通过正确的出口网口发送到目标地址。
提到了动态路由协议 BGP(边界网关协议)和 OSPF(开放最短路径优先协议)。这些协议是用于动态路由的,它们允许路由器之间动态地交换路由信息,以实现自动路由更新和选择最优路径的功能。这样,在网络拓扑发生变化时,路由器可以根据协议交换的信息自动调整路由表,以确保数据包可以以最佳路径传输。
BGP主要用于互联网边界路由,用于连接不同的自治系统(AS)。OSPF则主要用于内部网络中的路由,用于在同一个自治系统内部动态选择最优路径。这些协议的目标是提高网络的可靠性、灵活性和性能。
ARP协议
ARP本质是查找下一跳的MAC,而不是请求目标地址。
IP协议
IPv4,IPv6,NAT
ep13 网络交互之网络传输
ep13.1 听课笔记
网络传输-数据包-四层网络模型(与ep10.1联系)
UDP->TCP 三次握手
在计算机网络中,"seq"和"ack"是TCP协议(Transmission Control Protocol,传输控制协议)头部中的两个重要字段,用于管理数据传输和确认。
seq (Sequence Number) - 序列号ack (Acknowledgment Number) - 确认号
确认号的值是接收方期望接收的下一个字节的序列号。例如,如果接收方已经成功接收了序列号为100的数据包,那么它的确认号将设置为101,表示期望下一个数据包的序列号是101。
HTTP/HTTP1.1
SSL/TLS握手
ep13.2 抓包(与ep12.2联系)01:04
ep14 网络架构如何给抖音提质之网络提速
QUIC/HTTP3.0
协议优化/网络路径优化
ep15 网络提速的优化之路
容灾 故障排查
课后作业1 UDP socket 实现 ack ,感知丢包重传
提示
学会UDP socket编程:
UDP socket编程是通过使用UDP协议在网络上进行通信的一种方法。在常见的编程语言中,如Python、Java、C/C++等,都有相应的UDP socket库或API可以使用。通过这些库,可以创建UDP socket,发送和接收UDP数据包。
先从简单的ack学习,客户端等ack再发包:
在简单的ack实现中,客户端发送数据包给服务器,并等待服务器发送一个确认应答(ack)表示数据包已经收到。客户端只有在收到ack后,才继续发送下一个数据包。如果超过一定时间没有收到ack,客户端会认为数据包丢失,并进行重传。
什么时候客户端认为是丢包?
客户端可以设置一个超时时间,在发送数据包后等待ack的时间超过这个超时时间时,客户端会认为数据包丢失。这个超时时间通常是根据网络延迟和可靠性要求来设置的。如果在超时时间内没有收到ack,客户端会触发重传机制。
重传怎么考虑效率?
重传的效率可以通过以下几种方式来考虑:
- 使用递增的重传超时时间:如果数据包连续多次未收到ack,则逐渐增加重传超时时间,避免因为临时网络拥塞导致频繁的重传。
- 使用快速重传:在收到对同一个数据包的多个重复ack时,快速重传该数据包,而不等待超时。这可以加速丢包恢复过程。
- 使用选择性重传:只重传确实丢失的数据包,而不是对所有数据包进行全局性的重传。这可以减少不必要的重传开销。
UDP是无连接的,每个数据包都是独立的,因此如果数据包丢失,UDP协议本身并不提供自动的重传机制。在UDP中,如果发现某个数据包丢失,要实现重传,必须由应用程序自己处理。实现只传输丢失的中间段可以采用类似选择性重传的方法,即记录哪些数据包已经成功发送并收到ack,如果发现中间的某个数据包丢失,则只重传该数据包及其后续的数据包。这样可以避免重传整个数据段,从而提高效率。