当前位置:   article > 正文

计算机网络--TCP/IP五层结构_tcpip五层

tcpip五层


一、TCP/IP五层协议功能

根据功能不同分为OSI七层协议TCP/IP四层协议(TCP/IP五层协议是为了介绍网络原理设计,实际应用仍然是四层协议)
在这里插入图片描述
其中,OSI七层协议称为开放系统互连基本参考模型,是法律上的国际标准
但是最后被广泛使用的是TCP/IP四层协议;
TCP/IP五层是为了方便网络原理分析,实际应用的让仍是四层协议。

1、物理层

物理层就是网线,交换机,路由器登一堆物理连接介质,负责发送信息被转化为计算机能认识的二进制的比特流

2、数据链路层

数据链链路层就是对物理层要发送的比特流进行分组,即将数据信息的来源和目的地切分出来确认是正确的再读数据,一段比特流是一帧。
而共同遵守的分组协议就是以太网协议ethernet.

1)数据报

一组电信号为一帧----->一帧构成一个数据报
每一组数据报分为报头和数据两部分

head | data

head包括(固定18个字节)

  • 发送者/源地址,6个地址
  • 接收者/目标地址,6个地址
  • 数据类型,6个字节

data包括(最短46字节,最长1500字节)

数据报的具体内容

head长度+data长度=最短64字节,最长1518字节,超过最大字节就分片发送

head中包含的源和目标地址由来–mac地址
  • ethernet规定接入internet的设备必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址;
  • mac地址:每块网卡出厂时都带有世界上唯一的mac地址,长度为48位二进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水编号);
  • 在同一个局域网中,计算机的通信方式为广播。
2)任务

当局域网有一条发送端发送的广播数据,接收端先拆包,查看是不是和自己需要的mac地址匹配,匹配的话读数据,不匹配的话扔掉。

3、网络层

1)解决什么问题

当存在以太网、mac地址、广播的发送方式,世界上的计算机就都可以通信了;
但是世界大网络是由一个个彼此隔离的局域网组成,以太网只能在一个局域网内发送,一个局域网是一个广播域,以太网的广播包只能在一个广播域内发送,跨广播域通信只能通过路由转发

2)功能

因此,需要一种方法来区分哪些计算机属于同一个广播域,哪些不是。
如果是,采用广播方式通信;
如果不是,则路由方式转发。
————网络层功能:引入一套新的地址来区分不同的广播域/子网,即网络地址

3)IP协议

IP协议—用来确定对方局域网的位置

4、传输层

1)解决什么问题

现在我们有ip+mac地址+广播方式,但是这仅仅找到了计算机的位置,我们与别人通过互联网通信根本上是通过应用软件之间的通信,计算机上有很多应用软件,因此,我们要确定软件的具体位置。

2)功能

计算机上的不同应用软件有不同的端口,因此我们要确定的就是软件的端口。
传输层就是TCP/UDP协议也叫做端口工作协议,这样我们根据协议就可以找到任何一个软件的位置。

5、应用层

指每个软件自定义的一些协议

协议功能图

在这里插入图片描述

二、每层协议详解

1、数据链路层

1)交换机的学习功能

当客户端要给服务端发送请求,先以单播形式发送给交换机,交换机将请求数据包以广播的方式发送到所有网卡上,目标网卡解包如果发现是发给自己的,则读数据;如果不是则丢弃。
交换机在完成一次通信后,会将刚刚在进行通信的两个mac地址缓存下来,下次这个客户端发送请求时,交换机先在缓存表中查看是否有目标地址,如果有,直接将数据包发送给它,如果没有再使用广播的方式发送给局域网内的所有网卡。

2)ARP协议

在OSI七层协议中,ARP协议属于数据链路层,而在TCP/IP模型中,被归纳在网络层。
这里将它归纳为数据链路层。
ARP协议(Address Resolution Protocol)地址解析协议,根据目标IP地址获取目标物理地址的协议
ARP协议分两种情况讨论:
同一局域网(网段,子网)
不同局域网(网段,子网)

a.同一局域网

mac地址是计算机的物理地址,它可以确定计算机在一个局域网的具体位置。
真实情况下:两台计算机之间通信,发送端可能不知道接收端的物理地址,但是一定要有接收端的IP地址。
然后借助ARP协议,通过IP地址获取接收端的MAC地址,然后在同一局域网以广播+以太网协议进行通信

同一局域网中,ARP协议的流程(每个计算机都有一个ARP缓存区–ARP列表):

  • 发送端先查询ARP缓存区内的ARP列表,如果有对应的MAC地址,则直接发送数据,如果没有或者ARP列表清空了则进行下列步骤:
    • 发送端以广播方式在局域网中发送一个ARP请求,请求信息为:询问IP地址为xxxx的计算机,告诉我xxxx你的mac地址
    • 同一局域网的所有计算机都会接受这个请求信息,当目标IP的计算机接收到这个请求信息后,将自己的MAC地址直接以单播形式发送给发送端
  • 发送端收到接收端发送的MAC地址后,将对应关系补充到ARP列表中,然后与接收端进行通信

2、网络层

1)IP协议

规定网络地址的协议叫做IP协议,它定义的地址称为IP地址,广泛使用的IPV4,它规定网络地址由32位2进制表示。
范围:0.0.0.0–255.255.255.255
一个IP地址通常写成四段十进制数

2)IP地址分成两部分
  • 网络部分:标识子网
  • 主机部分:标识主机
3)子网掩码
  • 表示子网络特征的一个参数,它在形式上等同于IP地址,也是一个32位二进制数字
  • 网络部分全为1,主机部分为0.
  • 如果已知网络部分是前24位,主机部分是后8位部分,写为二进制为:11111111.11111111.11111111.0000000 写为十进制为:255.255.255.0
  • 知道子网掩码,可以通过AND运算计算任意两个IP是否属于同一局域网,方法为:将两个IP分别与自己的子网掩码AND,如果结果相同,则在同一局域网。
4)ip协议作用
  • 为每个计算机配一个IP地址
  • 确定哪些地址在同一个子网络

3、传输层

网络层的IP协议为我们区分子网,数据链路层的以太网为我们确定主机,传输层的作用就是确定要通信的主机上的应用程序
传输层功能:建立端口与端口的通信
端口范围:0-65535,0-1023为系统占用端口
传输层的端口协议:TCP协议,UDP协议

4、应用层

应用层功能

  • 选择一个合适的网络应用体系结构
  • 根据所选的网络应用体系结构,确定客户进程和服务器进程
  • 确定客户进程和服务器进程的端口号
  • 确定客户进程和服务器进程的IP地址
  • 选择一个合适的应用层协议
  • 考虑网络所需的服务

因此
应用层会获取客户端服务端的端口号和IP地址,以及一个合适的应用层协议
目前存在的应用层协议有:DNS,FTP,HTTP,telnet,Https,SMTP,POP3,SNMP等。

5、小结

假如计算机1要向计算机2发送数据,简单的流程是什么样的?

  • 应用层获取计算机1 的IP地址(包含子网掩码)、端口,计算机2的IP地址(包含子网掩码)、端口
  • 通过双方的IP地址和子网掩码判断是否属于同一个局域网
    • 如果属于同一个局域网,通过广播方式(ARP协议获取MAC地址)+以太网协议找到计算机2的位置,再通过端口号确定软件的位置,从而进行通信
    • 如果属于不同局域网,将数据传给路由器,路由器遵从路由器协议通过计算机2的IP地址(包括子网掩码)确定计算机2的网段,将数据发送到计算机2从属于的路由器上,然后通过广播(ARP协议获取MAC地址)+以太网协议确定计算机2的位置,然后通过应用层协议确定端口,将数据传送给指定的软件。

所以,IP地址+端口号就可以确定世界上任意一台计算机上的目标软件。

三、TCP、UDP协议

1、UDP协议

UDP协议–User Datagram Protocol,用户数据报协议

  • 特性:
    不可靠的无连接协议、面向数据报、相对不安全的;
    但是传输速率相对高、尽最大努力服务、无阻塞控制。

  • 用于:
    QQ聊天、微信、在线视频等对数据准确性和丢包要求比较低,但是速度必须快

“报头”部分只有8个字节,总长度不超过65535字节,正好放进一个IP数据报:
以太网头 IP头 UDP头 数据

2、TCP协议

TCP协议–Transmission Control Protocol,传输控制协议

  • 特性:
    可靠的、面向连接的流式协议,相对安全的;
    但是传输效率相对低。

  • 用于:
    文件传输、发送或者接受邮件,远程登录。

TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据报的长度不会超过IP数据报的长度,以确保单个TCP数据报不必再分割。总长度不超过65535字节
以太网头 IP头 TCP头 数据
IP数据报: <-----65535------->

四、TCP协议的三次握手、四次握手

1、TCP协议的三次握手

思路
在这里插入图片描述
这里显示为四次握手,是因为第2、3次握手可以合并为一次,服务端可以发送一个回应包既包含同意客户端与我建立连接、又包含我也向客户端建立连接的申请。
即为:
在这里插入图片描述
规范版本为:
在这里插入图片描述

图解:
SYN:请求,seq是一个随机的序列号
第一次握手:客户端发送请求SYN=1 随机序列号seq=x到服务端,服务端接收消息
第二次握手:服务端回一个ack=x+1,并且也发送了一个SYN=1,随机序列号seq=y,这个说明服务端同意了客户端的连接请求(客户端到服务端的连接通道建立完毕),并向客户端发送一个建立连接通道的请求;
第三次握手:客户端接受消息后,回复一个ack=y+1,消息到达服务端(服务端到客户端的连接通道建立完毕)。
接下来,客户端和服务端就可以互相发消息了。

2、TCP协议的四次挥手

当客户端向服务端消息发送完毕,应该将消息通道关闭(通道一直开启会占用资源),此时就需要TCP断开连接的四次挥手。

  • 思路
    在这里插入图片描述

为什么断开连接需要四次挥手?2、3次整合成一次不可以嘛?
答:客户端向服务端发起断开连接请求时,说明客户端已经向服务端发送完毕数据了,所以请求断开连接,但是此时服务端向客户端的数据发送是否完成还不确定,服务端需要等待向客户端发送的数据全部完成后,才可以向客户端发起断开连接的请求,所以不能整合到一起。
规范版本:
在这里插入图片描述

图解:
第一次挥手:客户端向服务端发送完毕数据后,会向服务端发送一个FIN=1 seq=u的请求,服务端接收到这个请求;
第二次挥手:服务端接收到这个请求后,会向客户端发送一个ack=u+1的请求,同意断开连接,客户端接收到这个请求,断开了通往服务端的通道;
第三次握手:服务端向客户端发送的数据发送完毕后,向客户端发送一个FIN=1 seq=w的请求,客户端接收到这个请求;
第四次握手:客户端接收到这个请求后,会向服务端发送一个ack=w+1的请求,同意服务端断开连接,服务端接收到这个请求,断开通往客户端的通道。

五、相关面试题

1、为什么断开连接需要四次挥手呢?

断开连接与创建连接时是不一样的,断开连接时要保证数据传输已经结束,所以客户端向服务端发起断开请求时,表示客户端向服务端的数据发送已经完毕,因此客户端请求断开连接,但是此时服务端向客户端发送数据是否完毕无法确定,服务端需要等待向客户端发送的数据全部完成后,才向客户端发起断开连接请求,因此两次不能整合为一次。

2、如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP设有一个保活计数器,如果客户端出现故障,服务器不能一直等待下去,白白浪费资源。服务端每收到一次客户端的请求后都会重置这个计数器,时间通常设置为2小时,如果两小时还没有收到客户端的任何数据,服务端就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文段仍然没反应,服务器就认为客户端出现故障,接着就关闭连接。

3、什么是SYN洪水攻击?

TCP协议也称为“好人协议”,因为TCP协议不会拒绝任何客户端连接,只要有客户端来连接,服务端就会回复一个ack然后向客户端发送SYN请求,等待客户端同意,在客户端没有同意之前,服务端会维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已经收到客户端的SYN包,并已向客户端发出确认,在等待客户端的确认包。
这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
SYN洪水攻击: 利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源,配合IP欺骗,SYN攻击能达到很好的效果。
比如: 客户端在短时间内伪造大量不存在的IP地址,向服务器不断发送syn包,服务器回复确认包,并等待客户端的确认,由于源地址是不存在的,服务器需要不断重复发送直至超时,这些伪造的syn包将长时间占用未连接队列,正常的syn请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/267620
推荐阅读
相关标签
  

闽ICP备14008679号