网络原理 一

网络原理

一.应用层:应用层和代码直接相关的一层,决定了数据要传输什么,拿到数据之后如何使用.应用层这里,虽然存在现有的协议(HTTP),但是也有很多情况,需要自己自定制协议.
约定应用层数据报,数据格式,就是在自定义协议
如何约定?
1.确定要传输那些信息(根据需求走)

打个比方:外卖程序,有一个核心功能,加载商家列表~~
请求:
用户id
用户的位置(经纬度)

响应:
若干个商家信息:
每个商家信息:
商家的名字
商家的图片
评分
类型

2.确定数据按照啥样的个数来组织(随意约定的)

网络上传输的,本质上都是0101,视为二进制的字符串~~
需要把上述这些信息整程一个字符串~~
比如 :
在这里插入图片描述
只要发送方安宅这套个数来组织数据,接收方按照这套格式来解析数据,两者能对的上,这样的格式就是 可行的!!!

实际开发在,有一些现成的格式,可以直接使用的!!!

一种典型的格式,xml 之前非常流行的格式,现在用的比较少,但是也还是经常遇到的。
这种格式是通过标签的形式来组织的
比如:
在这里插入图片描述
另外一种非常流行的格式,json
在这里插入图片描述
数据的组织方式,有无数种,只不过比较常见的是xml和json

二.传输层(核心)
学习一个协议,其中一个重要的环节,就是认识协议报文格式(具体怎么组织的这个数据)
UDP
UDP报文的格式
在这里插入图片描述
在这里插入图片描述
一个UDP报文最大长度,就是64kb
使用UDP编程的时候要注意udp数据报不能太长,否则会出问题
2.1校验和
校验和存在的应用就是用来判定一下,当前传输的数据是否出错

如果效验和不对,此时你的数据一定不对.
如果效验和对,但是数据也有一定概率是错误的!!
为了让效验和能够识别率更高一些,计算的时候通常会以数据内容作为参数来进行计算,数据内容发生变化,效验和也会变化

2.TCP
有连接:
在这里插入图片描述
可靠传输:TCP存在的初心!!最核心的机制!!
面向字节流:
在这里插入图片描述
全双工

2.1TCP如何实现可靠传输??
不是100%可以传过去!!(要求太高了),尽可能的传过去,如果过传不过去,发送方至少能知道自己没传过去
核心机制,在于接收方,收到或者没有收到,会有个应答
确认应答机制:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接收方就可以通过ack的确认序号,告诉发送方哪些数据以及收到了

2.2为啥网络上会出现后发先至??
什么叫做后发先制,打个比方 结婚时的接亲,头车还在路上,后面的车已经到了新郎家里.,叫“后发先制”这个时候就比较乱 往往都是后车到村口了等头车来了在进行整队,然后驶往新郎家,这样一个流程.
对于TCP来说自身也承担了这个整队的任务,TCP会有个接收缓冲区(一块内核中的内存空间),每个socket都有一份自己的缓冲区. TCP就可以按照序号针对收到的消息进行整队了(也是TCP序号的一个重要用途) 后续 应用程序对数据,读到的一定是有序的(和发送顺序一样的)
2.3 丢包也是网络上非常经典的情况
为啥会丢包??
网络上有一系列的交换机 路由器进行转发
在这里插入图片描述
如果中间任何一个节点,出现了问题,都可能导致丢包
每个设备,都是在承担很多的转发任务的
每个设备,转发能力都是有上限的!!
某一时刻,某个设备,上面的流量到达峰值,就可能会引起部分数据被丢包(概率性)

2.4超时重传机制(解决丢包问题)
如果包丢了,接收方就收不到了,自然就不会返回ack。
发送方就迟迟拿不到应答报文,等待一段时间后,还是没有收到应答报文,发送方就视为刚才的数据丢包了,就会重发一边
在这里插入图片描述
发送方对于丢包的判定,是一定时间内,没有收到ack
1.数据直接丢了,接收方没有收到,自然会不会发ack
2.接收方收到数据了,返回的ack丢了
发送方是区分不了这两种情况,只能都重传

这种情况下数据重复了怎么办??
TCP会给我们自动处理好,会在接收缓冲区根据收到的数据序号,自动去重,保证了应用程序读到的数据仍然只有一份!!!

连续丢包怎么办??
TCP针对多个包丢失,处理思路是,继续超时重传,但是每次丢包一次,超时等待的时间都会变长(重传的频率降低了)TCP绝对重传怕是没戏~干脆就摆烂了
连续多次重传,都无法得到ACK,此时TCP就会尝试重置连接(相当于尝试重连),如果充值连接也失效,TCP就会关闭连接 放弃网络通信了

一切顺利,使用确认应答保证可靠性,出现丢包,使用超时重传作为补充,这两个机制,是TCP可靠性的基石!!

2.5连接管理(TCP最核心的,网络原理最核心的考点)
TCP 建立连接:三次握手
TCP 断开连接:四次挥手
TCP是如何实现可靠性的:确认应答+超时重传

三次握手 :
握手(handshake)指的是通信双方,进行一次网络交互,相当于 客户端 和服务器之间,通过三次交互,建立了连接(双方各自记录对方的信息)关系

在这里插入图片描述
上述过程内核自动完成,应用 程序干预不了,等到 连接完成了,服务器accept把建立好的连接从内核拿到应用程序中
Syn称为 同步报文段,意思就是一方要另一方,申请建立连接
双方都确认了关系就建立起来了,连接建立完成!!!
四次交互三次握手

啥样的报文,算是syn报文??
在这里插入图片描述
如果一个TCP数据报,第二位和第五位都是1,则当前这个报文是SYN+ACK

为啥要三次握手,起到了什么样的效果,达成了什么目标呢???
三次握手这个过程,本质上是投石问路,验证了客户端和服务器,各自的发送能力和接收能力是否正常!!
这个角度看,三次握手和可靠性,也是有关系的(但是肯定是没有 确认应答和超时重传更重要)
确认了客户端和和服务器 各自的发送能力和接受能力都正常!!这就是后续可靠传输的基石!!!

2.5断开连接,四次挥手(和三次握手非常像)
通信双方,各自给对方发送给一个FIN(结束报文),在各自给对方返回ACK
建立连接,一定是客户端主动发起来
断开连接,客户端和服务器都有可能先发起
在这里插入图片描述
Ack和fin有一定概率合并成一个的!!!但是通常情况下,不能合并的!!

在这里插入图片描述
2.6 TCP要保证的不仅仅是可靠性,还有效率!!
提高可靠性,往往意味着,损失效率!!
在这里插入图片描述
此时A这边花了大量的时间在等带ACK,想提高效率就需要缩短时间,批量发送数据了!!
一次发多条数据,一次等多个ack

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值