• 网络编程:网络编程基础


    一、网络发展

    1.TCP/IP两个协议阶段

    TCP/IP协议已分成了两个不同的协议:

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

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

    2.网络体系结构

    OSI体系口诀:物链网输会示用 

    2.1网络体系结构概念

    每一层都有自己独立的功能

    分层的好处:

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

    2.稳定、灵活性好,当任何一层发生变化时。只需要层间接口关系保持不变,而别的层不受影响

    3.易于实现和维护

    4.促进标准化工作

    2.2 OSI模型

    2.3TCP/IP协议体系

    2.4TCP/IP常见协议

    应用层:

    HTTP:超文本传输协议          万维网的数据通信的基础

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

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

    SMTP:简单邮件传输协议       一种提供可靠且有效的电子邮件传输的协议

    传输层:

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

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

    网络层:

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

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

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

    链路层:

    ARP:地址解析协议                         通过IP地址获取对方mac地址

    RARP:逆向地址解析协议               通过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> 适用场景:发送小尺寸的,在接收到数据给出应答比较困难的情况下

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

    三、网络编程基础

    1.字节序

    网络字节序规定必须使用大端存储

    使用方式:发送端发送多字节整数时,先将多字节整数转为网络字节序,然后在网络中进行传输

    接收端接收到网络字节序后,转换为自己的主机字节序进行使用即可

    系统提供了有关主机字节序和网络字节序数据之间相互转换的函数

    主机:host

    网络:network

    转换:to

    uint32_t htonl(uint32_t hostlong); //将4字节无符号整数的主机字节序转换成网络字节序,参数是主机字节序,返回值是网络字节序

    uint16_t htons(uint16_t hostshort); //将2字节无符号整数的主机字节序转换成网络字节序,参数是主机字节序,返回值是网络字节序

    uint32_t ntohl(uint32_t netlong); //将4字节无符号整数的网络字节序转换成主机字节序,参数是网络字节序,返回值是主机字节序

    uint16_t ntohs(uint16_t netshort); //将2字节无符号整数的网络字节序转换成主机字节序,参数是网络字节序,返回值是主机字节序

    2.ip地址

    ip地址的分类

    1、IPv4:采用一个4字节无符号整数存储,32bit,取值范围:【0,2^32-1】

    局域网:local area network (LAN)

    广域网:wide area network(WAN)

    2、IPv6:采用16字节无符号整数存储,128bit,取值范围: [0, 2^128-1]

    ip地址的划分

    由于ip地址本身数字比较庞大,而且没有规律,为了更加方便有效的寻径,我们将IP进行二级划分,划分成两部分,分别是网络号和主机号

    ip = 网络号 + 主机号

    网络号:确定计算机从属的网络,在同一个网络下的多个主机的ip地址网络号都一样

    主机号:标识设备在该网络中的主机编号

    A类地址

    0.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

    保留

    ip地址点分十进制

    为了方便记忆,我们将四字节ip地址的整数的每一个字节转换成十进制数,并使用点分割,组成一个字符串,这个字符串就是ip地址的点分十进制

    但是,在网络传输中,ip地址展现的是4字节无符号整数的形式,所以在传输ip地址时,需要考虑字节序的问题

    系统给大家提供了点分十进制与4字节无符号整数转换的函数

    address:地址

    network:网络

    to:转换

    in_addr_t inet_addr(const char *cp);

    功能:将点分十进制的ip地址转换为4字节无符号整数的网络字节序

    参数:点分十进制

    返回值:对应的4字节无符号整数的网络字节序

    char *inet_ntoa(struct in_addr in);

    功能:将ip地址的4字节无符号整数的网络字节序转换为点分十进制的字符串

    参数:ip地址的网络字节序 返

    回值:点分十进制字符串

    3.端口号 pork

    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文件传输服务

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

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

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

    4.域名解析

    域名服务器(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,也叫环球信息网,是一种特殊的信息结构框架。

  • 相关阅读:
    【JVM】类加载子系统——自问自答
    【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?
    C#/.NET/.NET Core优秀项目框架推荐
    Google单元测试框架gtest之官方sample笔记3--值参数化测试
    SpringBootCMS漏洞复现分析
    Eureka和Nacos有哪些区别?
    安全事件报告和处置制度
    anaconda+python+pycharm代码学习——自动化办公(一)——excel自动化处理
    ELK安装、部署、调试(五)filebeat的安装与配置
    python基础开发篇3——线上环境部署Django项目
  • 原文地址:https://blog.csdn.net/weixin_50022690/article/details/136688464