【嵌入式】Linux C编程——网络编程(2)

一、TCP和UDP:

传输控制协议(TCP)为应用程序提供可靠的通信连接,适用于一次传输大批数据的情况并可要求得到相应的应用程序;
用户数据包协议(UDP)提供无连接通信,且不对传送包进行可靠的保证,适用于一次传输少量数据的情况。

1、TCP:

TCP是TCP/IP中面向连接的传输层协议,它提供全双工和可靠交付的服务,采用许多机制来确保端到端节点之间的可靠传输,如采用序列号、确认重传和滑动窗口等。

①、TCP的传输:

a、TCP为要发送的每一个报文段加上序列号,保证每一个报文段能被接收端接收,并只被正确接受一次;
b、TCP采用具有重传功能的积极确认技术作为可靠数据流传输服务的基础;
c、采用可变长的滑动窗口协议进行流量控制,以防止由于发送端与接收端之间的不匹配而引起的数据丢失。

②、三次握手:

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

③、TCP数据报头:

在这里插入图片描述

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

2、UDP:

UDP即用户数据报协议,它是一种无连接协议,因此不需要通过三握手建立连接。一个UDP应用可同时作为应用的客户或服务器方。UDP比TCP更为高效,也能更好地解决实时性问题。
UDP数据报头格式为:
在这里插入图片描述

二、套接字:

网络通信就是进程间的通信(不同计算机上的进程间通信),根据IP地址只能确认一台计算机,而计算机上会有很多的进程。在一台计算机上,一个端口号一次只能分配给一个进程,即在一台计算机上,端口和进程之间是一一对应的关系,使用端口号和网络地址的组合可以唯一地确定整个网络中的一个网络进程。

1、Socket的概念:

Socket是一种特殊的I/O接口,也是一种文件描述符。它是一种常用的进程之间通信机制,通过它不仅能实现本地机器上的进程之间的通信,而且通过网络能够在不同机器上的进程之间进行通信。
每一个Socket都用一个半相关描述“{协议、本地地址、本地端口}”来表示;一个完整的套接字则用一个相关描述“{协议、本地地址、本地端口、远程地址、远程端口}”来表示。

2、Socket的类型:

a、流式Socket(SOCK_STREAM)用于TCP通信。流式套接字提供可靠的、面向连接的通信流;它使用TCP协议,从而保证数据传输的正确性和顺序性;
b、数据报Socket(SOCK_DGRAM)用于UDP通信。数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的,它使用数据报协议UDP;
c、原始Socket(SOCK_RAW)用于新的网络协议实现的测试等。原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。

3、计算机数据存储:

a、高位字节优先(大端模式):

内存的高地址存储数据的低字节、低地址存储数据高字节的方式。

b、低位字节优先(小端模式):

内存的低地址存储数据的低字节、高地址存储数据高字节的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值