计算机网络知识总结

本文介绍了OSI七层模型和TCP/IP四层模型,详细阐述了TCP协议的三次握手、四次挥手过程,解释了三次握手的必要性。还介绍了流量控制、滑动窗口、拥塞控制的概念,以及TCP和UDP的区别,如面向连接、可靠传输、性能效率和首部格式等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.OSI七层模型和TCP/IP四层模型?

OSI七层模型: 

1.物理层:利用网线、光缆等传输介质为数据链路层提供物理连接,实现比特流的透明传输;

2.数据链路层:把物理层的比特流封装成帧,与其他计算机进行通信,同时通过端口之间的连接,寻找Mac地址;

3.网络层:管理网络之间的数据通信,控制数据链路层和传输层之间的信息转发,建立、维护和终止网络连接,并向传输层提供基本的端到端之间的数据传输服务;

4.传输层:向终端用户之间提供透明的数据传输,向上三层提供可靠的传输服务;

5.会话层:组织和协调两个进程之间的通信,并对数据交换进行管理;

6.表示层:处理用户信息的表示问题,如编码、格式转换和加密解密等;

7.应用层:向用户体提供服务,完成用户请求的工作;

TCP/IP四层模型:

1.应用层:负责定义应用程序之间的通信和交互规则,常见的协议:DNS(域名解析协议)、HTTP(超文本传输协议)、SMTP、POP3、IMAP4(电子邮件协议)、Telnet(远程登录协议)、FTP(文件传输协议);

2.传输层:负责定义两台主机进程之间的通信,提供数据传输服务,提供端到端的可靠性传输,主要使用TCP(传输控制协议)、UDP(用户数据报协议);

3.网络层:把传输层产生的报文段和用户数据报封装成祖或包,选择合适的网间路由和交换节点进行数据的实际传输,只要使用IP协议;

4.网络接口层:为网络提供链路级别的传输服务,负责在以太网这样的底层网络发送原始数据包,使用MAC地址识别网络中的设备;

2.谈谈TCP协议的3次握手过程?

第一次握手客户端向服务器发送一个同步数据包,表示这是一个请求建立连接的数据包,同步SYN=1,确认ACK=0,序号seq=x;

第二次握手服务器收到客户端的数据包后根据SYN=1,ACK=0,判断出这是客户端主动建立连接的数据包;如果服务器同意,发送同步SYN=1,确认ACK=1,序号seq=y,确认号ack=x+1;

  • 确认ACK=1,代表服务器同意连接

  • 序号seq=y由服务器指定,表示服务器发送数据时的第一个数据字节的序号;

  • 确认号ack=x + 1,表示服务器已经收到x个字节数据,告诉客户端下一个从x + 1开始发送;

第三次握手客户端收到服务器确认后,再给服务器发送一个数据包,TCP首部内容:同步SYN=0,确认ACK=1,序号seq=x + 1,确认号ack=y + 1;

  • SYN=0表示双方已同意建立连接;

  • 确认ACK=1表示收到服务器的确认数据包;

  • 序号seq=x + 1表示发出的数据包是数据的第x + 1个字节;

  • 确认号ack=y + 1表示收到服务器发送y字节数据,并告诉服务器下次从数据的第y + 1个字节开始发送;

3.TCP协议为什么要3次握手?2次,4次不行吗?

        TCP建立连接时,通过三次握手能防止历史连接的建立,减少双方不必要的资源开销,能帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。

不能 [ 两次握手 ] 和 [ 四次握手的原因 ]:

  • 两次握手:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号
  • 四次握手:三次握手就已经理论上建立了最少可靠连接,所以不需要使用更多的通信次数;

4.谈谈TCP协议的四次挥手过程?

第一次挥手客户端向服务器发送连接释放的请求数据包,并停止发送数据。首部格式为:FIN=1,ACK=0;

  • FIN=1表示客户端要主动释放客户端->服务器的TCP连接;

第二次挥手服务器收到连接释放的报文后,向客户端发送确认数据包,首部格式:FIN=0,ACK=1;(通过第二次挥手,客户端到服务器的连接就释放了,TCP连接处于半关闭状态,此时客户端无法向服务器发送数据,但服务器可以向客户端发送数据)

  • ACK=1表示服务器收到了客户端发送的数据包,同意客户端释放连接;

第三次挥手:若服务器已经没有向客户端发送数据,其应用进程就通知TCP释放连接,并向客户端发送确认报文,首部格式为:ACK=1,FIN=1;此时,服务器不再向客户端发送数据,但能接收;

  • 确认ACK=1,表示服务器已经把需要发给客户端的数据发完了;
  • 终止FIN=1,表示服务器要释放服务器->客户端的TCP的连接;

第四次挥手客户端收到服务器的连接释放报文后,向服务器发送确认报文,首部格式为:ACK=1,FIN=0;

  • 确认ACK=1表示收到服务器的确认报文,并同意服务器释放连接;

5.什么是流量控制?

        流量控制是为了控制发送方的发送速率,保证接收方来得及接收。

        TCP连接的每一方都有一个缓冲区,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收端来不及处理发送端的数据,能提示发送端降低发送的速率,防止包丢失,从而实现流量控制。

6.什么是滑动窗口?

        滑动窗口是TCP协议用于实现流量控制的一种机制。

        发送方和接收方分别维护各自的缓冲区,这个缓冲区就是窗口,发送方的窗口大小由接收方的TCP首部的窗口字段决定。

发送方的窗口内容分为:已发送并确认,已发送未确认,未发送未超出接收方窗口范围,未发送但超出接收方窗口范围。随着接收方的确认,发送方将不断在窗口内向前滑动。

接收方将窗口内容分为:接受已确认,未收到但可以接受,接收方通过改变窗口大小,可以控制发送方的速率,从而实现流量控制。

7.什么是拥塞控制?

        拥塞控制,指防止过多的数据注入网络,保证网络中的路由器或链路稳定。TCP主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复;

慢开始:拥塞窗口从1开始,采用加倍计算方式,由小到大逐渐增大;

拥塞避免:慢开始每个轮次都将cwnd加倍,会使cwnd增长速度非常快,从而使得发送方发送的速度增长过快,网络拥塞的可能性也就更高。设置一个慢开始门限ssthresh,当cwnd>=ssthresh时,进入拥塞避免,每个轮次加1,降低拥塞窗口的增长速度;

拥塞发生:将慢启动的指数增长变为线性增长,整体呈增长趋势但增长速度缓慢,直到发生拥塞,触发重传机制;当网络出现拥塞,会发生数据包重传,重传机制主要有两种:

当发生超时重传的拥塞发生算法:

  • ssthresh设为cwnd/2       
  • cwnd设为1

然后重新进入慢开始;

当接收方发现数据包丢失时,会连续发送三次ACK确认数据包,于是就会启动快重传:

  • cwnd=cwnd/2
  • ssthresh=cwnd

然后进入快速恢复;

快恢复:快速恢复一般和快速重传算法同时使用,快速恢复算法是认为,你还能收到 3 个重复 ACK 说明网络拥塞状况没有特别糟糕,所以没有必要像 RTO 超时重传直接进入慢启动,那么强烈。    快速恢复算法如下:

  • 拥塞窗口 cwnd = ssthresh + 3+3 代表有 3 个ACK确认数据包被收到了);
  • 重传丢失的数据包;
  • 如果再收到重复的 ACK,那么 cwnd 增加 1

8.TCP和UDP有什么区别?

  • 面向连接:TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。
  • 可靠传输:TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。
  • 性能效率:TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。
  • 首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sorenw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值