计算机网络概括

1 前言

计算机网络是指将位于不同地理位置,但具有独立功能的多台设备,通过通信设备和线路连接起来,在网络操作系统,网络管理软件、网络通信协议的协调管理下,实现资源共享和信息传递的计算机系统。

简单来说,计算机网络就是用于满足不同机器之间通信、共享的一种系统。

1.1 计算机网络的组成

从组成上而言,计算机网络主要由主机协议传输介质以及软件四部分组成。

  • 主机:可以是手机、电脑、服务器、电子手表等任意计算机硬件。

  • 协议:各类定义归法的网络通信协议,如TCP/IP、IPX/SPX、AppleTalk等。

  • 传输介质:传输数据的通道,可以是实体铜线、电缆、光纤,也可以是无形的电磁波空间介质。

  • 软件:涵盖所有联网的应用,如QQ、微信、支付宝、淘宝、京东等各类软件。

1.2计算机网络的功能组成

计算机网络体系的两个核心功能

资源共享:资源子网实现-->OSI中的上三层

数据通信:通信子网实现-->OSI中的下三层

1.3 网络分层与OSI七层模型

而在计算机网络中,当两台机器进行通信时,其过程主要包含数据的封装与解封:

如上图,左侧是发送端,右侧是接收端,当发送端的应用尝试传输一条数据时,数据会根据网络分层结构,从上至下依次封装,每层都对数据做一定的处理,最后在物理层转换为比特流(二进制数据),然后传输至接收端。因为双方之间遵守的都是相同的协议体系(网络模型),因此接收端会首先接收到比特流数据,然后从下至上依次解封数据,最终在应用层还原数据,从而达到通信的目的。

2 通信协议的基本概念

2.1 协议数据单元(PDU)

计算机网络体系中,不同节点通信时交换的信息报文称PDU=协议头信息 + 数据

2.2 TCP/IP体系中数据的通信过程

TCP/IP体系中,一端要想为另一端发送信息数据也会经历封装与解封过程,每一次封装都会形成本层的PDU.

同比生活,也就是类似收发快递的过程:

  • 发件:[发件人]→[货物]→[驿站]→[快递公司站点]

  • 传输介质:[运输路线]→[中转站]

  • 收件:[快递公司站点]→[驿站]→[货物]→[收件人]

3 TCP/IP协议简介

  • 源端口/目的端口:指数据发送方的应用进程端口号和接收方的端口号

  • 序号:TCP为了保证数据的可靠传输,会对分段数据标注序号用于组装和确定数据的正确性

  • 确认序号:当接收方收到接收到本次数据时,下次需要发送的数据段序号

  • 首部:表示TCP报文头的长度,因为TCP头长度可变性,因此需要在头信息中声明每个头的长度

  • 保留位:预留一些空间给未来拓展时使用。

  • URG:表示本次发送的报文数据中是否是紧急数据。

  • ACK:确认信号,当报文中ACK=1的时候表示正确或同意。

  • PSH:表示接收方应该尽快将这个报文交给应用层,为后续数据腾出空间,不要停留在缓冲区。

  • RST:如果收到RST=1的报文,说明与主机的连接出现严重错误(如主机崩溃),必须释放连接,然后重新建立连接。

  • SYN:建立一个新连接,SYN=1表示这是一个请求建立连接的报文段。

  • FIN:断开一个连接,FIN=1表示通知告知对方本段要关闭连接了。

3.1连接管理机制 - 三次握手与四次挥手

TCP的三次握手

所谓的TCP三次握手,其实是指TCP建立连接的过程,因为TCP属于可靠性的传输协议,因此在发送数据前必须要先确保发送/接收数据的双方状态正常,因此需要经过“三次握手”的过程,具体如下:

  • 客户端向服务端发送建立连接的数据包SYN=1,seq=x,然后进入syn-send等待确认连接状态

  • SYN=1:代表请求建立连接。

  • seq=x:当前数据包的序号。

  • 服务端接收到请求建立连接的数据包后,允许建立连接的情况下,会返回响应报文

SYN=1,ACK=1,seq=y,ack=x+1

  • SYN=1:TCP是双全工协议,因此服务端也需向客户端发送SYN=1信号。

  • ACK=1:确认客户端建立连接的请求。

  • seq=y:表示当前服务端返回给客户端的序号。

  • ack=x+1:确认客户端序号x之前的请求都已收到。

  • 因为是双全工协议,连接是双向的,因此客户端也需确认一下服务端的连接请求,收到服务端的SYN=1后,也需返回ACK=1,seq=x+1,ack=y+1的数据包。

  • ACK=1:表示确认服务端的连接建立请求。

  • seq=x+1:当前数据包的请求序号。

  • ack=y+1:确认服务端序号y之前的数据都已成功接收。

经过如上三个步骤,客户端和服务端双方之间确认请求后,连接会成功建立,紧接着双方都会处于estab-lishen状态,数据可以正常传输。

TCP的四次挥手

当一方数据传输完成后,会尝试中断连接,因此又会经历“四次挥手”的过程,如下:

①客户端完成数据传输后,会发出FIN=1,seq=u关闭连接的报文,然后等待服务端响应。

  • FIN=1:代表请求关闭连接。

  • seq=u:请求序号。

②服务端收到客户端的“关闭”请求后,会给客户端返回确认关闭的报文:ACK=1,seq=v,ack=u+1。

  • ACK=1:确认客户端“关闭连接”的请求。

  • seq=v:请求序号。

  • ack=u+1:确认客户端序号u及其以前的数据都已成功接收。

  • 客户端传输完成数据后,会告诉服务端自己要关闭连接了;

  • 但服务端可能数据还未传输完成,因此会继续传输自己的数据,直至自身的数据也传输完成后,也会告诉客户端:自己也要关闭连接了。

③服务端传输完成自己的数据后,向客户端发送关闭连接的报文:FIN=1,ACK=1,seq=w,ack=u+1。

  • FIN=1:表示自己也要“关闭连接”了。

  • ACK=1:确认收到了之前的数据。

  • seq=w:请求序号。

  • ack=u+1:确认客户端序号u之前的数据都已成功接收。

④客户端接收到服务端“关闭连接”的请求后,给服务端响应确认报文:ACK=1,seq=u+1,ack=w+1。

  • ACK=1:确认服务端“关闭连接”的请求。

  • seq=u+1:请求序号。

  • ack=w+1:确认服务端序号w之前的数据都已成功接收。

前面提及过,因为TCP是双全工的协议,因此双方都可以主动释放连接,在TCP中,当一方数据传输完成后,就会主动关闭连接,也就会经历“挥手”的过程,同样我们也可以举个通俗一些的例子来认识这个过程:

  • ①特种兵-竹子:竹子汇报完毕,请指示!

  • ②指挥部-熊猫:指挥部收到!..&*/?..!^...继续说完自己要交代的任务。

  • ③指挥部-熊猫:这里是熊猫,任务已指示完毕!

  • ④特种兵-竹子:竹子收到!

  • 中断通话.........

总结:

三次握手是指TCP建立连接需要发送三个数据包,主要目的是在于:为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备

四次挥手是指TCP关闭连接时需要发送四个数据包,主要目的在于:当客户端发送完数据后,给服务端发送“我要关闭连接了”的请求,然后服务端告知客户端收到了“关闭请求”,但此时服务端会继续向客户端传输未发送的数据,客户端也照旧可以接收服务端的数据,直到服务端的数据传输完成后,服务端也会发出“关闭连接”的请求,客户端同意后,最终才会断开连接,从而保证数据正常可靠的交互

TCP中的沾包问题

首先要理解TCP传输数据的方式,TCP传输数据时会给每个文段分配一个序号,接收方接收数据之后会根据序号进行排序,然后将其放置在TCP缓存区中

黏包问题:多个数据包杂糅在一块,无法确定每一个数据包之间的分界。好像多个包粘在了一起。

发送方黏包问题:

  • TCP为了优化传输速度,将多个包进行打包传输。

  • 当需要发送的数据大于MSS规定的数据,需要对数据进行拆分也会产生黏包问题。

接收方黏包问题:

TCP中,如果数据被接收后,应用程序没有及时处理也会出现黏包问题。

解决方案:

  • 当使用TCP短连接时不必考虑沾包问题

  • 当发送无结构数据,如文件传输时,也不需要考虑沾包问题,因为这类数据只管发送和接收保存即可

  • 如果使用长连接,那么则需要考虑沾包问题:

  • 如果发送的报文都是相同的结构,那么可以在首部中添加数据长度,接收方根据首部中记录的数据大小读取数据。

  • 每个数据包封装成固定长度,不够的用0补齐,接收方每次按照固定大小读取数据即可。(效率低)

  • 在数据之间设置边界,比如添加特殊符号,这样接收方收到数据时,根据特殊符号分割数据即可。

学习链接: https://juejin.cn/post/7101917676162777119

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

兜兜转转m

一毛钱助力博主实现愿望

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

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

打赏作者

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

抵扣说明:

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

余额充值