LWIP应用开发|TCP/IP协议簇二

TCP/IP协议簇二

IP作为整个TCP/IP中至关重要的协议,主要负责将数据包发送给最终的目标计算机;TCP和UDP是传输层的两个主要协议,TCP提供可靠的通讯传输,UDP常被用于让广播和细节控制交给应用的通讯传输

1. IP

IP(Internet Protocol)属于网络层,网络层的主要作用是实现终端节点之间的通讯。在TCP/IP通讯时,用IP地址识别主机和路由器,为了保证正常通讯,需要为每个设备配置正确的IP地址

在这里插入图片描述

  • IP地址:IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成。分为以下四个级别

在这里插入图片描述

  • 广播地址:用于在同一个链路中相互连接的主机之间发生数据包。将IP地址中的主机地址部分全部设置为1,就成为了广播地址
  • 子网掩码:用来指明一个IP地址的哪些位标识的是主机所在的子网,哪些位标识的是主机的位掩码。子网掩码不能单独存在,必须结合IP地址一起使用。作用是将某个IP地址划分成网络地址和主机地址两部分

在这里插入图片描述

2. TCP和UDP

2.1 通讯处理

TCP/IP的众多应用协议大多以客户端/服务端的形式运行。客户端是请求的发起端,服务端是请求的处理端

在这里插入图片描述

2.2 端口号

MAC地址和IP地址分别用来识别同一链路中不同的计算机和识别TCP/IP网络中互连的主机。在传输层中冶有类似于地址的概念,即端口号。端口号用来识别同一台计算机中进行通讯的不同应用程序。也被称为程序地址

  • 根据端口号识别应用:一台计算机上可同时运行多个程序,传输层协议正是利用端口号识别本机中正在通讯的应用程序,并准确地将数据传输

在这里插入图片描述

  • 通过IP地址、端口号、协议号进行通讯识别:通常采用源/目标IP、协议号、源/目标端口号这5个信息来识别一个通讯

在这里插入图片描述

  • 端口号如何确定:标准既定的端口号(静态方法)和时序分配法(动态方法)
  • 端口号与协议:端口号由其使用的传输层协议决定,因此不同的传输协议可以使用相同的端口号
2.3 TCP协议

TCP是面向连接的,即当计算机双方通讯时必须先建立连接,然后进行数据通讯,最后拆除连接。TCP在建立连接时又分三步走(即3次握手):

  • 第一步:(A->B) 主机A向主机B发送一个包含SYN即同步标志的TCP报文,SYN同步报文会指明客户端使用的端口及TCP连接的初始序号
  • 第二步:(B->A) 主机B在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示主机B的请求被接受,同时TCP序号被加1,ACK即确认
  • 第三步:(A->B) 主机A也返回一个确认报文ACK给服务器端,同样TCP序列号被加1,到此一个TCP连接完成
    在这里插入图片描述

TCP数据报头结构如下示

  • 源端口、目的端口:16位,标识出远端和本地的端口
  • 顺序号:32位,标识发送的数据报的顺序
  • 确认号:32位,希望收到的下一个数据报的序列号
  • TCP头长:4位,表明TCP头中包含多少个32位字
  • 6位未用
  • ACK:置1表明确认号是合法的;若为0,那么数据报不包含确认信息,确认字段被省略
  • PSH:表示带有PUSH标志的数据,接收方因此请求数据报一到便可送往应用程序,而不必等到缓冲区装满时才传送
  • RST:用于复位由于主机崩溃或其他原因而出现的错误的连接,还可用于拒绝非法的数据报或拒绝连接请求
  • SYN:用于建立连接
  • FIN:用于释放连接
  • 窗口大小:16位,窗口大小字段表示在确认字节之后还可以发送多少字节
  • 校验和:16位,是为了确保高可靠性而设置的,是校验头部、数据和伪TCP头部之和
  • 可选项:0或多个32位字,包括最大TCP载荷、窗口比例、选择重发数据报等选项

在这里插入图片描述

2.4 UDP协议

UDP即用户数据报协议,是一种面向无连接的不可靠传输协议,不需要通过3次握手来建立连接。同时,一个UDP应用可同时作为应用的客户或服务器方
UDP数据包头结构

  • 源地址、目的地址:16位,标识出远端和本地的端口号
  • 数据包的长度是指包括包头和数据部分在内的总的字节数。因为包头的长度是固定的,所以该域主要用来计算可变长度的数据部分(又称数据负载)

在这里插入图片描述

2.5 协议的选择

协议的选择应该考虑到数据的可靠性、应用的实时性和网络的可靠性

  • 对数据可靠性要求高的应用需选择TCP协议,对数据的可靠性要求不那么高的应用可选择UDP传送
  • TCP协议中的3次握手,重传确认等手段可保证数据传输的可靠性,但是会有较大的时延,因此不适合对实时性要求较高的应用;而UDP协议则有很好的实时性
  • 网络状况不是很好的情况下需选择TCP协议,网络状况很好的情况下选择UDP可以减少网络负荷

关注我的公众号,共同交流学习嵌入式开发相关技术:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Chuangke_Andy/article/details/112341607