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

初识计算机网络

为什么要有计算机网络这个东西呢?

其实说白了就是为了提高效率

比如说,你在北京,要给一个西藏的客户送快递,那你总不能自己定个机票再手动给他送吧,又不是只有他一个单子需要派送,是向全国各地派送,所以就需要各地都有驿站收发快递

OSI体系结构

把结构分成七层(但是比较滞后,跟不上时代了)

还有一种事实上的国际标准:

为什么会存在这样的差别呢?

很正常啊

你法律意义上有个老婆,你出轨了

这个TCP/IP在实际的原理体系结构中,网络接口层里面还包含两层

每一个模块具体做了什么如下图所示:

在数据链路层会添加帧头和帧尾,在物理层会添加比特流

HTTP

应用层:解决通过应用进程的交互来实现特定网络应用的问题

在浏览器地址栏输入某个网站的域名后就可以访问该网站的内容,这就是万维网www应用,相关的应用层协议是超文本传输协议HTTP

传输就是http是双向的,超文本就是不只是文本

HTTP请求相应过程

HTTP最突出的特点是简单灵活易于扩展,应用广泛,跨平台

也分持久性和非持久性链接

HTTP报文格式

 

 TCP

传输层比较重要的就是TCP和UDP

物理层数据链路层和网络层解决的是主机与主机间的通信

但是实际通信的是两个主机间的进程

这两个进程之间的通信的协议就是UDP或者TCP了

TCP是面向连接的,可靠的,基于字节流的传输层通信协议

 而UDP不需要保证可靠所以相对就简洁一点

二者区别:

 TCP三次握手建立连接

三次握手才可以阻止历史重复连接的初始化(主要原因)

三次握手才可以同步双方的初始序列号

三次握手才可以避免资源浪费

TCP四次挥手断开连接

关闭连接时,客户端向服务端发送FIN时,仅仅表示客户端不再发送数据了,但是还可以接收数据

服务器收到客户端的FIN报文时,先回一个ACK应答报文,服务端可能还有数据需要数据处理和发送,等服务端不再发送数据时,才发送FIN报文给客户端表示同意现在关闭连接

TCP可靠传输之流量控制

TCP是一个可靠传输的协议,那么怎么保证可靠呢?

保证数据可靠需要解决数据的破坏、丢包、重复、分片顺序混乱等问题,如果不解决这些问题,就无从谈起可靠性传输

TCP是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的

主要是重传机制、滑动窗口、流量控制、拥塞控制

流量控制是TCP提供的一种可以让发送方根据接收方的实际接收能力控制发送的数据量

TCP通过接收窗口变量来提供流量控制

接收窗口会给发送方一个指示(还有多少可用的缓存空间),发送端会根据接收端的实际接收能力来控制发送的数据量

TCP之拥塞控制

当网络拥堵时,如果发送大量 的数据包,可能会导致数据包时延,丢失等,这个时候TCP就会重传数据,但是重传又会导致网络的负担更重,就会造成更大的延迟和更多的丢包。。。

于是就有了拥塞控制,控制的目的是避免发送方的数据填满整个网络

为了在发送方调节所要发送的数据的量,定义了一个叫做拥塞窗口的概念

拥塞窗口cwnd是发送方维护的一个状态变量,它会根据网络的拥塞程度动态变化

只要网络中没有出现拥塞,cwnd就会增大

当网络中出现了拥塞,cwnd就会减少

只要发送方没有在规定时间内接收到ACK应答报文,发生了超时重传,就会认为网络中出现了拥塞

TCP之重传机制

重传机制有超时重传,快速重传和SACK方法

三者对比
机制核心逻辑重传触发条件优势局限性
超时重传依赖超时计时器超时未收到 ACK逻辑简单重传延迟高,无法处理连续丢包
快速重传依赖重复 ACK收到 3 个重复 ACK减少重传延迟仅能处理首个丢失的数据包
SACK携带已接收数据块范围结合重复 ACK 和 SACK 信息精准重传非连续丢包增加报文开销,实现复杂
http://www.xdnf.cn/news/1114381.html

相关文章:

  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • python 列表(List) vs. 元组(Tuple):什么时候该用不可变的元组?它们在性能和用途上有什么区别?
  • C++使用Thread实现子线程延时重发
  • 语言模型常用的激活函数(Sigmoid ,GeLU ,SwiGLU,GLU,SiLU,Swish)
  • 【论文阅读】基于注意力机制的冥想脑电分类识别研究(2025)
  • LeetCode第 458 场周赛题解
  • 字符串问题(哈希表解决)
  • 【论文阅读】Think Only When You Need with Large Hybrid-Reasoning Models
  • 【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5私有化部署保姆级教程与多功能界面窗口部署
  • 编译器优化——LLVM IR,零基础入门
  • 我做了一个windows端口占用查看跟释放工具
  • Spring AI 项目实战(十六):Spring + AI + 通义万相图像生成工具全栈项目实战(附完整源码)
  • linux-shell脚本
  • SpringCloud云间剑歌 第四章:藏经阁与信鸽传书
  • 打造你的专属智能生活:鸿蒙系统自定义场景开发全流程详解
  • package.json 与 package-lock.json
  • Redis缓存设计与性能优化指南
  • Web攻防-PHP反序列化原生内置类Exception类SoapClient类SimpleXMLElement
  • 分类问题-机器学习
  • 011_视觉能力与图像处理
  • 力扣面试150题--单词搜索
  • MySQL 分表功能应用场景实现全方位详解与示例
  • Flink学习笔记:整体架构
  • Docker(02) Docker-Compose、Dockerfile镜像构建、Portainer
  • 13. Flink 高可用机制简述(Standalone 模式)
  • 14.ResourceMangaer启动解析
  • 鸿蒙项目构建配置
  • LabVIEW智能避障小车
  • Http与Https区别和联系
  • [NCTF2019]Fake XML cookbook