【计算机网络】(3)——TCP机制,滑动窗口,流量控制,拥塞控制,延时应答,捎带应答,沾包问题,网络层

目录

Cookie和Session之间的理解

传输层TCP/UDP:

UDP协议

UDP校验和(检验和)

基于UDP的应用层协议

TCP最核心机制

三次握手建立连接,四次挥手断开连接

四.滑动窗口(提高传输效率)

五.流量控制

六.拥塞控制

七.延时应答(提高传输效率)

八.捎带应答(提高传输效率)

九.面向字节流

粘包问题

十.异常情况

TCP最终目标

网络层

特殊的IP:


Cookie和Session之间的理解

Cookie只是浏览器存储数据的 一种方式(客户端概念)

Session是服务器进行描述用户身份信息的方式(服务器端概念)

实现Session机制的过程中(程序员手动实现),通常要把Session id放在cookie中保存。

应用层 HTTP/HTTP/HTTPS/FTP/SSH                     应用程序相关

传输层 UDP/TCP

网络层 IP                                                                   操作系统内核

数据链路层 以太网

物理层 以太网                                                           硬件和驱动程序负责

传输层关注的是 点对点 之间的传输

只需要关注者和接受者就可以了,中间的传输过程一概不管

传输层TCP/UDP:

UDP 与TCP都是全双工

全双工:通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。可以同时进行信号的双向传输。指A-->B的同时B-->A)。是瞬时同步的。

  • UDP是一个比较简单的协议(通信效率更高一些)

1.无连接

2.不可靠

3.面向数据报

  • TCP是一个比较复杂的协议

1.有连接

2.可靠传输 (发送者能感知到失败)

3.面向字节流

UDP协议

UDP协议格式

端口号传输层的概念,作用就是区分这个数据要交给那个程序来处理

HTTP默认端口号为80

UDP的报文长度:最多16位(64k),这是一个较小的数字

这就限制了应用层协议的数据长度,一旦数据长度超出了UDP的表示范围,就会出现问题

可以在应用层通过代码把应用数据拆分成多个数据报,在使用多个UDP数据报来分别发送

代码实现的成本大大提高了

UDP校验和(检验和)

比较简短,同时最好能和内容相关联

UDP中使用的是CRC循环冗余校验的方式

uint16_t checksum = 0
for(一次遍历数据包的每个字节){
    checksum += 当前字节的值
}

发送者在发送之前先计算了一个校验和checksum1就把数据和checksum1 一起发送到对端。

接收端也按照相同的规则计算校验和checksum2.

对比checksum1与checksum2是否相同

基于UDP的应用层协议

NFS: 网络文件系统

TFTP: 简单文件传输协议

DHCP: 动态主机配置协议

BOOTP: 启动协议(用于无盘设备启动)

DNS: 域名解析协议

TCP最核心机制

1.可靠传输

2.尽量提高传输效率

TCP的相关机制有很多,都是围绕上述两点展开的

一.确认应答(可靠性的核心机制)

对于序号来说,按照每个字节的方式来编号的

确认序号来说,表示当前序号之前的数据已经正确收到

接下来对端应该给我发送确认序号开始的数据

二.超时重传(可靠性的核心机制)和确认应答相辅相成

如果对方没有确认应答,此时隔一定时间之后,就需要重复

传输这样的数据,重传是为了进一步的降低丢包的可能性

重传的间隔时间采取的是一种比较悲观的态度,等待时间越来越长

如果达到一定的次数之后对方还没有响应,就断开和对方通信的连接。

如果是是应答数据包丢失(ACK),同样会超时重传,此时就导致接收方收到了两份相同的数据。TCP会根据序号来自动去重

三.连接管路

建立连接的意义:(也是可靠性的一部分)

1.双方先试探下对方是否适合和我进行通信

2.双方可以协商一些重要的数据 序号从几号开始

三次握手建立连接,四次挥手断开连接

双方各自向对方发送

三次握手中涉及到的状态变化:

1.LISTEN状态(服务器)

2.ESTABLISHED状态(客户端/服务器):

四次挥手的过程:

双方各自向对方发送FIN,再各自向对方发送ACK

中间的两次交换,可能合并成一个

四次挥手的状态转换:

1.CLOSE_WAIT:收到第一个FIN的一方进入LIOSE_WAIT,是为了等待代码中调用 关闭 方法

如果你发现服务器上出现大量的CLOSE_WAIT状态,意味着什么?意味着代码有bug,忘记调用close方法了

2.TIME_WAIT:主动断开连接的一方进入TIME_WAIT状态,存在的意义是为了一旦最后一个ACK丢包,还有机会进行重传

TIME_WAIT会存在一定的时间,在超出这个时间之后,TIME_WAIT状态才会真正消失,释放对应的连接

四.滑动窗口(提高传输效率)

窗口的含义是:不等待ACK的情况下最多发多少数据

滑动的含义:每次收到ACK数据的同时,就继续往后发下一组数据

如果窗口越大,传输效率越高

窗口也不能无限大,如果窗口太大可能会影响到可靠性

滑动窗口中如果丢包,采用快速重传的方式来进行重传

快速重传本质上就是超时重传,只不过,重传的时候没有拖泥带水,只重传了真正丢包的数据

五.流量控制

窗口越大,传输效率越高,但是窗口也不能无限大。如果窗口太大,可能接收端,处理不过来

如果生产速度超过了消费速度,接收缓冲区的内容就会越积越多,达到一定程度缓冲区满了,此时在传输的数据就会丢包

使用接受缓冲区空间大小,用这个指标衡量接收端的处理能力

通过这个指标来控制发送端的窗口大小(发送速度)

接受端的缓冲区空余空间大小,作为TCP协议报头中的窗口大小,这个值就是发送端的滑动窗口大小的一个“建议值”

六.拥塞控制

滑动窗口的窗口大小不能无限大,即使接收端处理速度很快,也可能因为网络环境不佳导致数据丢包。

最终的滑动窗口大小是由 流量控制 和 拥塞控制 共同决定的。

拥塞窗口:拥塞控制机制所建议的窗口大小,从一个比较小的数字开始,如果网络畅通,放大窗口大小,如果网络丢包,缩小窗口大小

滑动窗口的最终值就是 流量控制 的窗口和 拥塞控制 窗口的较小值

慢开始:刚开始传输的时候拥塞窗口设置的小一些。

七.延时应答(提高传输效率)

在可靠性的基础上,尽量提高窗口大小。

也是和滑动窗口以及流量控制相关

流量控制中需要在ACK中反馈接受接受缓冲区剩余空间的大小。此时采用的策略是,收到数据不立刻返回ACK,而是等一会。等的过程中,程序就能消费一些缓冲区中的数据,从而导致反馈的窗口大小就要更大一些。

八.捎带应答(提高传输效率)

建立在延时应答的基础上的

内核反馈ACK的实际和程序反馈响应的时机合二为一。通过同一个数据报同时带上两方面的信息。

结束报文段

ACK是由内核控制

FIN是由用户代码控制的,执行到socket对象的关闭方法的时候,才会发送FIN

九.面向字节流

粘包问题

由于面向字节流读取数据方式没有具体的约定,很难从接收缓存区中直接获取到一个完整的应用层数据报

解决粘包问题只能从应用层角度入手

只要在应用层协议设定的时候,明确包的边界就可以了

1.指定分隔符

2.指定包的长度

十.异常情况

1.程序异常结束(没有影响,四次挥手正常完成)

2.系统关机

3.主机掉电/拔网线

a)掉电的是接收方,发送方会触发超时重传,尝试重新建立连接,彻底释放连接

b)掉电的是发送方,接收方如果一直收不到数据的话,达到一定时间之后,就会给对方发送一个“心跳包”,如果没有心跳了,就会重新尝试建立连接,如果连接建立失败,彻底释放连接。

TCP最终目标

1.可靠性(主) 确认应答/超时重传/连接管理

2.传输效率(次)滑动窗口/快速重传

1.流量控制

延时应答

2.拥塞控制

粘包问题不是TCP的问题

粘包问题不是TCP自身的问题,是面向字节流导致的一个问题,和应用层的代码直接相关

网络层

IP协议(物流公司)

1.地址管理

通过一个整数来表示一个地址,IP地址

IPV4一个IP地址是一个32位的整数

IP地址不够用的问题

a)动态分配IP 某个主机上网,就分配IP,不上网,就不分配

b)NAT机制,很多主机共用同一个IP地址路由器(NAT设备根据端口号来进一步区分数据交给那个主机)

c)IPV6彻底解决问题

使用点分十进制来表示ip地址

192.168.1.100

 

网段划分:IP地址的前半部分划分成网络号,后半部分划分成主机号

网段划分是为了组建不同的局域网,路由器来链接不同的局域网。同一个局域网中的若干设备,网络号相同,但是主机号不相同

两个相同的局域网,网络号一定不相同

 

/24表示子网掩码

子网掩码也是一个32位的整数,前半部分都是1后半部分都是0

子网掩码按位与上IP地址,就得到了网络号

特殊的IP:

将IP地址中的主机地址全部设为0,就成了网络号,代表这个局域网;

将IP地址中的主机地址全部设为1,就是广播地址,用于给同一个链路中相互连接的所有主机发送数据包;

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1;(表自己)

IPV6

2.路由选择

相当于地图软件的导航功能

数据链路层

更贴近底层

数据链路层更关注两个相邻节点之间如何传输数据

ARP协议:IP地址 --->MAC地址之间的转换

MTU:一个数据链路层的数据帧所搭载的数据最大长度

以太网的MTU1500字节

对于IP协议的影响:会导致IP数据报产生分包

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值