【Java 基础 15】计算机网络的五层协议


五层协议模型中,每个层各自的作用

应用层

文件传输,电子邮件,聊天软件,视频播放等各种软件应用,常用的协议有 HTTP,FTP,SMTP,DNS,Telent等, 主要的作用是产生和解析数据报文;


传输层

面向连接的TCP协议和无连接的UDP协议,对数据报文在链路上传输进行控制(传输层建立端口到端口的通信);

1. TCP是面向连接的,可靠的,基于字节流的通信协议,进行数据通信之前需要三次握手建立连接,UDP协议不需要建立连接即可发送数据。

2. TCP有确认机制,丢包可以重发,保证数据的正确性;UDP不保证正确性,只是单纯的负责发送数据包。

3. TCP协议可能会对大数据包进行拆分,并且在接收方进行重组数据包操作;UDP协议是面向报文的,不会进行分片和重组,所以需要注意传输的报文大小。

4. 网络包中的TCP头部为20个字节,UDP头部只有8个字节。

建立TCP连接:

客户端主动给服务端发送SYN报文=1和一个序列号Seq=X 表示申请连接(可以连你吗),客户端从CLOSE状态进入SYN_WAIT状态->

当服务端接收到客户端的申请后,给客户端发送SYN报文=1,和确认标志ACK=X+1(Seq+1),并发送一个序列号Seq=Y,表示同意连接(可以连),同时服务端从LISTEN状态进入到SYN_RSVD状态 ->

当客户端收到服务端的同意连接后,客户端从SYN_WAIT状态进入到ESTABLISHED状态,发送确认标志ACK=Y+1(Seq+1),并发送一个序列号Seq=Z,表示连接(连上啦),服务端收到报文后,服务端从SYN_RSVD状态进入到ESTABLISHED状态

为什么要三次握手?

假如两次握手我们设想一下,客户端发送申请后,接收到服务端的反馈,但由于不可抗力客户端不去连接服务端了,而服务端以为客户端已经连接了,给客户端发送数据,由于客户端没有反应,服务端以为客户端没收到,不断重新发,就形成了死锁。

关闭TCP连接:

客户端主动给服务端发送FIN报文=1和一个序列号Seq=X 表示申请关闭连接(我想关了),客户端从ESTABLISHED状态进入到FIN_WAIT_1状态->

当服务端接收到客户端的申请后,发送确认标志ACK=1,并发送一个序列号Seq=X+1(Seq+1),表示同意关闭(好的,但等一下,等我发完/收完缓冲区的数据)服务端从ESTABLISHED状态进入到CLOSE_WAIT状态 ,客户端接到报文后,客户端从FIN_WAIT_1状态进入到FIN_WAIT_2状态->

操作完缓冲区的数据后,服务端接着发送FIN报文=1和一个序列号Seq=Y,表示可以关闭(现在可以关了),服务端从CLOSE_WAIT状态进入到LAST_ACK状态,->

客户端接收到服务端的可以关闭标志后,发送确认标志ACK=1和一个序列号Seq=Y+1(Seq+1),表示关闭连接(关掉啦)客户端从FIN_WAIT_2状态进入到TIME_WAIT状态,随后进入到CLOSE状态, 服务端收到报文后,服务端从LAST_ACK状态进入到CLOSE状态

为什么要四次挥手?

在三次握手机制上,增加一次服务器的反馈,是为了确保正在传输的数据完成传输。当客户端给服务端发送FIN=1表示客户端不再给服务端发送新数据了,但是数据可能还在缓冲中,要确保等服务器接收完,收到服务端的FIN=1标志, 才保证两端都没有数据流动了,这时才可以关闭。那为什么服务端发送FIN标志之前要发送ACK确认标志勒,因为要让客户端知道服务端收到关闭请求了,让客户端安心等待,不然客户端会以为服务端没有接到请求,继续给服务端发FIN的。

 

断开连接过程中,客户端等待2MSL, 从TIME_WAIT状态进入CLOSE状态。MSL:Maximun Segment Lifetime, 表示最大报文生存周期,任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。客户端等待2MSL是为了防止最后一次ACK包没有被正确的传给服务端,服务端会再次发送FIN信号。

 

TCP协议的拥塞避免算法

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方来得及接受,而拥塞控制是为了降低整个网络的拥塞程度

发送方需要维护一个叫做拥塞窗口的状态变量。注意拥塞窗口与发送方窗口的区别,拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

拥塞避免算法主要有如下两种:

1. 慢开始和拥塞避免,先尝试发小数据,在没有出现拥塞的情况下主动加大窗口,让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,当拥塞窗口大于门限时,执行拥塞避免算法;

2. 快重传和快恢复:快重传算法要求接收方每收到一个失序的报文段后就立即发出重复确认,重传丢失的信号,然后再调整门限和拥塞窗口,执行拥塞避免算法,


网络层

协议有IP,ARP,路由协议等,是对数据报文进行地址寻址的协议(建立主机到主机的通信,实现网络互连,堵塞控制等功能);

首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议(地址解析协议)查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。完成这个路由协议的物理设备就是路由器。


数据链路层

协议有ARP,RARP,PPP等

以太网协议规定,接入网络的设备必须安装网络适配器,即网卡,数据包必须从一块网卡传送到另一块网卡。

以太网采用广播的形式,通过网关将数据包发送给子网内所有主机,主机解读数据包首部的MAC地址与自己的MAC地址匹配,如匹配成功则接收,失败则丢弃。

数据报文结构

从应用层到链路层,每一层对自己的数据进行一个打包,交给下一层进行处理。最终形成一个以太网帧。

已TCP/IP协议为例


物理层

通过光纤电缆在计算机直接传输0/1(低压/高压)电信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值