05-1,05-02,05-03网络协议

Posted 非法管理者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了05-1,05-02,05-03网络协议相关的知识,希望对你有一定的参考价值。

【05-1】 简述osi七层模型和TCP/IP五层模型  

【05-2】 总结描述TCP三次握手四次挥手 

【05-3】 描述TCP和UDP区别

引言:在学习过程当中学习到网络协议这一章节,并根据作业对此进行梳理

一、OSI参考模型和TCP/IP的5层模型

计算机在网络这个概念出现之前都是像孤岛一样的存在,而后续设备增多后便有先驱提出设备之间要进行相互通讯来进行数据交互。在互联网漫长的大浪淘沙之后TCP/IP协议成为我们当今最常见到的网络协议,或者说应该把TCP/IP协议称之为协议簇更为准确,因为其中包含了类似FTP、SMTP、TCP、UDP、IP等多种协议组成的一个集合体,而其中TCP/IP在其中最具代表性,所以我们简称它为TCP、IP协议。

而在TCP/IP协议诞生之前有人首先基于当时的环境提出了网络模型的概念,也就是一个健全的网络要具有7个分层,从最底层的物理层到最高层的应用层,便构成了我们如今的网络基础架构。而在TCP/IP中7层的模型被简化为了5层或4层如下图所示

 自己理解的话其实4层是最好理解的 

    • 链路层:最下层,关联一切物理意义上的设备
    • 网络层:可以理解为管理许多网口的层级,并把数据给传输层
    • 传输层:处理、交换数据承接网络及会话应用层的中间层
    • 应用层:操作应用层面的事情,基本就是系统层级了

 

 

 

二、UDP

UDP协议全称是用户数据报文协议,在OSI模型协议中在第四层——传输层。UDP不提供数据包的分组和组装,也不能对数据包进行排序。也就是说报文发送后UDP就撒手不管,无法得知是否安全 完整到达

1.UDP特点

无脑狂发

  • 1.面向无连接
    • 1.1 UDP不像TCP一样需要确认连接,而是随意发送,并且不对数据报文本身进行任何操作
    • 1.2 发送时UDP只会给数据增加一个UDP头进行一个协议标识就传递给网络层
    • 1.3 在接收端,网络层将数据传递给传输层后,UDP识别到自己的包,去除之后直接传递给应用层
  • 2.UDP具有多种发送方式
    • 2.1 UDP支持一对一、一对多、多对多、多对一的方式,也就是提供了单播,多播,广播的功能
  • 3.面向报文
    • 3.1 因为UDP不对数据进行任何操作,不关心内容,不关心安全,仅仅识别报文边界后打包发送,所以应用需要考虑合适的报文大小
  • 4.不可靠性
    • 4.1 因为UDP无需建立连接、也不备份数据、也不关心对端是否正确接收、也没有拥塞控制会以恒定速度发送不管当前网络是否拥堵,所以具有不可靠性。   
  • 5.头部小、效率高
    • 5.1 UDP头部包含:
      • 2个16位的端口号,分别为源端口(可选字段)和目标端口
      • 整个数据报文(内容)的长度
    • 因此UDP的头部开销小,只有8字节,相比TCP的20字节要少很少,在传输数据报文时效率很高

2.UDP头部

源端口号:字段长 16 位,表示发送端 UDP 的端口号。
目的端口号:字段长 16 位,表示接收端 UDP的端口号。
长度:字段长 16 位,表示 UDP 头部和 UDP 数据的总长度。
校验和:字段长 16 位,是错误检查的字段,包括 UDP 头和 UDP 数据的内容计算得出,用于检查传输过程中出现的错误。

 

三、TCP

1.TCP协议特点

逐步协商

  • 面向连接
    • 是指发送数据之前必须在两端建立连接,方式是三次握手。这样是为了建立可靠的连接方式
  • 只支持单播
    • 每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播的方式
  • 面向字节流
    • TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。
  • 可靠传输
    • TCP的可靠性是对Data拆分后形成包,然后对包进行编号及确认号(ACK)来实现的,而发送端在往返延时(RTT)过期后未收到对端的确认信息,那么对应的数据将会重新发送
  • 提供拥塞控制
    • 当网络出现拥塞时,TCP能够减少向网络注入数据的速率和数量来缓解拥塞
  • TCP提供全双工通信
    • 如果两个设备建立连接后,两设备之间可同时接收或发送数据

 2.TCP头部信息

 

  • 源端口号:字段长 16 位,表示发送端 的TCP 端口号。
  • 目的端口号:字段长 16 位,表示接收端 的TCP 端口号。
  • 序列号:字段长 32 位,是指 TCP 段数据的位置序号。根据序列号来判断是否存在重收、漏收、乱序等情况。
  • 确认号:字段长 32 位,是指下一次应该收到的数据的序列号。收到这个确认号,表示这个确认号之前的数据都已经正常收到。
  • 数据偏移:字段长 4 位,表示 TCP 数据从哪一位开始计算,也可以看作 TCP 头部的长度。
  • 保留:字段长 6 位,保留给以后扩展使用。
  • 控制位:字段长 6 位,每 1 位标志位可以打开一个控制功能,也叫做控制位。从左到右分别是
    • URG 、ACK 、PSH 、RST 、SYN 、FIN 。 控制位
    • URG:标志位为 1 时,表示有需要紧急处理的数据。
    • ACK:标志位为 1 时,表示确认应答有效。
    • PSH:标志位为 1 时,表示将数据立即上传给应用程序,而不是在缓冲区排队。
    • RST:标志位为 1 时,表示 TCP 连接出现异常,必须强制断开连接。
    • SYN:标志位为 1 时,表示请求建立连接,并设置序列号的初始值。
    • FIN:标志位为 1 时,表示数据发送结束,请求断开 TCP 连接。
    •  
  • 窗口:字段长 16 位,标明滑动窗口的大小,表示自己还能接收多少字节的数据。
  • 校验和:字段长 16 位,是错误检查的字段,包括 TCP 头和 TCP 数据的内容计算得出,用于检查传输过程中出现的错误。
  • 紧急指针:字段长 16 位,表示紧急数据的长度。当 URG 位为 1 时,这个字段才有效。
  • 选项:字段的长度是可变的。通过添加不同的选项,实现 TCP 的一些扩展功能。
  • 填充:如果 TCP 段的头部不是 4 字节的整数倍,就填充一些 0 ,来保证头部长度是 4 字节的整数倍。
  • 数据:TCP 段的数据部分,不是 TCP 头部内容,字段最大是 MSS 。

 

2.TCP连接之三次握手

三次握手过程

第一次客户端(A)发起握手

客户端(A)向服务端(B)发送连接请求报文段(SYN)。该报文段中包含自身的数据通讯初始序号。发送后客户端(A)进入SYN-SENT状态等待服务端(B)响应状态

第二次服务端(B)回应握手

服务端(B)收到连接请求报文后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后服务端进入SYN-RECEIVED状态

第三次客户端(A)确认握手

 当客户端(A)接收到连接同意的应答后,还要要向服务端(B)发送一个确认报文(ACK)。客户端(A)发送完报文后进入ESTABLISHED状态,服务端收到应答后也进入ESTABLISHED状态,此时连接成功

 TCP建立连接为什么需要三次握手而不是两次?

这是为了防止假设遇到突发事件(断网,丢包等)出现失效的链接请求报文被服务端(B)接收的情况,避免产生错误。

三次握手如图 

 

3.TCP断开之四次挥手

 TCP是全双工的,在断开连接时两端都要发送FIN和ACK

第一次挥手

  客户端(A)认为数据发送完成,则它需要向服务端(B)发送断开链接请求

第二次挥手

  服务端(B)收到断开请求后,会告诉应用层要释放TCP连接然后发送ACK包,并进入CLOSE_WAIT状态,此时表明客户端(A)到服务端(B)的链接已经释放,不再接收客户端(A)发送的数据了,但是因为TCP链接是双向的,所以服务端(B)仍可以发送数据给客户端(A)

第三次挥手

  服务端(B)如果此时还有没发完的数据会继续发送,完毕后会向客户端(A)发送连接释放请求,然后服务端(B)便进入LAST-ACK状态 

第四次挥手

  客户端(A) 收到释放请求后,向服务端(B)发送确认应答,此时 客户端(A)  进入 TIME-WAIT 状态。TIME-WAIT持续时间为2MSL(maximium segment lifetime 最长寿命报文 2MSL为4分钟),如果收到回应则进入CLOSED状态,若没收到回应则在2MSL后也进入CLOSED状态。

  四次挥手也不总是四次挥手中间有两个动作是可以合并一起进行的,这个时候就变成三次挥手了。客户端A就会从FIN-WAIT-1状态直接进入到TIME-WAIT状态,跳过了FIN-WAIT-2状态。

  

四、TCP和UDP的比较

1.对比

  UDP TCP
连接方式 无连接 面向连接
连接维护 不维护连接状态 维护端到端的连接状态
可靠性 不可靠传输,不具有流量控制和拥塞控制 可靠传输,可以对流量和拥堵进行控制
通信方式 支持一对一,一对多,多对一和多对多交互通信 仅支持一对一通讯
传输方法 面向报文 面向字节流
头部开销 头部开销小,仅8字节 头部开销最小20字节,最大60字节
适用场景 实时应用(IP电话、视频会议、直播等) 可靠传输(文件传输,浏览器,邮件服务器)

TCP和UDP区别如图所示

 

 

2.总结

TCP和UDP都向上层提供服务,但是TCP提供面向连接的可靠服务,UDP则提供无连接的不可靠服务

UDP选用是对实时性要求较高的场景下使用比如直播,丢一点包问题不大。

TCP选用是对传输内容准确性和完整性要求较高的场景下使用,比如文件传输,邮件,网页等不允许内容出现错误。

 

 

参考:

TCP和UDP的区别

一文搞懂TCP与UDP的区别

跟着动画来学习TCP三次握手和四次挥手

TCP数据传输过程详解

 

以上是关于05-1,05-02,05-03网络协议的主要内容,如果未能解决你的问题,请参考以下文章

ZooKeeper 分布式锁设计实战

30分钟带您熟悉Redisson综合中间件

Linux中的子shell是什么,怎么理解?

Linux中的子shell是什么,怎么理解?

MongoDB 语法大全

MongoDB 语法大全