• 网络编程


    网络编程

    1、CS架构与BS架构

    cs架构是客户端与服务端的结构

    bs架构是浏览器与服务端的结构, 浏览器也属于一种客户端,所以bs是cs的一种结构

    Client<===========>Server
    
    客户端软件send             服务端软件recv
    操作系统                   操作系统
    计算机硬件<====物理介质=====>计算机硬件
    
    
    Browser<===========>Server
    

    2 网络通信

    网络存在的意义就是 跨地域数据传输=======>即通信
    网络=物理链接介质+互联网通信协议

    3 OSI七层协议

    应用层-表达层-对话层-传输层-网络层-数据链路层-物理层

    协议: 规定数据的组织格式

    格式:头部+数据部分

    封包裹的过程:数据外加头
    拆包裹的过程:拆掉头获取数据

    4 五层协议

    我们也可以将OSI七层协议中的应用层,表达层,对话层统称为应用层

    即得到五层协议

    应用层
    传输层
    网络层
    数据链路层
    物理层

    计算机1:                            计算机2:
    
    应用层                               应用层
    传输层                               传输层
    网络层                               网络层
    数据链路层                            数据链路层
    物理层  <===========交互机===========> 物理层
                                         0101010101010
    
    (源mac地址,目标mac地址)(源ip地址,目标ip地址)数据
    

    4.1 物理层

    物理层负责传输电信号

    一组物理层的数据称为: 位

    单纯的电信号是没有任何意义的,必须对其进行分组才能达到传输数据的目的

    4.2 数据链路层

    数据链路层得到网络层传来的数据,将其作为自己的数据部分,加上数据链路层的报头

    数据链路层的协议是ethernet协议(以太网协议)

    计算机通信基本靠吼,即以太网协议的工作方式是广播

    规定1:一组数据链路层的数据称为: 帧
    规定2:数据帧分成两部分=>头部+数据部分
    头包含: 源地址与目标地址,数据类型,该地址是mac地址
    数据包含:包含的是网络层发过来的整体的内容

    规定3:规定但凡接入互联网的主机必须有一块网卡,每块网卡在出厂时都烧制好一个全世界独一无二的地址,该地址称之为mac地址

    `

    广播 : 将数据拷贝发送给所有局域网内的计算机

    `

    通过mac地址,我们理论上能通过广播的形式找到世界上唯一的一台计算机,

    但是仅仅是理论上,因为这需要世界上所有的计算机都能听到广播,即将所有计算机都置于同一个局域网内

    这是不可能实现的,因为每次某一台计算机发送数据就要对其余所有的计算机进行广播,发送无数份数据出去,

    这一次发送数据就要发送无数份数据,要是多台电脑同时发送数据,这将会是一场灾难

    `

    所以我们需要网络层,进行局域网的划分

    4.3 网络层

    4.3.1 网络层的作用

    网络层可以通过IP地址将计算机分为不同的局域网

    每一个广播域(局域网)但凡要接通外部,一定要有一个网关帮内部的计算机转发包到公网
    网关与外界通信使用的是路由协议

    4.3.2 网络层的协议

    网络层得到传输层传来的数据,将其作为自己的数据部分,加上网络层的报头

    网络层的协议是IP协议

    规定1:一组网络层的数据称为: 包
    规定2:数据包分成两部分=>头部+数据部分
    头包含: 源地址与目标地址,数据类型,该地址是IP地址
    数据包含:包含的是传输层发过来的整体的内容

    `

    4.3.3 IP地址与子网掩码

    我们现在使用的一般是ipv4地址,由ip地址与子网掩码地址组成

    `

    ip地址是由32位二进制组成的:0.0.0.0 - 255.255.255.255
    8bit.8bit.8bit.8bit

    子网掩码同样是32位二进制组成,不同在于它分为两部分,左边是网络部分,必须全为1,右边是主机部分,继续全为0

    子网掩码:
    8bit.8bit.8bit.8bit

    255.255.255.0对应的二进制表达
    11111111.11111111.11111111.00000000

    `

    `

    `

    一个合法的ipv4地址组成部分=ip地址/子网掩码地址
    例如: 172.16.10.1/255.255.255.0
    或172.16.10.1/24 (24代表网络部分是24位1,即255.255.255.0)

    ​ 或172.16.10.1 (不写默认为24)

    `

    我们可以通过IP地址+子网掩码判断该IPV4地址所在的局域网

    判断的方式是对他们的每一位进行与运算,得到一个新的32位地址,

    如果两台计算机的新地址相同,那么就代表他们就处于同一个局域网

    计算机1:
    172.16.10.1:     10101100.00010000.00001010.000000001
    255255.255.255.0: 11111111.11111111.11111111.000000000
    172.16.10.0:      10101100.00010000.00001010.000000000
    
    
    计算机2:
    172.16.10.2:      10101100.00010000.00001010.000000010
    255.255.255.255.0: 11111111.11111111.11111111.000000000
    172.16.10.0:       10101100.00010000.00001010.000000000
    

    4.3.4 ARP协议

    通信时会事先知道对方的ip地址,但是计算机的底层通信是基于ethernet以太网协议的mac地址通信

    我们需要一种方法通过IP地址得到mac地址

    4.3.4.1 ARP协议的作用

    ARP协议能够将ip地址解析成mac地址

    4.3.4.2 ARP协议的运作

    计算机1的数据到数据链路层时,会通过ARP协议,分析计算机1,2的IP地址与子网掩码,得到二者的网络地址

    二者网络地址一样,即二者在同一局域网
    
    1、计算二者网络地址,如果一样,拿到计算机2的mac地址就可以了
    
    2、发送广播包
    
    ​	(发送端mac FF:FF:FF:FF:FF:FF) 
    
    ​    (172.16.10.10/24计算机1的IP与子网掩码    172.16.10.11/24 计算机2的IP与子网掩码)  
    
    ​    (数据)
    
    3、收到计算机2的响应,得到计算机2的mac地址
    
    4、得到包:	
    
    ​	(发送端mac   计算机2的mac)    
    
    ​    (172.16.10.10/24计算机1的IP与子网掩码    172.16.10.11/24 计算机2的IP与子网掩码)  
    
    ​	(数据)
    

    `

    二者网络地址不一样,即二者不在同一局域网
    
    1、计算机二者网络地址,如果不一样,应该拿到网关的mac地址
    
    2、发送广播包
    
    ​	(发送端mac FF:FF:FF:FF:FF:FF) 
    
    ​    (172.16.10.10/24计算机1的IP与子网掩码    101.100.200.11/10 计算机2的IP与子网掩码)  
    
    ​    (数据)
    
    3、收到网关的响应,得到网关的mac地址
    
    4、得到包:	
    
    ​	(发送端mac   网关的mac)    
    
    ​   (172.16.10.10/24计算机1的IP与子网掩码    101.100.200.11/10 计算机2的IP与子网掩码)  
    
    ​	(数据)
    
    计算机1:                            计算机2:
    
    应用层                               应用层
    传输层                               传输层
    网络层                               网络层
    数据链路层                           数据链路层
    物理层  <=========二层交换机========> 物理层
                                         0101010101010
    
    (源mac地址,网关或目标mac地址)(源ip地址,目标ip地址)数据
    	    	|						 |
           数据链路层加的报头		  网络层加的报头
    	
    

    4.3.5 总结

    ip地址+mac地址======>可以标识全世界范围内独一无二的一台计算机
    或者说:(因为ARP协议)
    ip地址=============>可以标识全世界范围内独一无二的一台计算机
    

    4.4 传输层

    传输层使用的协议为tcp协议或udp协议

    传输层的报头包含两端的端口号

    端口范围0-65535,0-1023为系统占用端口

    ip+port=====>标识全世界范围内独一无二的一个基于网络通信的应用程序

    `

    tcp为可靠传输--->确认对方收到才会删除内存中的数据,否则会重传

    udp为不可靠传输,不需要建立双向链接,也不确认对方是否收到

    `

    
        基于tcp协议通信之前:必须建立一个双向通信的链接
        C-------------------->S
        C<--------------------S
    
        三次握手建立链接:
            建立链接是为了传数据做准备的,三次握手即可
    
        四次挥手断开链接
            断开链接时,由于链接内有数据传输,所以必须分四次断开
    
        tcp是可靠传输的
            发送数据必须等到对方确认后才算完成,才会将自己内存中的数据清理掉,否则重传
    
            ps:当服务端大量处于TIME_WAIT状态时意味着服务端正在经历高并发
    
    
        tcp协议的半连接池:
            backlog
            [链接请求1,链接请求2,链接请求3,链接请求5]
    

    4.5 应用层

    可以自定义协议或使用http https ftp====>都分为头部+数据部分
    自定义协议需要注意的问题:
    1、两大组成部分=头部+数据部分
    头部:放对数据的描述信息,如数据发送目标,数据的类型,数据的长度等
    数据部分:想要发的数据

    2、头部的长度必须固定
    因为接收端要通过头部获取所接接收数据的详细信息

    ​ 否则解包时不知该拆多少数据

    5 socket简介

    socket是一个抽象层,并不属于七层或五层协议的任何一层

    它只是一种对应用层以下的层做的封装

    虽然我们是用socket操作数据的封包解包,但是本质上还是操作系统在执行封包解包

    五层协议
    计算机1:                            计算机2:
    
    应用层                               应用层
    
    socket                              socket
    
    传输层               段               传输层
    网络层               包               网络层
    数据链路层            帧               数据链路层
    物理层  <===========交互机===========> 物理层
    
    
    客户端软件send             服务端软件recv
    操作系统                   操作系统
    计算机硬件<====物理介质=====>计算机硬件
    
    
    
    ethernet头+ip头+tcp头+应用层的头+应用层数据
    
    
    

    6 网络通信

    想实现网络通信,每台主机需具备四要素

    • 本机的IP地址
    • 子网掩码
    • 网关的IP地址
    • DNS的IP地址

    获取这四要素分两种方式

    1.静态获取

    ​ 即手动配置

    2.动态获取

    ​ 通过dhcp获取

    以太网头 ip头 udp头 dhcp数据包

    (1)最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。

    (2)后面的”IP标头”,设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。

    (3)最后的”UDP标头”,设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。

    这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。

    接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。

    新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数

    6.1 网络通信流程

    6.1.1.本机获取(dhcp自动获取或手动设置)

    • 本机的IP地址:192.168.1.100
    • 子网掩码:255.255.255.0
    • 网关的IP地址:192.168.1.1
    • DNS的IP地址:8.8.8.8

    6.1.2.打开浏览器

    ​ 想要访问Google,在地址栏输入了网址:www.google.com,这个网址就叫域名。

    ​ 自动设置对方端口为80,即www.google.com:80 (web服务器端口一般都设置为80)

    ​ https:// www.baidu.com:80 /index.php?tn=request_10_pg

    ​ 可以分为三部分,最左边为应用层协议,中间是域名+端口,最右边是虚拟路径

    6.1.3.dns协议(基于udp协议)

    dns协议可以通过域名获取对应的IP地址

    `

    `

    顶级域名:以.com,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网域名体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种。类别顶级域名是         以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等结尾的域名,均由国外公司负责管理。地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。

    二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
    一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级

  • 相关阅读:
    分布式id生成
    DB主从一致性架构优化4种方法
    Mysql在大型网站的应用架构演变
    win10下iis绑定局域网ip无效的解决方案
    css随笔
    html标签说明
    C# JSON序列化日期格式问题
    使用事件机制相比直接调用函数的优势
    C#绑定事件时使用匿名函数
    C# t4模版引擎笔记 引入外部dll
  • 原文地址:https://www.cnblogs.com/achai222/p/12716208.html
Copyright © 2020-2023  润新知