计算机网络基础(2)

1.传输层

​ socket—>和传输层是密切相关的

​ 传输层负责端到端之间的传输,只关注起点和终点

​ 起点:源ip/源端口

​ 重点:目的ip/目的端口

​ ip地址是一个32位的整数,IP协议中来描述的(网络层的概念)

​ 端口号:区分一台主机上的哪个程序,是一个16位的整数(传输层的概念)

2.UDP

UDP:很难表示一个很大的数据,长度上限是64kb

​ 源端口:16位

​ 目的端口:16位

​ UDP长度:16位

​ UDP检验和:16位

​ UDP校验和使用了一种很简单粗暴的CRC冗余校验,取每个字节,把每个字节的数据依次循环想加,得到一个最终的数字,就是校验和。

​ 冗余:加强了可靠性,但是降低了数据的一致性

​ 接收端按照同样的规则再次计算校验和,和发送端的校验和进行对比,如果数据一致,就可以认为数据没有发生错误。

​ MD5:字符串哈希算法。

​ UDP特点:

​ (1) 无连接

​ (2) 不可靠

​ (3) 面向数据报

​ (4) 全双工

3.TCP

​ TCP特点:

​ (1) 有连接

​ (2) 可靠传输

​ (3) 面向字节流

​ (4) 全双工

​ TCP的设计核心:(1)可靠性(发送者能知道自己发送是否成功)

(2)在保证可靠性的前提下尽量提高传输效率

可靠性:

(1)

  • 确认应答:保证可靠性的核心机制
  • 为了区分当前是应答哪个数据,需要引入序号和确认序号的概念
  • 序号是给每个字节都编了个号
  • 确认序号表示的是当前序号之前的数据已经都收到了,同时也意味着向发送端索要当前确认序号开始的数据

(2)

  • 超时重传:也是可靠传输中最核心的机制
  • 传输一条数据没有确认应答的时候,等待一段时间,然后进行重传,重传可能恢重复若干次,重传的次数越多,丢包的概率也很就越来越小,重传的等待时间间隔,也在依次变长

(3)

  • 连接管理:三次握手建立连接,四次挥手断开连接

    建立连接的意义:

    ​ 1.双方各自试探对方看看对方是否适合和我建立连接,双方的读写数据的能力。

    ​ 2.双方可以在建立连接过程中协商一些必要的数据(TCP的序号的基准值)

    三次握手的具体过程

    客户端先发起一个建立连接的请求(SYN同步报文段),服务器收到SYN之后会立刻返回一个确认报文段ACK,同时回复的这个ACK也是一个SYN,客户端收到SYN后再返回一个ACK

​ 三次握手中,中间两次操作百分之百都是合在一起的

​ 四次挥手中,两次操作可能合在一起,也可能不合

​ 涉及到的重要状态:

​ (1)LISTEN状态,服务器端的状态,表示手机开机,信号良好,随时可以有人和你建立连接

​ (2)ESTABLISHED状态:表示别人给你打电话,你接通了,连接已经建立完成随时可以通信了

四次挥手断开连接

​ 一收到FIN由内核立刻就回复,程序中调用socket对象的close方法的时候才会发送FIN

​ 涉及到的重要状态:

​ (1)CLOSE_WAIT:等待程序调用close来完成最终的断开连接过程.

​ 如果一个服务器上出现大量的CLOSE_WAIT是啥情况?

​ 其实就是代码有bug,代码里的close忘记调了,或者没有执行到

​ (2)TIME_WAIT:虽然此时程序可能都已经结束了,但是还是要保持连接为TIME_WAIT状态一段时间,因为发送的最后一个ACK可能会丢包

​ TIME_WAIT等待时间是2MSL,MSL成为网络上两个主机之间数据传输的理论最大时间,在CentOS7 上默认是60秒

4.滑动窗口

​ 窗口:不等待ACK的情况下批量发送多少数据

​ 滑动:每次收到一个ACK之后,就依次发送下一条数据,等待ACK的数据区间就往后移动。

​ 窗口越大,传输效率就越高。

​ 如果窗口无限大,那么接受端可能处理不过来,网络环境也可能承载不了

​ 所以要保证可靠性的前提下,窗口越大越好

  • 如果在滑动窗口中丢包了咋办?

如果是ACK丢了,没事,不用管,因为确认序号表示的含义是当前序号之前的数据都收到了,后一个ACK就能涵盖前一个ACK的含义.

如果是数据丢了,接受端就反复尝试索要该丢掉的数据,重复若干次之后,发送端就回认为丢包。并重传对应的数据,而对于已经发送成功的数据,则没必要重新传输一遍(快速重传)

5.流量控制:限制滑动窗口的一种机制

​ 根据接收端的处理能力来进行限制

​ 接收缓冲区剩余空间越大,就认为处理能力越强

​ 接收缓冲区剩余空间越小,就认为处理能力越弱

生产者消费者模型

一:一个交易场所

二:两种角色,生产者/消费者

三:三种关系:生产者和生产者之间的互斥关系

​ 消费者与消费者之间的互斥关系

​ 生产者和消费者之间的同步互斥关系

6.拥塞控制:根据网络拥堵情况,来限制发送端的发送频率

​ 试探式的方式,刚开始的时候,使用比较小的滑动窗口,如果这个时候没有丢包,说明网络很通畅,增大滑动窗口,如果发生丢包,说明网络可能拥堵了,见效滑动窗口。

​ 发送端真实的滑动窗口大小=min(流量控制中的窗口大小,拥塞窗口)

7.延时应答:提高传输效率的方式

​ 尽可能的提高窗口大小

​ 延时应答导致延时时间中,接收端的程序已经处理了一部分的数据,此时ACK中的窗口大小就更大了。

8.捎带应答:在延时应答的基础上,再提高传输效率

​ 延时应答的基础之上,把应用程序发送的业务数据和系统发送的ACK数据合二为一

总结:(1)可靠性—>确认应答,超时重传,连接管理

​ (2)传输效率—>滑动窗口—>(流量控制—>延时应答—>捎带应答,拥塞控制)

9.面向字节流
10.粘包问题(面向字节流导致的问题)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值