当前位置: 首页 > news >正文

华清远见25072班网络编程学习day1

重点内容:

一、为什么需要网络编程

1.1 回顾IPC通信方式

1> 内核提供三种:

        无名管道:pipe

        有名管道:mkfifo

        信号:kill、signal

2> System V提供三种:

        消息队列:保证数据的不丢失性

        共享内存:保证数据的实效性

        信号灯集:主要完成多进程间的同步

3> 以上的通信方式中,都是同一主机之间的多个进程间的通信,依赖于内核空间(多个进程共享内核空间),但是要想实现不同主机间的进程的通信,上述方式就不能实现了

1.2 套接字通信的引入

        所有进程间的通信当时,都有数据通信的载体。管道通信需要在内核空间中创建一个管道文件进行通信,消息队列在内核中创建一个消息队列载体,共享内存创建一个独立于任何一个进程的物理空间。套接字通信(socket通信)需要使用套接字来完成

二、网络发展历史

发展阶段:

        1.APRAnet阶段---冷战产物

        2.TCP/IP协议阶段--只有TCP和IP两个协议

        3.osi开放系统互联模型(七层体系结构)

        4.TCP/IP协议族(四层体系结构)

2.1 APRAnet阶段

        阿帕网,是Internet的最早雏形

        不能互联不同类型的计算机和不同类型的操作系统

        没有纠错功能

2.2 TCP/IP两个协议阶段

        在计算机网络中,要做到有条不紊的交换数据,需要遵循一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。为了进行网络中的数据交换而建立的规则、标准和约定称为网络协议(Protocol)

        联网协议:定义如何在一个网络上传输信息的一组规则

        TCP(传输控制协议)/IP(互联网协议)协议分成了两个不同的协议:

        用来检测网络传输中差错的传输控制协议TCP

        专门负责对不同网络进行互联的互联网协议IP

2.3 网络体系结构及OSI开放系统系统互联模型

2.3.1 网络体系结构概念

每一层都有自己独立的功能,单每一层都不可获取

通常把功能相近的协议组织在一起放在一层,协议栈。所以每一层中其实有多个协议

分层的好处:

        1、各层之间独立,每一层不需要知道下一层如何实现,而仅仅只需要知道该层通过层间的接口所提供的服务

        2、稳定,灵活性好,当任何一层发生变化时,只需要层间接口关系保持不变,而这层以上或以下层不受影响

        3、易于实现和维护(知道是什么功能,就到指定层去查找)

        4、促进标准化工作:每一层的功能及其所提供的服务都有了精确的说明。

        5、结构上不可分割开:各层都可以采用最合适的技术来实现

2.3.2 OSI开放系统互联模型

OSI是由 ISO(国际标准化组织)提出的一个理想化模型。

OSI共有七层:

        注意:从上往下说也行,从下往上说也可以,但是顺序不能变。

2.3.3 TCP/IP协议族(簇)的体系结构

TCP/IP协议簇是Internet事实上的工业标准。

TCP/IP网络体系结构四层:

        应用层

        传输层

        网络层

        链路层(网络接口和物理层)

虽然TCP/IP体系结构只有四层,但是做的事儿和OSI的七层是一样的。

TCP/IP四层结构 和 OSI开放系统互联模型七层 的对应关系。

linux内核五大功能:

        内存管理:内存的分配和回收

        进程管理:时间片轮转、上下文切换

        文件管理:将一堆0和1转换成人类好识别的字符

        设备管理:linux下一切皆文件

        网络管理:网络协议栈的管理

协议:发送方和接收方都遵循的:数据发送及数据解析 的一组准则。

2.3.5 TCP/IP四层结构中常见的协议

应用层:

        HTTP(Hypertext Transfer Protocol) 超文本传输协议:万维网的数据通信的基础

        FTP(File Transfer Protocol) 文件传输协议:是用于在网络上进行文件传输的一套标准协议,使用TCP传输

        TFTP(Trivial File Transfer Protocol) 简单文件传输协议:是用于在网络上进行文件传输的一套标准协议,使用UDP传输

        SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议:一种提供可靠且有效的电子邮件传输的协议

传输层:

        TCP(Transport Control Protocol) 传输控制协议:是一种面向连接的、可靠的、基于字节流的传输层通信协议

        UDP(User Datagram Protocol) 用户数据报协议:是一种无连接、不可靠、快速传输的传输层通信协议

网络层:

        IP(Internetworking Protocol) 网际互连协议:是指能够在多个不同网络间实现信息传输的协议

        ICMP(Internet Control Message Protocol) 互联网控制信息协议:用于在IP主机、路由器之间传递控制消息、ping命令使用的协议

        IGMP(Internet Group Management Protocol) 互联网组管理:是一个组播协议,用于主机和组播路由器之间通信

链路层:

        ARP(Address Resolution Protocol) 地址解析协议:通过IP地址获取对方mac地址

        RARP(Reverse Address Resolution Protocol) 逆向地址解析协议:通过mac地址获取ip地址

注意:每层使用的协议,由下层决定,不能乱用。

三、TCP和UDP异同(笔试面试)

共同点:同属于传输层的协议,都用于网络传输

TCP ----> 稳定

        1> 提供面向连接的,可靠的数据传输服务

        2> 传输过程中,数据无误、数据无丢失、数据无失序、数据无重复

                1、TCP会给每个数据包编上编号,该编号称之为序列号

                2、每个序列号都需要应答包应答,如果没有应答,则会将上面的包重复发送直到正确为止

        3> 数据传输效率低,耗费资源多

        4> 数据收发是不同步的

                1、为了提高效率,TCP会将多个较小,并且发送间隔短的数据包,沾成一个包发送,该现象称为沾包现象

                2、该沾包算法称之为Nagle算法

        5> TCP的使用场景:对传输质量比较高的以及传输大量数据的通信,在需要可靠通信的传输场合,一般使用TCP协议

        例如:账户登录,大型文件下载的时候

UDP ----> 快速

        1> 面向无连接的,不保证数据可靠的,尽最大努力传输的协议

        2> 数据传输过程中,可能出现数据丢失、重复、失序现象

        3> 数据传输效率高,实时性高

        4> 限制每次传输的数据大小,多出部分直接忽略删除

        5> 收发是同步的,不会沾包

        6> 适用场景:发送小尺寸的,在接收到数据给出应答比较困难的情况下

        例如:广播、通讯软件的音视频

四、网络编程基础相关的概念

4.1 字节序

1> 不同的主机在存储多字节整数时,由于CPU架构或者操作系统的不同,会分为大端存储和小端存储的主机

        大端存储:地址低位存储的是数据的高位

        小端存储:地址低位存储的是数据的低位

2> 当将一个小端存储的主机中的多字节整数,发送到一个大端存储的主机上时,即使网络传输中没有出现任何问题,但是由于架构的不同,导致得到的数据也是错误的。为了解决上面的问题,我们引入网络字节序的概念。

        任何主机,将数据传输到网络上时,都先转换为网络字节序,当达到目的主机后,再转换为对方的主机字节序

        规定:网络字节序为大端存储

3> 如何将主机字节序转换为网络字节序?

        答:系统提供了相关主机字节序与网络字节序进行转换的函数

                主机:host

                网络:network

                转换:to

4> 上述函数使用范围:

        1、只应用于多字节整数

        2、单字节整数,不需要进行转换,数据存储的基本单位就是字节

        3、字符串也不适用于上面的函数

4.2 ip地址

        1> ip地址(Internet Protocol Address):是主机或硬件在网络中的唯一标识,当连接到不同网络时,会分配不同的ip地址

        2> 在网络中传输数据时,需要携带源ip地址和目的ip地址,就像寄快递时,需要填写寄件人和收件人的现居住地址一样

        3> ip地址的分类

                1、ip v4:采用的是4字节无符号整数表示的一个数字,取值范围【0,42亿多】

                        WAN(Wide Area Network):广域网

                        LAN(local area network):局域网

                2、ip v6:采用的是16字节无符号整数表示的一个数字,取值范围【0, 2^128-1】

        4> ip v4 地址划分:A、B、C、D、E五类网络

A类地址

1.0.0.0~127.255.255.255

2^7(网络号)

2^24(主机号)

已经保留不在供给

B类地址

128.0.0.0~191.255.255.255

2^14

2^16

名地址网管中心

C类地址

192.0.0.0~223.255.255.255

2^21

2^8

校园网或企业网、家庭网

D类地址

224.0.0.0~239.255.255.255

组播地址

E类地址

240.0.0.0~255.255.255.255

保留

        5> 一个局域网下的特殊的IP地址

                1、网络号 + 0:表示该网络,不分配给任何主机使用

                2、网络号 + 255:广播地址,不分配给任何主机使用

                3、网络号 + 1:默认为网关地址

                4、127.0.0.1:本地环回地址,用于主机内部自测使用

                5、0.0.0.0:表示当前局域网的任意一个主机号

                6、255.255.255.255:一般表示广播

        6> ip地址编程中使用的是4字节无符号整数,但是,生活中采用的是点分十进制字符串,为了方便记忆,人们将4字节的每一个字节分别转换为十进制数据,然后使用点(.)隔开表示。

        但是,网络传输中,使用的依然是4字节无符号整数,此时,就需要进行点分十进制与4字节无符号整数进行转换

        系统提供相关转换函数

4.4 端口号(重要) ---> port

        1> 为了区分同一主机上的多个进程,使用端口号来进行处理

        2> 端口号是一个2字节的无符号整数存储,取值范围【0,65535】

        3> 网络通信中两个决定性因素:IP + 端口号

        4> 端口号的分类:

                0~1023端口我们编程时候不要使用,是那些”VIP“应用程序占了

                TCP 21端口:FTP文件传输服务

                TCP 23端口:TELNET终端仿真服务

                TCP 25端口:SMTP简单邮件传输服务

                TCP 110端口:POP3邮局协议版本3

                TCP 80端口:HTTP超文本传输服务

                TCP 443端口:HTTPS加密超文本传输服务

                UDP 53端口:DNS域名解析服务

                UDP 69端口:TFTP文件传输服务

        特殊的端口函数,存储在linux中的 /etc/services文件中

        TCP和UDP的端口号是相互独立的

        可以使用的:1024~49151,就是我们平时编写服务器使用的端口号

        临时端口号:49152~65535,这部分是客户端运行时候动态选择的

4.5 域名解析

由于使用IP地址来指定计算机不方便人们记忆,且输入时候容易出错,用字符标识网络种计算机名称方法。

这种命名方法就像每个人的名字,这就是域名(Domian Name)

域名服务器(Domain Name server):用来处理IP地址和域名之间的转换。

域名系统(Domain Name System,DNS):域名翻译成IP地址的软件

一个域名,可以绑定多个ip

域名结构:

        例如域名 http: //www.baidu.com.cn 从右向左看

        cn为高级域名,也叫一级域名,它通常分配给主干节点,取值为国家名,cn代表中国

        com为网络名,属于二级域名,它通常表示组织或部门

        中国互联网二级域名共40个,edu表示教育部门,com表示商业部门,gov表示政府,军队mil等等

        baidu为机构名,在此为三级域名,表示百度

        www:万维网world wide web,也叫环球信息网,是一种特殊的信息结构框架。

        http:使用的是超文本传输协议


作业:

1、将课堂上的代码,重新敲3遍,主要练习主机字节序与网络字节序转换、ip地址点分十进制与网络字节序转换

程序源码:

#include<25072head.h>
int main(int argc, const char *argv[])
{
int num = 0x12345678;

    int num_network = htonl(num);

    printf("num_network = %#x\n", num_network);  //

return 0;
}

程序源码:

#include <25072head.h>
int main(int argc, const char *argv[])
{
//定义一个指针,记录ip地址
char *ip="192.168.109.15";
//调用函数将点分十进制转换为网络字节序
uint32_t ip_network=inet_addr(ip);
//输出结果
printf("ip_network=%#x\n",ip_network);
return 0;
}

2、细致绘制思维导图(第二天提问)

3、牛客网刷题,可以尝试刷计算机网络部分


文章转载自:

http://kDIeIzJu.gqjqf.cn
http://FFrhOzyN.gqjqf.cn
http://DHeh5JM8.gqjqf.cn
http://z1pEp94v.gqjqf.cn
http://ZrVVeqS5.gqjqf.cn
http://vsQ23snE.gqjqf.cn
http://aj4IU8RJ.gqjqf.cn
http://fnRnwHdq.gqjqf.cn
http://GIWTjQQw.gqjqf.cn
http://1jfS29YT.gqjqf.cn
http://ud0hvhKP.gqjqf.cn
http://3E2ywqzG.gqjqf.cn
http://VBYC00TU.gqjqf.cn
http://DrJvo7eD.gqjqf.cn
http://gTTw5HgC.gqjqf.cn
http://icReEMOY.gqjqf.cn
http://Mw1dar06.gqjqf.cn
http://ZxK1hiET.gqjqf.cn
http://izU8j0k0.gqjqf.cn
http://CLrQbIBo.gqjqf.cn
http://H2hsnUni.gqjqf.cn
http://DqhistrZ.gqjqf.cn
http://Ih1SlI5s.gqjqf.cn
http://ZccvsoDX.gqjqf.cn
http://62DqPzU5.gqjqf.cn
http://QnmAlmoe.gqjqf.cn
http://B4LBvsXk.gqjqf.cn
http://m6pa9GhT.gqjqf.cn
http://LFiwYdMi.gqjqf.cn
http://wf1RSM65.gqjqf.cn
http://www.dtcms.com/a/374308.html

相关文章:

  • 【Python办公】[ 网络剪切板 ]免费图床工具GUI界面打包(电脑上传-手机扫码下载)
  • [吾爱原创] 【游戏】王富贵的果菜园
  • Linux系统:线程同步与生产消费模型
  • 深入理解 IP 协议
  • NTP配置为客户端广播监听模式
  • QPS和RPM的全称
  • 打印机已联网,但打印机显示“未连接”,解决方案
  • 【Github | Git】如何彻底删除 SSH 密钥公钥:删除本地密钥公钥 删除GitHub密钥公钥
  • ARM 体系结构与存储器
  • <android>反编译魔改安卓系统应用并替换
  • 面试题:Redis要点总结(进阶)
  • Web安全基石:深入理解与防御SQL注入漏洞
  • PAT 1005 Spell It Right
  • 老子与coding
  • 机器学习之聚类算法
  • bash:trtexec:command not found
  • 今日分享:C++ Stack和queue(栈与队列)
  • Avalonia:使用附加属性实现命令与事件的绑定
  • AI的核心操控:从算法到硬件的协同进化
  • C++初阶(5)类和对象(中)
  • Linux I/O 访问架构深入分析
  • 实现一个可中断线程的线程类
  • Java全栈学习笔记31
  • 算法之双指针
  • js定义变量时let和cons的使用场景
  • DataLens:一款现代化的开源数据分析和可视化工具
  • 人工智能-python-深度学习-神经网络-MobileNet V1V2
  • TDengine 选择函数 Last() 用户手册
  • MySQL的数据模型
  • vulnhub:Kioptrix level 2