白话解释TCP协议:想知道TCP?我想先让你知道什么是传输层和UDP协议
传输层和运输层本质上是一个指代,叫法不一样,为了和附加图片保持匹配说明,有的时候表述不同
TCP协议是目前不论是研究生入学考试还是企业面试都非常喜欢考察的一个问题。
首先明确:TCP协议存在于传输层中
什么是传输层,它要来干什么?
传输层(或者叫运输层),顾名思义,数据传输需要的东西。
传输层位于应用层下面,住在四楼:
我们知道,下层要为上层提供服务,上层依赖下层的服务,传输层就是为应用层提供一个数据传输的服务,好好伺候应用层。同样,住在三楼的网络层也要好好伺候传输层
如果把应用层描述为一个商家,那么传输层就是一个快递公司,知道这个快递要往哪去怎么去
传输层要来干什么呢?
首先,他像一个特务一样会跟踪数据的一举一动:这叫做:跟踪会话
其次,它很喜欢分模块处理:这叫做:分段重组和多路复用
复用:不同的应用进程可以用同一个传输层协议(比如都可以用TCP协议)
这里给出一个比较准确的解释
分用:接收方传输层根据端口号分用到不通的应用层进程
复用:发送方不同的应用层进程根据不同端口号复用到同一传输层中
总而言之,准确来讲:传输层为相互通信的应用进程提供了逻辑通信
不理解?没关系,往后慢慢看
好了好了,我知道运输层是啥了(假装知道),那UDP是啥子嘛?
你很不可靠,但是你很爽快:UDP
UDP是啥,是和TCP对标的一种不可靠的传输服务协议。它叫用户数据报协议(User Datagram Protocol)
在以前有一期博客里面说过,TCP在发文件之前是要去确认的,但是UDP就是直接发。
网络的体系结构与协议分层
就好比说,你想让小明去办事,小明很爽快得答应了,能不能做好就不知道了
所以UDP可谓是 最简单的Internet协议
它允许数据的丢失!!
所以我们知道,那些什么传送重要复杂文件、什么传输重要信息、密码什么的肯定不能是UDP。
但是耐不住它快
啊
所以UDP常用作即时通讯,比如QQ、WeChat发消息用的就是UDP。
正式见个面吧:UDP
UDP它快,主要是它懒
- UDP不想去搞社交的:UDP懒得去和目标主机去先确认在不在然后再发文件,这样减少了各种资源开销,减少时延。
- UDP尽最大努力偷懒:应用层给什么样的数据,就算有问题UDP懒得去修改什么参数,直接发,不管。
- UDP只对报文有好感:应用层下来的数据,UDP附加一个合适的报文就继续往下传输,懒得管那么多。网络层上来的数据,UDP也就直接去除掉那个报文就可以了。
- UDP没有什么拥塞控制:外面是世界和UDP无关,管它堵不堵,我UDP照样发,丢失数据就丢了吧,那是楼下的责任~
- UDP头小:可能这娃子脑容量不行,首部只有8个字节,难怪做事简单。
UDP啊UDP,你像极了我,又懒又快。
UDP的颜值
8个字节就是UDP整个脸的大小了,没事,浓缩的都是精华。
UDP脸上有四个器官,每个器官占2个字节
- 源端口:UDP家里的门牌号,有的时候也懒得给,就让它全0
- 目的端口:去哪总要告诉楼下的吧
- 长度:UDP用户数据报长度,最小的是8,就是首部长度。哪有发东西不告诉对方有多大的
- 检验和:检验用户数据报是否有错,有错就丢弃。也不是100%能够检验出来。
当四楼的网络层给五楼传输层UDP数据报的时候,根据首部的目的端口,把UDP数据报发到相应的端口,最后交到应用进程上:
无与伦比:检验和
校验和是网络通信的查错方式之一,广泛应用于传输层和网络层,发送方将需检验的数据按照一定的大小求和,得到的和取反得到为校验码
当这个检验和发挥出作用的时候,会给UDP添加一个伪首部,这个伪首部检验完了就没了,虚虚实实实实虚虚。
这个伪首部就像给UDP这张脸带了一顶帽子,因为UDP的脸太简单了,带个帽子能够再帽子上面显示一些信息呀,比如就像我们的帽子如果是绿的………
这样就得到了一个新的UDP用户数据报,就成了脸+帽
伪首部里面有源IP、目标IP、0、17、还有UDP的长度
从四个字节的IP地址可以看出,这只有IPv4才有的特性
这是一个拓展,怎么算呢
这个17啊、全0啊都是自动生成的固定的。UDP的协议字段的值就是17。
把这些所有的数据用二进制表示再加起来取反,和检验和相加,如果全都为1 ,那么检验成功,如果不唯一那就有错了,就要丢包
这样检验的问题是,万一比如0001和0010变成0011和0000,加起来就检验不出来了。但是加法,快。
我算是明白了,UDP就是快
马上就会进入TCP的阶段,但是还是想把一些基础概念弄清楚。 好事多磨,不急
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15046254.html