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 条评论
登录 后参与评论

相关文章

来自专栏友弟技术工作室

iptsbles系列一

iptables系列之基础原理 ? linux:网络防火墙 netfilter:frame 框架 网络过滤器 iptables:数据报文过滤,NA...

3125
来自专栏互联网杂技

前端进阶-让你升级的网络知识

在正文之前,我想问大家一个问题: 问:亲,你有基础吗? 答: 有啊,你说前端吗? 不就是HTML,JS,CSS 吗? so easy~ 问: oh-my-zsh...

3738
来自专栏技术小黑屋

剖析Android中进程与线程调度之nice

在计算机操作系统中,进程是进行资源分配和调度的基本单位,同时每个进程之内也可以存在多个线程。那么在Android系统(Linux Kernel)中,进程是如何去...

974
来自专栏中国Android研究院

Android中Looper的架构设计与赏析

看完本篇文章,你将搞清楚以下所有的关于Handler相关的任何问题。如果你以后在面试中碰到Handler相关的问题,相信你会给面试官眼前一亮的感觉。

742
来自专栏林冠宏的技术文章

基于 xorm 的服务端框架 XGoServer

作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:htt...

2445
来自专栏SDNLAB

源码解读ODL与OpenFlow交换机建立过程

编者按:OpenDaylight两大技术特色:1.采用了OSGi框架;2.引入了SAL,而今天我们主要介绍服务抽象层(SAL)适配的南向协议之一OF协议模块。 ...

3454
来自专栏LanceToBigData

TCP/IP(三)数据链路层~1

前言   其实前面一堆讲的物理层的概念,会感觉特别的难理解,因为这是一个非常强大的计算机网络体系的底层知识,没有关系!我们大致了解一下就行了。 一、数据链路层概...

2097
来自专栏Danny的专栏

必备的网络常用测试命令(ping命令)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

2312
来自专栏Java Edge

计算机网络之运输层1 功能2 UDP与TCP异同可靠传输的工作原理可靠传输的实现TCP 报文段的首部格式TCP 的流量控制TCP的拥塞控制

4838
来自专栏landv

烽火2640路由器命令行手册-03-广域网配置命令

当帧中继端口与网络相连一般应配为DTE,若路由器为背靠背相连,则一台配成DTE,另一台配成DCE。如果需要双向LMI过程,应配置为NNI。 帧中继标准描述了一个...

871

扫码关注云+社区