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网络编程,希望大家多多关注。

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏不想当开发的产品不是好测试

QPS的计算

QPS = req/sec = 请求数/秒 Q:如何根据日志查看一个服务的qps A: 一般access.log是记录请求的日志,tail  -f XXX.ac...

28710
来自专栏Ken的杂谈

分布式ID生成器解决方案SnowflakeX

UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领...

842
来自专栏数据和云

Oracle 12.2新特性掌上手册 - 第二卷 In-Memory增强

编辑手记: In-Memory 是 Oracle 在 12.1.0.2 中引入的新特性,旨在加速分析型 SQL 的速度。传统的 OLTP 应用通过 buffer...

2665
来自专栏Albert陈凯

Hadoop数据分析平台实战——180Oozie工作流使用介绍离线数据分析平台实战——180Oozie工作流使用介绍

离线数据分析平台实战——180Oozie工作流使用介绍 Oozie工作流介绍 Oozie的四大组件服务分别是: workflow, coordinator, b...

3805
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识

本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方便后面章...

863
来自专栏用户2442861的专栏

使用事件驱动模型实现高效稳定的网络服务器程序

http://www.cnblogs.com/hnrainll/p/3625597.html

421
来自专栏开发与安全

linux网络编程之TCP/IP基础(三):IP数据报格式和IP地址路由

一、IP数据报格式 IP数据报格式如下: ? 注:需要注意的是网络数据包以大端字节序传输,当然头部也得是大端字节序,也就是说: The most signifi...

2097
来自专栏转载gongluck的CSDN博客

UNPv13:#第2章#传输层:TCP、UDP和SCTP

概述 虽然协议族被称为“TCP/IP”,但除了TCP和IP这两个主要协议外,还有许多其他成员。所有网际协议由一个或多个称为请求评注(Request fo...

2736
来自专栏北京马哥教育

几种经典的网络服务器架构模型的分析与比较

前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务...

2605
来自专栏zhisheng

ElasticSearch 单个节点监控

集群健康监控是对集群信息进行高度的概括,节点统计值 API 提供了集群中每个节点的统计值。节点统计值很多,在监控的时候仍需要我们清楚哪些指标是最值得关注的。 集...

3489

扫码关注云+社区