网络通信与TCP/IP协议的深度解析

发表时间: 2023-02-18 17:44

计算机网络体系结构

OSI七层模型

开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。

层次划分:

1:应用层,提供为应用软件设计的接口,例如:HTTP,HTTPS,FTP,SSH,POP3…。

2:表达层,把数据转换为能与接收者的系统格式兼容并适合传输的格式。

3:会话层,利用传输层提供的服务,使应用建立和维持会话,并能使会话获得同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。这种能力对于传送大的文件极为重要。

4:传输层,把传输表头(TH)加至数据以形成数据包,添加协议,例如:TCP,UDP。

5:网络层,决定数据的路径选择和转寄。

6:数据链路层,负责网络寻址、错误侦测和改错。

7:物理层,在局部局域网上传送数据帧,它负责管理计算机通信设备和网络媒体之间的互通。

TCP/IP

我们通常使用TCP/IP模型,因为OSI比较复杂。其中OSI的应用层,表达层,会话层对应TCP/IP的应用层。

物理层可以看作网卡,数据链路层可以看作网卡驱动(MAC),传输层和网络层由操作系统负责(TCP,IP),应用层就是我们自己编写的应用程序。

image-20230214231301251

tcp:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输协议。

UDP:协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP数据包的方法。

TCP/IPC传输数据

在五层模型中,每层都会对数据附加一个首部。发送端是从应用层->物理层。接收端是从物理层->应用层。

发送

1:应用层,应用程序堆发送的信息进行编码处理。

2:传输层,对数据包头部附加一个TCP。

3:网络层,在数据包头部附加上自己的IP,端口和目标的IP和端口,生成IP数据包。

4:数据链路层,在数据包头部附加自己MAC地址,生成链路层帧。

5:物理层,通过网线传输给接收端。

接收

1:物理层,接收到信息。

2:数据链路层,通过数据包头部MAC地址判断是否是否发送给自己的,不是的话丢弃。

3:网络层,从数据包首部判断IP地址是否是自己的。匹配的话判断TCP/UDP协议发送给对应的模块。

4:传输层,检验数据。判断数据是否破坏,是否按照序号接受数据。找到端口号对应的程序,数据完整接受后,传送给程序。

5:应用层,解析数据,并展现。

image-20230215000251678

image-20230215213103036

MAC地址和IP地址区别

MAC:

MAC地址全程叫做媒体访问控制地址,也成为局域网地址。他是由供应商写在网卡里边的。和网络无关地址不会改变。MAC地址总共48位(6个字节)。作用于数据链路层,可以由同一个链路传递到相同的链路上。

IP

全称叫做互联网协议地址,它比较灵活,不受硬件限制。本意为互联网上一个网络和一台主机配置的唯一逻辑地址。IPv4是由32位二进制数组组成。作用于网络层,ARR根据目的IP地址,找到中间的MAC地址,通过中间节点传送,最终达到目的地网络。

端口号

端口号可以识别同一个计算机中不同的应用程序。也被称为程度地址。

端口号有65535个,在TCP,UDP协议报文中,会有16位存储端口号,2^16-1=65535个,-1是因为0号代表所有端口。

端口号的确定,可以指定端口号,如8080,80,21……也可以时序分配,在访问网站的时候客户端可以让操作系统给分配端口,一般都是大于10000

一个网络通信是由,源IP,源端口,目标IP,目标端口,协议号,数据组成

TCP特性

TCP是面向连接的。通过三次握手建立连接,才可以通信。

TCP是可靠的数据流,有超时重传,应答确认,滑动窗口

超时重传,它有一个部固定的超时时间, 一次发送时长别叫为RTT,根据一万次RTT或者更多,来判断这次传输是否超时。

TCP传输层会检查包中是否包括序号和确认,如果包损坏可以被重传。

在TCP连接后双发那个会确认一个窗口大小。当数据包大于这个大小时会被拆分多个子包,来进行流量的控制。

TCP是全双工,双方可以同时写和读,可以同时传输数据,在建立TCP后会分配两块内存空间一块写一块读。

TCP三次握手

在建立TCP连接时会发送三个包进行确认,首先发送的一方成为客户端,另外一端成为服务端

image-20230215200544401

控制位:

  • URG:当URG等于1时,它告诉系统此报文段中有紧急数据,不要按照原来的排队顺序来传送。
  • ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1`。
  • RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
  • SYN:该位为 1时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。
  • FIN:该位为 1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。

在建立连接时候,

SYN=1,对方期望收到下个报文段的第一个数据字节的序号。

seq=发送给对方数据的序号,指的是本报文段数据的第一个字节的序号。

ack表示我对你说我收到你的报文了,你下次传输从seq+1开始传输。例如:发送了10byte数据包,seq=200,那个ack恢复确认号就应该是210,告诉对方下次从210开始

image-20230215201949859

为什么需要三次握手

因为TCP是面向连接的,去中心化的,所以它必须要确定数据包的准确到达。三次握手也就是通信双方相互告知序列号,并确认序列号,最少三次,如果两次则服务器是没有办法知道客户端是否收到,没办法确认。四次就没必要了,三次都已经知道了对方已经确认了,没必要重复确认。

TCP漏洞-洪范攻击

攻击者伪造IP地址进行和服务器连接,只是连接第一次握手。服务器在半连接状态的TCP放到syn_backlog队列中,如果队列满了,服务器就会拒绝任何连接。

面对这种攻击:

1:设置防火墙

2:超时释放

3:延缓TCB分配,在第一次握手后,服务器会为该请求分配一个TCB资源,延迟TCB分配,在TCB建立完成后再分配。

TCP四次挥手

image-20230215210358258

关闭连接是双方都可以先发送的

1:客户端发送FIN=1,状态进入FIN-WAIT-1状态。

2:服务器接收到确认报文,服务器进入CLOSE-WAIT状态,如果有数据发送就会先发送数据,因为被动关闭可能有数据要发送,主动端仍然要接受数据,可能要持续一段时间,主动段收到确认后进入FIN-WAIT-2状态。如果没有数据传输,则直接发送FIN,就是三次挥手。

3:当主动端收到FIN字段,表示被动端没有数据要发送,主动端确认这个FIN,主动端进入TIME-WAIT状态,需要等待2MSL后,才进入CLOSE状态。

​ MSL:最长报文寿命,每一个TCP都必须选择一个MSL。如果主动端没有进入TIME-WAIT,而是在ack后直接关闭了TCP连接,这时候有新的程序启动利用了原来的端口,刚启动就收到了被动端重发的FIN报文。

4:被动端收到FIN的确认后立即进入CLOSED。

UDP单播和广播

UDP是不需要连接的。

单播:发送消息指定一个目的地。

广播:不指定目的地,发送到网络的所有机器上。

UDP简单部面向连接,所以像DNS,视频通话,视频播放……

当然UDP也可以实现TCP得功能,只不过需要建立在应用层上。