目录
应用层
传输层
udp 协议
端口号
报文长度(udp 长度)
校验和
TCP 协议
确认应答
超时重传
链接管理
滑动窗口
流量控制
拥塞控制
延时应答
捎带应答
总结
我们第一章让我们对网络有了一个初步认识,第二章和第三章我们通过代码感受了网络通信程序。
而本章的 通信原理 进一步了解网络是如何实现工作的,本章主要以理论为主,本章的理论非常多,面试常考,工作中也会常用,同时也非常抽象。
我们之前提到过的:由于复杂的网络环境催生出了复杂的网络协议,我们将这些复杂的协议拆分成 多种小协议;再将这些小协议进行分类可以分成不同的层级。
我们这一章将重点介绍应用层和传输层,其他层了解即可。
应用层
我们这里简单介绍,后面介绍 http 协议的时候我们会重点介绍。
应用层直接和代码相关;直接决定了数据需要传输什么,接收方需要拿到那些数据,拿到后如何使用。
应用层这一层中现存着一些现有的协议,比如HTTP协议,也可以是自己写的协议;
我们最开始就聊到过微信发送消息的那个栗子,![](https://img-blog.csdnimg.cn/a0a5b723a3de48dca9ca720f574630ab.png)
这就是简单的看一看,实际上远比这个复杂的多,具体的如何实现呢?
需要根据需求去写:
比如我们的微信小程序:美团外卖
需要传输哪些信息(根据需求)
![](https://img-blog.csdnimg.cn/c231b0cefc7e4d2683473f35d43693fa.png)
具体需求按照啥格式来组织(随意约定)
具体的我们留在http 协议来细说。
传输层
再传输层中我们已经认识了两个协议 udp 和 tcp 协议。
我们先挑个软柿子捏,捏完软的我们再捏硬的。
udp 协议
我们先来看看udp 报文结构:
去网上copy 几张下来:
![](https://img-blog.csdnimg.cn/90a4b66f0db64c8fb9acc8665b935237.png)
这个是大部分计算机网络教材上的图,事实上这个图其实并不准确,我们来画一张实际的图:
![](https://img-blog.csdnimg.cn/3b5596d4b88546098fd7fec38daedb26.png)
- 伪头部 : 只是为了提取 IP 数据报中的源IP,目的IP信息并加上协议等字段构造的数据。在实际传输中并不会发送,仅起到校验和计算使用,因此称之为伪首部。
- 源端口号 : 一般是客户端程序请求时,由系统自动指定,端口号范围是 0 ~ 65535,0~ 1023为知名端口号。
- 目的端口 : 一般是服务器的端口,一般是由编写程序的程序员自己指定,这样客户端才能根据ip地址和 port 成功访问服务器
- UDP 长度 : 是指整个UDP数据报的长度 , 包括 报头 + 载荷,
- UDP校验和 : 用于检查数据在传输中是否出错,是否出现bit反转的问题,当进行校验时,需要在UDP数据报之前增加临时的 伪首部。
我们看到上述的报头都是两个字节:都是 0 ~ 65535;
端口号
源端口、源IP 表示数据来自哪里
目的端口、目的IP 表示数据要去哪里;
就像唐僧说的那样:贫僧自东土大唐而来,到西天拜佛取经。
我们的端口号一般小于 1024 的都别那些有名的大公司软件用了;像我们耳熟能详的MySQL 它也才是 3306 ;如果非要用其实也没事。
报文长度(udp 长度)
2个字节长度,也是 0 ~ 65535 也就是 64k 的大小,说大不大,说小也不算小。
为什么但是设计的时候,不设计大一些呢,这就是时代的局限了,换成当年,64k 已经非常大了,当时的电脑内存那才多少 M 啊;但是对于现在我们来说,64k 太小了,随便一个小插件都不知64k。
因为电子元件的发展,64k 对我们来说太小了,随便发一些数据都可能超过这个数字。
所以我在使用 udp 编程的时候,需要注意了,需要控制大小,不然超出这个大小就会出现一些不必要的问题。
校验和
在我们的网络传输过程中,并非那么的稳定,随时都会出现问题,例如:受强磁产的作用,辐射,或者其他物理环境影响,都会造成网络传输的不稳定。
我们都知道,路由器、交换机之间传输的是高、低电平,转换为 01 的二进制,那么在这些特殊情况就可能造成: 0 - 1 变为 : 1 - 0 ;我们把这种现象称之为 比特翻转。
所以,我们在此基础上提出了:校验和,就是用来判断一下目前传输的数据时候发送了错误;但是这个校验和不是 100% 正确的。
例如:
我们要去买菜:番茄、土豆、黄瓜、青菜; 一共是四种菜,我们买回来四种不一定正确,但是买回来不是 四种一定不正确。
- 校验和正确,数据不一定是正确的,
- 但是检验和如果不正确,数据一定是不正确的
校验和更多的用处不是“证实”,而是为了证伪,判断数据是不是错的
ok;说到这我们算是吧 udp 这个软柿子捏完了,接下来到了难啃的硬骨头:TCP / IP。
TCP 协议
我们之前讲到过:
TCP 协议的特点:
- 有链接
- 可靠传输
- 全双工
- 面向字节流
我们本章的重点在于 "可靠传输"
可靠不是说百分之百可靠,我们的可靠是尽可能传输过去,哪怕没有传输过去,起码需要让对方知道自己没有传输过去。
这个核心机制就来了:确认应答、超时重传 这个是确保可靠的核心!!!
确认应答
这个机制是实现可靠传输的核心;
举个栗子
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)