协议 + socket import 和 form xx import *的区别 028

一 . 网络通信协议(了解)

  1 . osi 七层协议 (最好记住 面试会问) 应表会传网数物(应用层 表示层 会话层 传输层 网络层 数据链路层 物理层)

  2 .tcp/ip五层 或 tcp/ip四层

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

  应用层 : 写的程序 最上边的一层  传输层 : 四层交换器/四层的路由器  网络层 : 路由器 三层交换机  数据链路层 : 网桥/以太网交换机 网卡  物理层 : 中继器 集线器 双绞线

四层 应 传 网络 网络接口 (应用层 传输层 网络层 网络接口层)

    2.1 物理层 :将孤立的计算机连接起来

      物理层功能:主要是基于电器特性 发送高低电压(电信号) 高电压对应数字1 低电压对应数字0.

    2.2 数据链路层:

      由来:单纯的电信号没有意义 只有规定好多少为一组的电信号代表什么意思才有意义

      功能: 定义电信号的分组方式   

      2.2.1以太网协议(ethernet):

        以太网头规定:

            一组电信号构成一个数据包,叫做'帧'

           每一数据帧分成 : 报头head 和数据data两部分

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

            data(数据类型) : (最短46字节, 最长1500字节)

          所以 数据包的具体内容 : head长度 + data长度  最短64字节,最长1518字节 超出长度就分片发送

      2.2.2 mac地址

          head中包含的源地址和目标地址的由来 Ethernet规定 接入internet的设备都必须具备网卡 发送端和接收端的地址便是网卡地址,即mac地址.

      2.2.3  网络层

        由来 : 广播风暴

        功能 : 引入一套新的地址 用来区分不同的广播域/子网,这套地址即网络地址.

        ip协议:

          规定网络地址的就是ip协议 ,它定义的地址就是IP地址 现在广泛采用的是ipv4 它规定网络地址由32位二进制数字表示

          ip 协议 通过ip地址找mac地址

          疑问:有了ip地址 为什么还要mac地址呢? 比如 电脑从a教室搬到b教室 IP可能会更改 如果没有mac地址意味着现在电脑还是上一个连接这个ip地址的电脑 传输给我的信息就不会传过来 也即 身份证号和手机号的关系 换号了但别人还是可以通过不断拨打手机号确认对方的身份证号 确认了就可以进行信息传递

          总结 : ip协议的两个作用 为每台计算机分配ip地址  确定哪些地址在同一个子网络

          ip数据包 也分为head 和 data 部分 该报=包直接放在太网包的data部分

        ARP协议

          由来 : 由于通信是基于mac的广播形式实现,计算机在发信息时获取自身mac是比较容易的,而获取目标主机的mac,就需要ARP协议.

          功能 : 广播的方式发送数据包 获取目标主机的mac地址

      2.2.4 传输层

        由来 : 网络层帮我们区分子网 , 以太网层的mac帮我们找到主机mac码,但是只找到主机没有用,因为用的都是应用程序 而通过端口(应用程序与网卡关联的编号) 可以实现端口到端口的通信 也即端对端通信

        tcp 协议:(把链接作为最基本对象 ,每一条的tcp连接都有两个端点,这种端点叫做套接字(socket)), 它的定义为端口号拼接到ip地址 即构成了套接字, 例如 ,若 ip 地址为 192.3.4.16 而 端口号为80 那么得到的套接字为192.3.4.16:80)

        当应用程序希望通过tcp与另一个程序通信时,它会发送一个通信请求 这个请求必须被送到一个确切的地址.在双方'握手'之后, tcp将在两个应用程序之间建立一个全双工(full-duplex,双方都可以收发消息)的通信. 这个全双工的通信将占用两个计算机之间的通信线路 直到它被一方或双方关闭为止.

          传输消息可靠 三次握手和四次挥手 (面试问到的概率较大)

        udp 协议 传输速度快 但是不可靠 信息不一定会传输到

        tcp 协议 面向连接 消息可靠 相对于udp来讲 传输消息慢; 面向流  无消息保护边界

        udp 协议 面向不链接 消息不可靠 传输消息快 面向包  有消息保护边界

  三次握手: (建立一个连接)  基于tcp协议    1 tcp服务器进程先创建传输控制块tcb,时刻准备接受客户进程的连接请求 此时服务器就进入了listen(监听)状态 :

  2 tcp客户进程也是先创建传输控制块tcb 然后向服务器发出连接请求报文 , 这时报文首部中的同部位syn=1 , 同时选择一个初始序列号 seq = x,此时 , tcp客户端进程进入了 syn-sent(同步已发送状态)状态, tcp规定 syn报文段(syn = 1 的报文段) 不能懈怠 , 但需要消耗掉一个序号

  3 tcp服务器收到请求报文后 如果同意连接 则发出确认报文 , 确认报文中应该 ack = 1 , syn = 1 确认号是ack = x + 1 , 同时也要为自己初始化一个序列号 seq = y , 此时tcp服务器进程进入了 syn-sent(同步已发送状态),这个报文也不能携带数据 , 但是同样要消耗掉一个序号.

  4 tcp 客户进程收到确认后  还要向服务器给出确认.确认报文的ack = 1, ack = y + 1, 自己的序列号 seq = x + 1 此时 tcp连接建立 , 客户端进入 ESTABLISHED(已建立连接)状态 tcp规定 ack报文段可以携带数据 , 但是如果不携带数据则不消耗序列号.

  5 当服务器收到客户端的确认后也进入ESTABLISHED状态 , 此后双方就可以开始通讯了.

  为什么tcp客户端最后还要发送一次确认呢?

    一句话 防止已经失效的连接请求报文突然又传到了服务器,从而产生错误

    如果使用的是两次握手连接 假设这样一种场景 客户端发送了第一个请求连接并且没有丢失 , 只是因为在网络节点中滞留的时间太长了 , 由于客户端迟迟没有收到确认报文 , 以为服务器没有收到 于是重新发送 此后客户端和服务器经过两次握手完成连接 , 传输数据 然后关闭连接 此时此前滞留的那一次请求连接 网络通畅了到达了服务器 , 这个报文本应该是失效的 但是两次握手的机制将会让客户端和服务器再次建立连接 这将导致不必要的错误和资源的浪费

    但是如果采用的是三次握手,就算那一次失效的报文传送过来了 服务端接受了失效报文 并回复确认报文 但是客户端不会再次发出确认 由于服务器收不到确认 就知道客户端并没有请求连接

  四次挥手: (终止一个连接)

    1 客户端 发出连接释放报文 ,  并且停止发送数据 释放报文首部 , fin = 1, 客户端进入finfin-wait-1(终止等待1)状态.  

    2 服务器收到释放连接报文 , 发出确认报文 此时服务端就进入了CLOSE-WAIT(关闭等待)状态

    3 客户端收到服务器的确认请求后, 此时客户端就进入了FIN-WAIT-2(终止等待2)状态 , 等待服务器发送连接释放报文

    4 服务器将最后的数据发送完毕后 就向客户端发送连接释放报文 由于在半关闭状态 服务器很可能又发送一些数据  此时 服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认

    5 客户端收到服务器的连接释放报文后 必须发出确认 此时客户端就进入了TIME-WAIT(时间等待)状态. 此时tcp连接还没有释放 必须经过2**MSL(最长报文寿命)的时间后 , 当客户端撤销相应的tcb后, 才进入CLOSED状态.

    6 服务器只要收到了客户端发出的确认 立即进入CLOSED状态. 同样撤销了tcb后 就结束了这次的tcp连接 服务器结束tcp连接的时间要早于客户端一些.

     import 和 form xx import *的区别:

        主要是针对socket模块的

      import socket 的话  要用socket.AF_INET   会报错 说是没有AF_INET这个族  是因为 AF-INET这个值在socket的名称空间下   from socket import * 是把socket下的所有名字引入当前的名称空间.

  

posted @ 2018-10-16 12:51 你没有想象的那么重要 阅读(...) 评论(...) 编辑 收藏

协议 + socket import 和 form xx import *的区别 028相关推荐

  1. python import和from xx import xx的理解

    python import, from xx import xx的一些理解, 以及解答一些from xx import xx可以, import xx无效的情况 先挂标准解释 原文 翻译(google ...

  2. import Vue form 'vue’的意思

    1.import Vue form 'vue' 写全的话是import Vue from '-/nodemouls/vue/list/vue.js': 此时在webpack.base.conf.js中 ...

  3. flask from app import db ImportError: cannot import name ‘db’ 的解决方案

    flask from app import db ImportError: cannot import name 'db' 的解决方案 参考文章: (1)flask from app import d ...

  4. 安装TensorRT,然后导入uff库包的时候报错:ImportError: ERROR: Failed to import module(cannot import name ‘GraphDef`)

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 安装TensorRT,然后导入uff库包的时候报错:ImportError: ERROR: Failed to impo ...

  5. ImportError cannot import name BytesIO when import caffe

    转自:https://github.com/BVLC/caffe/issues/1549 I am trying to make caffe running on my machine equippe ...

  6. scikit-image安装 from numpy.lib.arraypad import _validate_lengths ImportError: cannot import name ‘_va

    [写在前面]提示没有skimage.io 安装界面如下 [报错] from numpy.lib.arraypad import _validate_lengths ImportError: canno ...

  7. 报错 之 from typing import OrderedDict ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘

    from typing import OrderedDict ImportError: cannot import name 'OrderedDict' from 'typing' (E:\Pytho ...

  8. “约见”面试官系列之常见面试题之第七十三篇之js文件中import中加{}和不加{}的区别(建议收藏)

    s文件中import中加{}和不加{}的区别 大括号的加与不加取决于import来源的js文件.如果来源js中export时明确指定export组件的名称,那么加大括号并且大括号中指定引用组件的名称, ...

  9. python cannot import name main_virtualenv: cannot import name 'main'

    问题 I'm having a little trouble with virtualenv on Mac OS X Yosemite. After I couldn't run virtualenv ...

最新文章

  1. idea中不小心把文件夹删了
  2. 光盘刻录只允许读取不能拷贝_便携易用,读写强劲:ORICO外置刻录光驱体验
  3. [译]Javascript数列的push和pop方法
  4. 肾炎治疗有效方(湿热壅滞三焦,气机不利)
  5. Mysql 索引-1
  6. win7压缩文件夹怎么压缩到最小
  7. TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
  8. eclipse 优化。
  9. 5G时代需要新的商业模式,国产芯片将不再落后
  10. 《jBPM4工作流应用开发指南》这本书
  11. python机器学习系列教程——深度学习框架比较TensorFlow、Theano、Caffe、SciKit-learn、Keras
  12. 粒子群优化算法(PSO)附代码
  13. Xcode打包ipa的基本步骤(有证书和无证书)
  14. 浅析R语言单因素方差分析中的多重比较
  15. 【水】【SCOI】 精简题解
  16. 2022年,我的读书计划
  17. 5.微博绑定用户接口
  18. mysql不可对视图的操作_在数据表视图中不能进行的操作是什么
  19. 台达触摸屏与多台变频器485通信 温控器通信 不用通过PLC,直接由触摸屏的com口进行通信控制
  20. text——为android系统添加一种默认字体,类似“sans”,“serif”,“monospace”

热门文章

  1. 大疆技术总监:如何用六年成为一个全能的机器人工程师(转载)
  2. 字体号数,像素,榜值对应关系
  3. 不定代词both/either/neither的区别
  4. 网上看到的window8下载
  5. 光荣与梦想 — 疯狂猎鸟项目小结
  6. 周期性行业是什么意思_周期性行业
  7. 2022年医院三基考试医学微生物学和免疫学练习题及答案
  8. @Transactional(readOnly = true)
  9. 计算机毕业设计JavaHTML5运河古城网站(源码+系统+mysql数据库+lw文档)
  10. 微信小游戏开放测试~