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

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

  

最新文章

  1. html form 提交表单的一些问题
  2. docker 1.8.2 源代码编译
  3. applet示例 WelcomeApplet.java <Core Java>
  4. BCB 多线程的同步与协调
  5. iOS应用架构谈 本地持久化方案及动态部署
  6. [GeekBand] 探讨C++新标准之新语法——C++ 11~14
  7. 【Java基础】Java中的多态
  8. 【Android - 框架】之Retrofit的使用
  9. 用户组,AD域控简介
  10. Cookie技术详解
  11. ANSI escape code
  12. 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅳ
  13. Let's Encrypt(开源SSL证书管理工具)
  14. 《阿里巴巴Java开发规约》插件使用介绍
  15. mac SecureCRT设置
  16. 移动端web总结
  17. CF867E: Buy Low Sell High(贪心, STL) (hdu6438)
  18. To be better —msup荣获平安科技“2018年度优秀合作伙伴”称号
  19. 【HDOJ1534】【差分约束+SPFA】
  20. android 地图

热门文章

  1. clearfix的用法(转)
  2. python的argparse模块
  3. php学习笔记-if else
  4. ARC102D All Your Paths are Different Lengths
  5. python3-字典中存储列表
  6. Entity Framework Tutorial Basics(28):Concurrency
  7. Entity Framework Tutorial Basics(14):Choose development approach
  8. [jQuery]使用jQuery.Validate进行客户端验证(初级篇)
  9. C++: STL迭代器及迭代器失效问题
  10. ssh 免密码远程登录