网络原理

UDP

特点:无连接 不可靠传输 面向数据报    全双工

报文格式:

UDP数据报=UDP报头+UDP载荷(应用层数据报)

                         |

源端口   目的端口    报文长度   校验和

TCP

特点:有连接   可靠传输  面向字节流     全双工

 作为传输层协议,首先就需要能表示端口号是啥。

4位首部长度:        指的是报头的长度.不是总tcp报文的长度.

选项:optional  可以通过选项,来选择加长或者不加长。

不加长的时候最少为20.

长度可以变长,最长可以变成60个字节。((首部长度的单位是4个字节)。实际的首部长度是要这个数字的基础上*4.所以为15*4=60)

保留6位

UDP报文长度使用2个字节表示。不能扩展

但是TCP提前申请好一块空间,即是保留位,为了后面发展拓展功能的时候就可以应用这个保留位了。

TCP协议的核心机制

1.确认应答机制

TCP协议来说,要要解决一个很重要的问题,可靠传输.(你发送方能够100%的把数据发送给接收方但是会尽可能.尤其是能够让发送方知道,接收方是否收到.).

在日常生活中,对人打招呼的时候,另一个人一般会回一个招呼,这样回复的应答数据就可以称为“应答报文”。

就是应答报文(1bit)。

但是会出现一种问题,当我们早期发消息的时候会有消息延迟,导致我问你了两个问题,你回复两个问题的时候会导致误会。

在网络传输中也会出现这种情况-》后发先至。

这样的问题在我网络通信的时候经常会出现,所以我们就要对传输的数据进行编号,这样就能让应答报文和发送的数据编号,对应起来,

 给应答报文使用的(ack为1的时候才有效)这样的数据就可以根据确认序号区分出要应答哪个上面的报文了,

实际真实的tcp的序号不是按照“一条两条”方式来编号的而是按照“字节”来编号的.

此处报头中写的序号的数值就是载荷部分第一个字节的序号。

每个字节都有编号,字节的编号是连续递增的。

1)对于B来说,<1001的数据都已经确认收到了,

2)B再向A索要从1001开始的数据~~

可靠传输之所以能达成,主要就是依靠“确认应答”机制。

在日常生活中,每个交换机或者路由器是有上限的,当一个机器转发的信息量过多,合作社超出自己能处理的极限的时候,就会把接下来多出来的信息直接丢弃。

2.超时重传

A通过是否收到了ACK(b返回信息)来区分是否出现了 丢包的情况(A等待一定时间后,时间超过了某个阈值,没有收到ACK,就认为出现了丢包现象):

(1)就是A发送信息,B没有收到。

可以重新传输

(2)A发送信息,B接收到了,但是返回响应的时候,A没有收到。

如果B对相同的数据进行两个响应的时候就会出现bug,所以B会进行去重操作。通过发送的序号来去重。

B的内核态中有接受缓冲区,那会把接受的数据放入一个阻塞队列中,然后根据数据的序号来判定这个数据是否在队列中存在(或者曾经在队列中存在过)只要存在过,这个新的数据就不会进入队列,而是直接丢弃。

进入用户态:

调用accept拿到clientSocket拿到InputStream进行read

队列中的数据就会进入到用户态,但是他的序号会保存在这个阻塞队列中继续去重。

在其中也会根据序号自动来排序,让序号小的,在前头,序号大的在后头,并且数据和数据之间的序号始终都是连续的,这样就能提高效率。

超时重传,超时时间,是多少呢?

注意,这个时间,不是固定数值,而是会动态变化随着重传轮次的增加,会变的越来越长~~

这样重传的频率会越来越低,

如果达到一定重传次数就会尝试重置连接。

触发一个“复位报文”尝试重置连接(相当于连接重新开始)

重置就是通信双方清空之前tcp传输过程中接受缓冲区里里的数据啥的都不要了)

但是如果网络出现了严重故障,重置也没有用,就会断开连接 。

就会把信息删除掉。

TCP可靠传输,全靠确认应答超时重传这俩机制支撑着。

3.链接管理

建立连接的流程:三次握手  

两个机器,一见面,然后就进行打招呼,打招呼过程中,没有实质上的数据交互只是为了打招呼而传输一些数据

断开连接的流程:四次挥手

在握手和挥手的过程中,传输的网络数据报,不携带任何业务上的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值