Linux网络编程 - 1网络编程基础

上篇文章:Linux操作系统7- 线程同步与互斥7(RingQueue环形队列生产者消费者模型改进)-CSDN博客

代码仓库:橘子真甜 (yzc-YZC) - Gitee.com

目录

[一. 网络协议](#一. 网络协议)

[二. OSI 模型与TCP/IP协议](#二. OSI 模型与TCP/IP协议)

[2.1 协议说明](#2.1 协议说明)

[2.2 局域网分类](#2.2 局域网分类)

[2.4 MAC地址与IP地址](#2.4 MAC地址与IP地址)

[三. IP与端口 ⭐](#三. IP与端口 ⭐)

[四. TCP与UDP](#四. TCP与UDP)

[五. 大小端与网络字节序](#五. 大小端与网络字节序)


一. 网络协议

网络协议是一种约定,用于通信双方减少通信成本。并处理网络通信过程中的数据错误,数据丢失等问题。

系统和网络都有很多分层的原因是:

1 低耦合,减少模块之间的联系和依赖,方便调试和拓展

2 高内聚,将功能相似的模块放在一层,专门解决一类问题,方便其他模块使用

3 不同层解决不同的问题,层与层之间出错就容易定位和修改

通信协议需要解决的问题:

1 如何将数据交付给目的主机(或者说协议的上层和下层)?

2 如何处理错误和丢失的数据?

3 通信的路径是如何选择的?

4 数据如何转化为可以应用的数据?

二. OSI 模型与TCP/IP协议

OSI模型从下到上是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

TCP/IP对OSI模型进行了整合:

物理层:比如集线器,调制解调器就是物理层设备。是数据真实传输的通道

数据链路层:网卡,交换机等设备:用于解决将数据传递给下一台主机

网络层:路由器:管理地址和路由用于解决 网络传输的路径选择问题

传输层:TCP/UDP协议等内容,用于处理数据的错误,丢失,传递速度等问题

应用层:解决抽象问题的层,比如解析数据,合成数据,协议定制等问题

2.1 协议说明

网络协议首先需要有一个协议报头,数据向上层传递的时候,需要去除自己的报头,然后才能向上交付,即解包分用。数据向下层传递的时候,需要添加下一层协议的报头,然后才能向下层交付。

2.2 局域网分类

1 以太网,以太网中,一台主机向所有的主机发送消息。与回复这台主机的主机进行通信,不过这种方式有问题。如果两台或者多台主机同时向某一台主机发送消息,就会导致消息的覆盖。

为了解决这个问题:以太网规定:同一时刻,只能有一台主机可以发送信息。这样就能减少消息的碰撞。其他网络中的资源也是共享资源,需要保护。

2 令牌环网,类似于锁机制。只有拿到令牌的主机才能发送信息。

3 无线LAN:就是常用的WIFI

2.3 路由器

在以太网中,由于同一时刻只有一台主机可以发送信息,随着局域网主机的增多,必然会导致资源竞争。导致网络通信的效率降低。

为了解决这一问题,当代网络通过路由器这个机器解决。

路由器:顾名思义,就是给信息路由的。告诉这条信息应该发送到何处。路由器一般是横跨两个网络的,两个网络主机通过路由器交互。

由于有IP协议,即便硬件使用不同的协议,也能通过IP协议进行通信!

现代网络看上去是任意两台主机通信,本质确实通过一台台主机单对单通信传递过去的!

2.4 MAC地址与IP地址

MAC地址是主机的物理地址用于提供通信的可行性 ,IP地址是网络通信的地址,用于提供通信的来源和目标。

三. IP与端口 ⭐

3.1 源IP与目的IP

源IP是指网络通信发起方主机的IP地址,目的IP是数据发送对象主机的IP地址。网络通信需要源IP和目的IP用于判断这个信息的发送方向和发送方是否正确。

3.2 端口

有了源IP和目的IP就能够保证双方通信的对象不出错误吗?

比如,数据发到目的主机了,数据到底是发送到哪一个进程呢?谁来接收这个数据?

两台主机的通信本质是:主机中的两个进程通信

所以在网络通信中,需要端口来表示通信的进程。所以,网络通信通过 IP + port来标识全网络中的唯一一个进程。这样就能实现两个不同网络进程之间的通信。

问题:不是有pid来标识一个进程吗?为何还需要使用端口来表示进程?

因为这样能够保证系统和网络之间的解耦,符合高内聚,低耦合的设计原理。 一般来说,一个服务器是通过 ip + 固定端口来表示自己的唯一性,如果使用pid,就会不断的改变,不利于其他主机的访问

通信建立的时候,在OS内核会将端口 + pid 建立一个映射关系。通信的时候,通过这个映射关系就能找到进程进行读写数据

四. TCP与UDP

TCP/UDP是传输层协议,**也是网络编程与接口使用的基础,**这里进行简单介绍各自的特定

TCP:可靠传输,面向字节流,有连接

UDP:不保证可靠传输,面向数据报,无连接

注:能否可靠传输是一种特性,无褒贬的意思

五. 大小端与网络字节序

大小端存储是计算机的基础知识

大端存储:符合人类直觉,内存低地址处存储数据的有效高位

小端存储:符合计算机逻辑计算,内存低地址处存储有效数据的低位

举例如下:

数据是 0x 12 34 56 78 那么12是数据高位,78是数据低位

低地址 ------------------------------------------------->高地址

大端 12 34 56 78

小端 78 56 34 12

这个与网络有什么关系呢?目前来说,大部分计算机都采用小端存储方式存储数据。而网络协议是在小端存储成为主流之前就定制好了网络使用大端的方式来存储网络数据。

因为,我们在接收数据的时候,需要将本地的数据转化为大端发送到网络,收到的网络数据也需要转化为小端之后再去读取数据。

相关推荐
YisquareTech3 小时前
从“零”构建零售EDI能力:实施路径与常见陷阱
网络·人工智能·edi·零售·零售edi
陌路204 小时前
Linux32 网络编程TCP通信(缓冲区问题)
服务器·网络·tcp/ip
NiKo_W4 小时前
Linux 重定向与Cookie
linux·运维·服务器·前端·网络·线程·协议
观北海5 小时前
网络安全等保测评实践指南:从理论到技术实现
网络·安全·web安全
云盾安全防护5 小时前
DNS防护:企业网络稳定性的第一道隐形防线
网络
学渣676565 小时前
个人笔记|单臂路由,子接口,VLAN标签
网络·笔记·智能路由器
Fnetlink16 小时前
智网案例精选|光联云网融合智驱,重塑金融数字化转型新格局
网络·信息与通信
焦糖码奇朵、6 小时前
移动通信网络建设-实验2:5G站点选型与设备部署
网络·数据库·人工智能·5g·信号处理·基带工程
Albert Edison6 小时前
【项目设计】基于正倒排索引的Boost搜索引擎
linux·网络·c++·后端·http·搜索引擎