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

  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下的所有名字引入当前的名称空间.

  

协议 + socket import 和 form xx import *的区别 028的更多相关文章

  1. python import, from xx import yy

    区别: 用import modulexx/packagexx.moduleyy是导入某一模块,如果想引用模块的内容(class, method,variables...)必须用全名,即 [module ...

  2. import Vue form 'vue’的意思

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

  3. python的import和form...import的区别

    import和form...import的区别 参考链接 骏马金龙 https://www.cnblogs.com/lzc978/p/10105194.html 普通区别 import 使用impor ...

  4. python import xx和from xx import x 中的坑

    先回顾一下理解程度 什么是不可变类型和可变类型? 可变类型是,修改变量后 引用的内存地址不变,引用的内存中的内容发生变化(是针对变量名的引用来理解). # 在a.py中定义了一个test属性 test ...

  5. import * as x from 'xx' 和 import x from 'xx'

    普通xx.js文件 //不可变的依赖模拟数据 module.exports=[ { id: "d52dccfc-656d-11e8-b153-7cd30ad3aa7a", regi ...

  6. 基于TCP协议Socket通信

    服务器线程处理类 package demo4; import java.io.*; import java.net.Socket; /** * 服务器线程处理类 * @ClassName Server ...

  7. svn import usage and not import .so file

    svn import usage: svn import PATH URL 可以不检查仓库来实现.入文件或目录 for example: svn import /home/scott/xxx svn: ...

  8. OC #import和@class的用法和区别

    OC #import和@class的用法和区别 import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑, ...

  9. vue中的import、export、requre的区别

    在es6之前js一直没有自己的模块语法,为了解决这种尴尬就有了require.js的出现.在es6发布之后js又引入了import的概念使得不清楚两者之间的区别的同学在实际使用过程中造成了自己的误解, ...

随机推荐

  1. solr笔记--solr3.2以后支持document和json两种对象来更新索引

    1.json形式(比如把mongodb数据库的导出结果json) <requestHandler name="/update" class="solr.JsonUp ...

  2. day36-hibernate检索和优化 09-Hibernate中的事务:事务处理

  3. [tensorflow]异或门的实现

    一段小程序:待理解 import tensorflow as tf import numpy as np #输入训练数据,这里是python的list, 也可以定义为numpy的ndarray x_d ...

  4. Zbar -- 源码分析

    博客转载自:https://blog.csdn.net/sunflower_boy/article/details/50783179 //Img_scanner.c 文件内 int zbar_scan ...

  5. JavaPersistenceWithHibernate第二版笔记-第七章-001Mapping a set(@ElementCollection、@CollectionTable、@JoinColumn、)

    一.结构 二.代码 1. package org.jpwh.model.collections.setofstrings; import org.jpwh.model.Constants; impor ...

  6. Luogu 3530 [POI2012]FES-Festival

    我是真的不会写差分约束啊呜呜呜…… BZOJ 2788被权限了. 首先对于第一个限制$x + 1 = y$,可以转化成$x + 1 \leq y \leq x + 1$, 所以连一条$(y, x, - ...

  7. 修改tomcat默认的编码方式

    tomcat8以后默认编码格式是utf-8:7之前的都是iso8859-1 如果默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找 ...

  8. HUST高级软件工程--测试管理工具实践--Day4

    测试管理工具实践--Day4 今天完成任务情况: 小靳 今天,主要在前两天的基础上继续学习挖掘jira相关内容: 学会了如何创建项目,并且创建了issue 学会了创建一般账号,并且可以将任务分发给一般 ...

  9. Android中常见的内存泄漏

    为什么会产生内存泄漏? 当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏. ...

  10. Oracle数据库网闸配置注意事项

    1.数据库用户需要的权限 grant select any dictionary to coss; grant alter any procedure to coss; grant create tr ...