zoukankan      html  css  js  c++  java
  • 网络编程

    网络编程

    软件开发架构

    ​ c/s架构
    ​ c:客户端
    ​ s:服务端
    ​ b/s架构
    ​ b:浏览器
    ​ s:服务器
    ​ 手机端:好像C/S架构比较火,其实不然,微信小程序,支付宝第三方接口
    ​ 统一接口!
    ​ pc端:b/s比较火
    ​ 本质:b/s其实也是c/s

    服务端:24小时不间断提供服务,谁来我就服务谁(服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定) 并且支持并发
    客户端:想体验服务的时候,就去找服务端体验服务

    网络

    • 网络建立的目的就是为了数据交互(通信) 网络=底层物理连接介质+互联网协议
    • 如何实现通信
      • 1、建立好底层的物理连接介质
      • 2、有一套统一的通信标准,称之为互联网协议

    • 主要掌握五层模型
      • 应用层(应用层,表示层,会话层):http,ftp协议
      • 传输层:tcp/udp协议
      • 网络层:ip协议
      • 数据链路层:ethernet以太网协议
      • 物理层:发送电信号

    1.物理连接层:(客户端(网卡)<--------网线-----internet(路由器....)-------网线------->(网卡)服务端)
    实现计算机之间物理连接,传输的数据都是01010的二进制
    电信号工作原理:电只有高低电频

    2.数据链路层("以太网协议"!)
    1.规定一组电信号应该称之为一组数据帧
    2.规定了只要是接入物联网的计算机,都必须有一块网卡!
    网卡上面刻有世界唯一的编号:
    每块网卡出厂时都被烧制上一个世界唯一的mac地址,
    长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
    我们管网卡上刻有的编号叫电脑的>>>mac地址
    3.规定一组数据帧=head(帧头)相当于快递单+data(数据)相当于快递里的内容

    		head(包含固定18个字节)
    		发送者/源地址:6个字节
    		接收者/目标地址:6个字节
    		数据类型:6个字节
    

    ​ 基于以太网协议通信(广播包只能在一个局域网内使用):通信基本靠吼!弊端:广播风暴

    ​ 交换机:多台电脑之间的连接

    3.网络层(IP协议)
    规定了计算机都必须有一个ip地址
    ip地址特点:点分十进制
    有两个版本ipv4和ipv6 为了能够兼容更多的计算机
    最小:0.0.0.0
    最大:255.255.255.255
    IP协议可以跨局域网传输
    (ip可以变+mac一出场就规定好了)可以标识全世界范围内独一无二的一台计算机的位置

    4.传输层(tcp/udp端口协议)
    端口(port):唯一标识一台计算机上某一个基于网络通信的应用程序
    端口范围:0~65535(动态分配,每次打开软件,操作系统分配的端口号有可能不一样)
    注意:0~1024(这是操作系统自己保留的,因为软件运行在操作系统之上)
    1024~65535(这是你写的应用软件给你分配的区间)
    flask框架默认端口5000
    django框架默认端口8000
    mysql数据库默认端口3306
    redis数据库默认端口6379
    注意:一台计算机上同一时间一个端口号只能被一个应用程序占用

    小总结:
    mac地址:基于广播mac地址的这种通讯方式,只能在局域网内去发送
    跨局域网:
    IP地址:唯一标识全世界接入互联网的独一无二的机器(mac通常不用绑定,由arp协议:根据ip地址解析mac地 址)
    port端口号:唯一标识一台计算机上的某一个应用程序
    ip+port :能够唯一标识全世界上独一无二的一台计算机上的某一个应用程序(基于网络通信)
    详解一到四层:
    物理层(负责发送电信号,全是人为的高低电频1010..的数字,没有具体的意义)
    ——>数据链路层(对物理层的数字进行划分,在局域网内的两台机器可以通信,但是mac地址只能在一个局域 网内(一个小地方)发送)
    ——>网络层(机器获取ip ,mac+ip可以跨局域网通信,但是我们最终的目的不是机器之间的通信,而是应用 软件之间的通信)
    ——>传输层(获取端口prot , mac+ip+port :能够唯一标识全世界上独一无二的一台计算机上的某一个应用程序 (基于网络通信))

    了解:arp协议:根据ip地址解析mac地址(在数据链路层)

    两台机器想要在局域网内通信,除了自己的IP地址,还要获取对方的mac地址。所以首先要事先知道对方的IP地址,然后arp会将自己的IP和子网掩码进行按位运算得到子网地址,也将对方的ip和子网掩码进行按位运算得到子网地址,然后两个子网地址进行判断是否相同,相同就是在同一个局域网内,不相同就是跨局域网(听我录音)
    

    重点:
    TCP协议(流式协议,可靠协议)

    三次握手:
    SYN_SEND(发送链接请求)——>LISTEN(监听),SYN_RCVD(接收请求) 并且携带同意信息同时又向cilent发送链接请求——>ESTABLISHED(建立连接)同时又接收到服务端发来的请求——>ESTABLISHED(接收到客户端发来的确认信息,建立连接关系)
    客户端向服务端连接(SYN代表发送请求信息 seq=x表示就是请求连接的状态,ACK=x+1表示基于上一条的请求连接的确认回复信息)
    (for example:
    serve get data packet will receive 变量syn=1,and know the client need a linking
    the serve will answer the client (ack=1 stand for reply) and then client refer to tcp协议 to unpacked packet will see the ack=1
    cleint will know one thing that the serve have agreed my requests,client received ack=1)
    服务端向客户端连接(SYN代表发送请求信息 seq=y表示就是请求连接的状态),ACK=y+1表示基于上一条的请求连接的确认
    回复信息)
    (一条请求与回复都是确保只是一个客户)
    (client——>serve    serve——>clinet  双向连接)
    
    TCP协议可靠的原因:
    给对方发消息,对方必须回复确认收到传输的数据才会被删除(内存中保存着数据),否则会在一定时间间隔之内反复发送知道对方接收或者超时
    
    四次挥手:
    FIN_WAIT_1 (close())代表最先主动断开连接一方
    CLOSE_WAIT代表client到serve的那条连接要断开了,服务端收到信息,服务端进入close_wait的状态
    FIN_WAIT_2代表被动断开连接的一方,等待对方给我发断链接请求状态
    LAST_ACK服务端发完给客户端的数据,服务端主动发送Fin信息,last_ack状态
    TIME_WAIT客户端收到信息进入time_wait状态
    最后所有的状态信息连接都被回收
    (FIN就是代表发送断链接请求)
    (这是客户端向服务端发起的断链接请求,也可以是服务端向客户端发起断链接请求)
    正是由于在断开连接的时候双方都需要确认是否还有数据需要发送,所以四次挥手不能合并成三次
    

    syn 洪水攻击:服务端大量处于接收连接请求的状态

    星轨:访问量的大小

  • 相关阅读:
    C# 6.0:在catch和finally中使用await
    C# 6.0:Expression – Bodied Methods
    C# 6.0:Auto-Property initializer
    C# 6.0:String Interpolation
    【转】http://www.cnblogs.com/yuzukwok/p/3884377.html
    ThoughtWorks面试题(标记给自己看)
    C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
    (转)C#编程中的66个好习惯
    (转)解决WINDOWS 程序界面闪烁问题的一些经验
    C#利用反射动态绑定事件
  • 原文地址:https://www.cnblogs.com/huangxuanya/p/10796784.html
Copyright © 2011-2022 走看看