TCP/IP模型中的重磅嘉宾TCP--尚文网络奎哥

我们知道现在常用的网络参考模型是TCP/IP参考模型,这个参考模型是从OSI参考模型演变而来,由于对TCP和IP两个协议使用比较广,因此叫TCP/IP参考模型。那么我们今天来了解下传输层协议TCP以及UDP
先来了解以下TCP协议:
TCP协议总体是一个面向链接的可靠性传输。
所谓的面向链接指的是在双方发送数据之前会先通知以下对方,就比如我要给张三发送一个快递,我会先打电话给张三确认以下对方能不能收到信息,对方回复能收到,我才会将这个快递发送出去,可靠性传输指的是在传递的过程中,TCP会保证这个信息对方能完成的收到,注意这个完整性是指最终结果,在传递过程中丢包是不可避免的,但是丢包接收方会通知发送方,发送方此时会进行重传。比如我刚才发给张三的哪个快递可能中间因为一些原因损坏了或者丢失了,张三可以通知我,我就会重新给张三再发一份。
那么TCP的详细运作过程是怎么样的呢?
我们将TCP的传递过程分为三个部分:数据传输前、数据传输中、数据传输后

数据传输前-三次握手

由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号a为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0 ;
接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;
PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。
在这里插入图片描述

三次握手就是在确认通信的双方是否能接收到对方的信息,所以通过三个包来确认这个事情。
我们可以认为sys是一个询问的包,ack是一个典型的确认信息
现在我们假设我要和张三传递数据,但是我不会上来直接传递我需要先确定对方能不能接收,因此进行三次握手:

Sys(能听见我说话吗?)
Sys+ACK(可以听见你说话。你能听见我说话吗?)
ACK(我能听见)

可以看到通过发送三次信息通信的双方都已经确定可以接收对方的信息,那么下面就可以正常发送数据了。
至于我们看到的sys后面的seq(序列号)=a,以及下面的ACK seq=a+1,可以认为是用来做配对的确认这个确认信息是回复哪个sys

数据传输过程

数据分段和重组

保证所传输数据的大小符合传输介质的限制要求,确保不同应用程序发出的数据能在介质中多路传输
在这里插入图片描述

分段完成后每个小段都以独立的身份再网络中进行传输,那么就有可能会出现到达的顺序不是发送的顺序,如果直接按照这个顺序呈现给用户就会出现乱序的问题,就好比原本是“我请你吃饭”发送过去因为乱序问题变成“你请我吃饭”,这肯定是不行的,因此我们会在TCP的报头上加上一个序列号的东西,就是标识了他们的顺序1、2、3、4。到达对方后按照这个序列号进行重组即可。
在这里插入图片描述

数据确认和重传

刚才我们说了序列号的作用,在传递的过程中我们一次可能发送多个包过去,那么如何确认对方有没有接收数据呢,这个在TCP的可靠性中还是非常重点的,这个时候就有了我们的 确认号。
我们这个确认号可以称之为期待确认号,如下图所示,我们一次发出去两个数据,这两个数据序列号是1-1500和1501-3000(注意:序列号的初始值是随机的),如果接收方两个信息都接收下来了,那么确认号就是3001,这个就是接收方需要接收的下一个数据,所以叫期待确认号。
假设我们1501-3000这个包在传递过程中丢失了也就是接收方只收到了1-1500,那么确认号就是1501,发送方收到这个确认就知道有信息丢失了,那么就会将1501重传给接收方。
在这里插入图片描述

窗口大小

TCP通过滑动窗口机制来控制数据的传输速率。
在这里插入图片描述

  1. 在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。
  2. 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。
  3. 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
  4. 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。
  5. 发送方根据接收方当前的Window大小发送相应数量的数据。
    那么从窗口大小我们可以看出来,双方通过窗口大小将流量传递的速率保证在一个双方都可以接受的速率上。那么我们常见的一些流控设备其实也会调整这个窗口大小来影响我们通信的速率,是我们下载之类的流量变成非常的慢。
    附TCP报头结构,上述所用到的字段都在报头里面
    在这里插入图片描述

数据传输后

数据传输完成后是需要断开链接的,每个主机建立链接数目都是由限制的,因此传输完数据就需要断开链接。
在这里插入图片描述

Fin可以认为表示这边已经传输完成,ACK老样子还是确认,只不过这次分成了四次完成交互。
OK,TCP传输这就完成了,那么UDP呢?

UDP数据传输

UDP是一个无连接的尽力而为的数据传输,报头结构也特别简单。
在这里插入图片描述

可以看出来UDP报头中没有序列号、确认号、窗口大小等字段,也就是说UDP没有我们上面所说的分段重组、重传和窗口大小等机制,UDP只是简单的把数据按照先来后到的顺序展现给接收者,但是这也保证了它的好处就是快。

总体来说TCP的好处是可靠,UDP的好处是快,那么当我们传输一个流量如果追求可靠性就使用TCP,比如:邮件、下载等等。如果我们传输一个流量追求的是速度,要求低时延,那么就可以使用UDP,比如:语音、视频、游戏等。

加群一起聊技术,有啥问题可以直接分享交流QQ群:316317765,也可以关注下公众号,后期会有更多资料发布。
-----尚文网络奎哥原创
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值