Linux C语言高级编程之网络编程!

简介

本章主要讲解网络编程的基础知识,主要包括七层网络模型、常用通信协议、IP地址与子网掩码及端口号、字节序。

七层网络模型

讲到网络首先说一下最常见的网络模型,七层网络模型。为了保证数据安全有效的传递,ISO将数据的传递过程从逻辑上划分为七层,这七层如下:

1)应用层:主要用于将数据交给应用程序进行处理,如:QQ;

2)表示层:主要用于按照统一的格式对数据进行封装和打包;

3)会话层:主要用于控制对话的开始以及结束等;

4)传输层:主要用于进行错误检查以及重新排序等传输准备工作;

5)网络层:主要用于选择具体的网络协议进行数据的传递;

6)数据链路层:主要用于将数据包转换为高低电平信号;

7)物理层:主要指底层的硬件设备以及驱动程序等;

常用网络协议

通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保网络中数据顺利地传送到确定的地方。这里介绍一下如下几个常用网络协议:

TCP协议:传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,类似打电话;

UDP协议:用户数据报协议,是一种非面向连接协议,类似发短信;

IP协议:互联网协议,是上述两种协议的底层协议;

小知识:(TCP三次握手)

1)客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态;

2)服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态;

3)客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态;

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

IP地址与子网掩码及端口号

IP地址:本质就是互联网中的唯一地址标识,由32位二进制组成的整数(ipv4),也有128位二进制组成的整数(ipv6),目前主流的IP地址采用ipv4。

日常生活中描述IP地址的主要方式为:点分十进制表示法,也就是将每个字节的二进制位转换为十进制整数,不同的十进制整数之间采用小数点分隔。

子网掩码:主要用于划分IP地址中的网络地址和主机地址,也可以判断两个IP地址是否在同一个局域网中,具体的划分方法如下:

IP地址 & 子网掩码 => 网络地址 + 主机地址

网络编程中需要提供: IP地址 + 端口号,他们的意义分别如下:

IP地址:知道IP地址可以定位到具体的某一台主机;

端口号:知道端口号可以定位到主机上的某一个具体的进程;

端口号本质就是unsigned short类型,范围是:0 ~ 65535,但是其中0 ~ 1024之间的端口号被系统占用,因此以后编程时建议从1025开始使用。

字节序

在嵌入式开发中,大端(Big-endian)系统和小端系统(Little-endian)是一个很重要的概念。

小端系统:将低位字节的数据存放在低位内存地址的系统;

大端系统:将低位字节的数据存放在高位内存地址的系统;

小端系统中按照地址从小到大依次为:0x78 0x56 0x34 0x12

大端系统中按照地址从小到大依次为:0x12 0x34 0x56 0x78

一般来说,在网络编程中需要将所有发送到网络中的多字节整数先转换为网络字节序再发送,将所有从网络中接收过来的多字节整数先转换为主机字节序再解析,而网络字节序本质就是大端系统的字节序。

总结:以上概念都是网络编程中最常见最基础的知识点,这些都需要大家掌握。另预告一下,下一章将讲解非常重要的SOCKET网络编程,希望大家多多关注。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171211G02HFB00?refer=cp_1026

扫码关注云+社区