• 网络编程知识点(一)


    C/S架构:客户端与服务端架构
    B/S架构:浏览器与服务端架构

    想要实现通信,要具备网卡网线,网卡上有全球唯一mac地址
    多台机器实现通讯要用到交换机,一台机器通过交换机寻找一台机器叫做广播,回复的过程叫做单播
    arp协议:通过ip地址获取mac地址,
    一台机器通过交换机要找另一台机器,然后那台机器就把自己的mac地址通过交换机回复给他
    这台机器就把他的mac地址短暂缓存起来,短暂的这一段时间再想和那台机器实现通讯就不需要再广播了

    机器与机器之间通过交换机连接起来形成局域网,局域网与局域网之间通过路由器连接起来
    一个局域网之间的机器不能直接和另一个局域网之间的机器通信,必须通过网关
    IP地址和子网掩码的按位与得到一个局域网网段

    ip协议的作用:一是为每台计算机分配IP地址,二是确定那些地址在同一个子网络

    一般情况下使用8000以后的端口
    IP地址:一台机器在网络上的位置
    IP只在局域网中生效,也就是只能被局域网中的机器通过IP+端口进行访问
    想要被所有机器访问,必须申请一个公网IP,也就相当于在所有路由器上都注册了
    "127.0.0.1":本地的回环地址


    TCP:它是全双工(client端和server端都可以收发信息),可靠地,面向连接的,安全性高
    连接时三次握手:
    客户端:我可以连接你么
    服务端:可以啊,我可以连接你么
    客户端:可以啊
    断开时四次挥手:
    客户端:我要断开你了
    服务端:好的
    服务端:我要断开你了
    客户端:好的
    为什么是三次握手却是四次挥手?
    因为断开的时候,客户端说要断开服务端同意,
    但此时不能强制要求服务端非得断开,此时服务端还能向客户端发送消息,
    如果服务端要断开,就得再次发出请求,然后客户端同意

    udp:不是长连接,速度快,安全性低
    udp的server端不需要监听也不需要建立连接
    在启动服务后,只能被动的等待客户端发送消息过来
    客户端发送消息的同时还会自带地址信息
    消息回复的时候不仅需要发送消息,还需要把对方的地址填写发送过去

    互联网协议按照功能不同分为tcp/ip五层:

    应用层 "hello"
    传输层 选择tcp/udp信息 tcp/udp协议 *tcp/udp协议属于传输层
    网络层 加上ip信息 ip协议
    数据链路层 加上mac地址 arp协议
    物理层 无线、网卡等

    基于tcp的socket:
    可能会黏包不会丢包
    之所以会黏包是因为:
    只有在tcp协议中才会出现黏包现象
    tcp协议是面向流的协议
    在发送的数据过程中还有缓存机制来避免数据的丢失
    因此在连续发送小数据以及接收大小不符的时候容易出现黏包
    两种情况会造成黏包:
    连续send两个小数据
    两个recv,第一个recv非常小
    解决黏包问题:
    在发送大量数据之前先告诉接收端数据的大小
    如果想要漂亮的解决问题可以用struct模块自定制协议

    基于udp的socket:不会黏包可能会丢包


    struct模块:
    struct.pack("i", 1024)->将int类型的数据转换成四个字节的bytes类型
    可以利用struct模块解决黏包问题,先struct.pack四个字节send过去,然后让服务端知道需要recv多长的数据

    网络上传输的数据叫做数据包,数据包里的所有数据都是报文,所有的报文都有报头

    利用struct模块实现大文件传输
    heders = {"filename": "xxx", "filesize": 1024, "filetype": "txt", "filepath": r"c:xxx"}
    先发送报头的长度,
    然后对面接受四个字节,获得报头
    从报头中获取信息然后接收数据



    程序两端都约定好的,就是一种自制协议,但是一个好的协议一定是最合理的,最节约时间的
  • 相关阅读:
    NFramework开源AOP框架设计文档
    gdi+学习笔记(1)
    winform 二进制图片处理
    电脑屏幕分辨率多少合适
    c# winform AutoScaleMode属性 转
    Windows server 2008,Windows server 2008 R2,Windows 2008 SP2 区别
    视频分辨率
    ref和out(MSDN)
    转DirectX、Directshow介绍
    shell 命令的使用
  • 原文地址:https://www.cnblogs.com/QimiSun/p/9949799.html
Copyright © 2020-2023  润新知