嵌入式Linux系统编程学习之三十二Linux网络编程介绍


一、TCP/IP概述

  协议(Protocol)指通信双方必须遵循的规矩,由 ISO Internet 规定,写在 RPC 文档中。
  OSI 参考模型包括应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
  TCP/IP 模型则分为 4 层:

  • 应用层,包括 HTTP (超文本传输协议)、FTP(文件传输协议)、TELNET(远程登录)、SSH(安全外壳协议)、STMP(简单邮件发送)、POP3(收邮件);
  • 传输层,包括 TCP(传输控制协议)、UDP(用户数据报协议);
  • 网络层,包括 IP(网际互联协议)、ICMP(网络控制消息协议)、IGMP(网络组管理协议);
  • 网络接口层,包括 ARP(地址转换协议)、RARP(反向地址转换协议)、MPLS(多协议标签交换)。
    其中,TCP(传输控制协议)是面向连接的协议,它能保证传输安全可靠,但速度比较慢(有 3 次握手)。UDP(用户数据报协议)是非面向连接的协议,它速度快,不可靠

二、OSI参考模型及TCP/IP参考模型

  TCP/IP 协议族的每一层的作用:

  • 网络接口层:负责将二进制流转换为数据帧,并进行数据帧的发送和接收。要注意的是数据帧是独立的网络信息传输单元。
  • 网络层:负责将数据帧封装成 IP 数据,并运行必要的路由算法。
  • 传输层:负责端对端之间的通信会话连接和建立。传输协议的选择根据数据传输方式而定。
  • 应用层:负责应用程序的网络访问,这里通过端口号来识别各个不同的进程。

  OSI 参考模型与 TCP/IP 参考模型:
在这里插入图片描述
  TCP/IP 协议族:
在这里插入图片描述
  数据封装过程是在不同的层对数据打上相应的标识:
在这里插入图片描述
  数据解封装过程是在不同的层对数据去掉相应的标识:
在这里插入图片描述

  • ARP(地址转换协议):用于获得同一物理网络中的硬件主机地址。
  • MPLS(多协议标签交换):很有发展前景的下一代网络协议。
  • IP(网际互联协议):负责在主机和网络之间寻址和路由数据包。
  • ICMP(网络控制消息协议):用于发送报告有关数据包的传送错误的协议。
  • IGMP(网络组管理协议):被 IP 主机用来向本地多路广播路由器报告主机组成员的协议。
  • TCP(传输控制协议):为应用程序提供可靠的通信连接,适合于一次传输大批数据的情况,并适用于要求得到相应的应用程序。
  • UDP(用户数据报协议):提供了无连接通信,且不对传送包进行可靠的保证。适合于一次传输少量数据。

三、TCP

1. 概述

  TCP 是 TCP/IP 协议族中面向连接的传输层协议,它提供全双工和可靠交付的服务,采用许多机制来确保端到端节点之间的可靠数据传输,如采用序列号、确认重传、滑动窗口等。
  首先,TCP 要为所发送的每一个报文段加上序列号,以保证每一个报文段能被接收方接收,并只被正确的接收一次。

  其次,TCP 采用具有重传功能的积极确认技术,作为可靠数据流传输服务的基础。
  这里“确认”是指接收端在正确收到报文段之后向发送端回送一个确认(ACK)信息。发送方将每个已发送的报文段备份在自己的缓冲区里,而且在收到相应的确认之前不会丢弃所保存的报文段。
  “积极”是指发送方在每一个报文段发送完毕的同时启动一个定时器,加入定时器的定时期满而关于报文段的确认信息还没有收到,则发送方认为该报文段已经丢失并主动重发。
  为了避免由于网络延时引起迟到的确认和重复的确认,TCP 规定在确认信息中捎带一个报文段的序号,使接收方能正确的将报文段与确认联系起来。

  最后,采用可变长的滑动窗口协议进行流量控制,以防止由于发送端与接受端之间的不匹配引起的数据丢失。
  这里所采用的滑动窗口协议与数据链路层的滑动窗口协议在工作原理上完全相同,唯一的区别在于滑动窗口协议用于传输层是为了在端对端节点之间实现流量控制,而用于数据链路层是为了在相邻点之间实现流量控制。
  TCP 采用可变长的滑动窗口,使得发送端与接收端可以根据自己的 CPU 和数据缓存资源对数据发送和接收能力来进行动态调整,从而灵活性更强,也更合理。

2.三次握手

  在利用 TCP 实现源主机和目的主机通信时,目的主机必须同意,否则 TCP 连接无法建立。为了确保 TCP 连接的成功建立,TCP 采用了一种称为三次握手的方式,三次握手方式使得“序号/确认号”系统能够正常工作,从而使它们的序号达成同步。如果三次握手成功,则连接建立成功,可以开始传送数据信息。
  三次握手过程为:
  (1)源主机 A 的 TCP 向主机 B 发送连接请求报文段,其首部中的 SYN(同步)标志位应置为 1 ,表示想跟目标主机 B 建立连接,进行通信,并发送一个同步序列号 X (例:SEQ = 100)进行同步,表明在后面传送数据时的第一个数据字节的序号为 X+1(即 101)。
  (2)目标主机 B 的 TCP 收到连接请求报文段后,如同意,则发回确认。在确认报文中应将 ACK 位和 SYN 位置为 1 。确认号为 X+1 ,同时也为自己选择一个序号 Y 。
  (3)源主机 A 的 TCP 收到目标主机 B 的确认后要向目标主机 B 给出确认。其 ACK 置为 1 ,确认号为 Y+1 ,而自己的序号为 X+1 。TCP 的标准规定,SYN 置 1 的报文段要消耗掉一个序列号。
  运行客户进程的源主机 A 的 TCP 通知上层应用进程,连接已经建立。当源主机 A 向目标主机 B 发送第一个数据报文段时,其序号仍为 X+1 ,因为前一个确认报文段并不消耗序号。
  当运行服务进程的目标主机 B 的 TCP 收到源主机 A 的确认后,也通知其上层应用进程,连接已建立。至此建立了一个全双工的连接。
  TCP 连接的建立:在这里插入图片描述
  三次握手:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序。

3.TCP数据报头

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

四、UDP

  UDP 即用户数据报协议,它是一种无连接协议,因此不需要像 TCP 那样通过三次握手来建立一个连接。同时,一个 UDP 应用可同时作为应用的客户或服务器方。由于 UDP 并不需要建立一个明确的连接,因此建立 UDP 应用要比建立 TCP 应用简单得多。
  它比 TCP 协议更为高效,也能更好地解决实时性的问题。如今,包括网络视频会议系统在内的众多客户/服务器模式的网络应用都使用 UDP 协议。
  UDP 数据包头格式:
在这里插入图片描述

五、协议的选择

  协议的选择遵循以下要求。
  (1)对数据可靠性的要求。
  对数据要求高可靠性的应用需选择 TCP,如验证、密码字段的传送都是不允许出错的,而对数据的可靠性要求不那么高的应用可选择 UDP 传送。
  (2)应用的实时性。
  TCP 在传送过程中要使用三次握手、重传确认等手段来保证数据传输的可靠性。使用 TCP 会有较大的延时,因此不适合对实时性要求较高的应用,如 VOIP、视频监控等。相反,UDP 则在这些应用中能发挥更好的作用。
  (3)网络的可靠性。
  由于 TCP 协议的提出主要是解决网络的可靠性问题,它通过各种机制来减少错误发生的概率。因此,在网络状况不是很好的情况下需选用 TCP (如在广域网等情况),但是若在网络状况很好的情况下(如局域网等)就不需要在采用 TCP 协议,而建议选择 UDP 协议来减少网络负荷。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值