TOPIC

磷光与烟火逆流

一个敲代码的程序猿

Python之网络编程 osi协议

网络协议篇(osi七层协议)

一 互联网的本质

互联网通信的原理:

  1. 通过各种物理连接介质连接 网线 电话线 无线传输 基站 等

  2. 找准确确定对方计算机(准确到软件)的位置 类似电话的拨号

  3. 通过统一的标准(网络协议)进行数据的收发

    协议 : 指的是互联网协议 , 一个个的标准

英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).

互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

互联网协议按照功能不同分为 osi 七层或 tcp / ip 五层或 tcp / ip 四层

C/S 与 B/S架构

​ C : client端 , 客户端

​ B : browser端

​ S : server端

​ C/S 客户端与服务器之间的架构
QQ 微信 游戏 等 APP 都属于C/S 架构

​ 优点 : 安全性高, 个性化设置, 功能全面 响应速度快

​ 缺点 : 开发成本高, 维护成本高, (基于APP), 面向的客户固定

​ B/S 游览器与服务器之间的架构 : 他属于C/S架构 最近几年比较流行的特殊的C/S架构

​ 优点 : 开发维护成本低, 面向的用户广泛

​ 缺点 : 安全性相对较低, 响应速度相对慢, 个性化的设置单一

osi七层协议(五层协议)

应用层
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等
会话层
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
传输层
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6)
数据链路层
建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层
建立、维护、断开物理连接。(由底层网络定义协议)
  • 物理层

    ​ 一系列的物理连接介质: 网线 光纤 电缆等

    ​ 发送的数据就是0100比特数据流, 这些数据连续不断地收发 , 不过物理层拿到比特流没有用, 不知道这些数据代表的意义, 数据要进行分组(按照一定规则),数据分组这件事物理层做不了

  • 数据链路层: 以太网协议

    • 一组电信号构成一个数据报, 叫做 帧

    • 每一个数据帧分成: 报头head 和 数据date两部分

      数据头(head) | date数据

      数据头: 固定长度18个字节

      源地址 , 目的地址 , 数据类型

      date数据: 46 字节 < = date <= 1500字节

    • 数据头为什么要固定?

      固定就是个标准 统一 为了提取源地址以及目标地址

    • 以太网协议中源目标地址如何设置唯一?

      网线直接接触的硬件就是网卡.网卡上有一个地址,mac地址,确定计算机的唯一性的物理地址.

      网卡上: 12位 16进制组成的一串数字: 前六位 厂商编号: 后六位:流水线号.

  • 网络层: IP 协议层 确定对方的局域网的位置

    广播 mac地址+ ip == 可以查找世界任意一台计算机

    计算机的通信 : 计算机的软件与服务器的软件进行的通信

  • 传输层:端口协议

    广播 mac地址 + ip + 端口 == 可以找到世界上任意一台计算机对应的软件

  • 应用层: 软件自己定义的协议

    QQ 发送数据 : "今晚请我吃饭" ---> {id:'念','content':'今晚请我吃饭'}

    将数据按照自己定义的协议进行封装 http FTP协议

五层协议重新梳理:

​ 服务器: 大黑盒子, 机房声音很大,对温度,湿度,等环境都有要求,双电源,双网卡,系统linux.

详细解释中间环节一些特殊的功能:

数据经过以太网协议封装后,先要从局域网内进行吼.每次发消息,每次都要吼,这样效率也是很低的.(数据给交换机,交换机在分发出去.)

交换机的自主学习功能:

广播: 吼(形象不).

单播: 单线直接联系.

物理层---> 数据链路层(以太网协议(mac地址)) ---->网络层(IP协议) ----> 传输层(端口协议(TCP,UDP协议)) ---> 应用层:

mac地址 + 广播形式 + ip地址 + 端口 == 锁定全世界范围内的任意一个计算机的某软件的位置.

ip地址 + 端口 == 锁定全世界范围内的任意一个计算机的某软件的位置.

传输层: 端口协议.

TCP协议,UDP协议.

端口: 0~65535端口号.

​ 1~1023系统占用的端口号.

​ 1024~8000之内:一般的是有软件占用.

TCP的三次握手四次挥手

客户端 与 服务端第一次建立通信联系 需要三次''握手''.

第一次握手: 客户端 ---> 服务端 发送建立连接请求(SYN=1,seq=x)
第二次握手: 服务端 ---> 客户端 回复同意建立链接,并提交一个建立链接的请求(SYN=1,ACK=1,seq=y,ack=x+1)
第三次握手: 客户端 ---> 服务端 回复同意建立链接(ACK=1,seq=x+q,ack= y+1)

第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

建立的链接不能一直连接着.

TCP协议: 好人协议,不会拒绝别人.

syn洪水攻击: 黑客会虚拟很多的假IP,然后访问你的服务器,半连接池,缓冲效果.

四次挥手:

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

udp与tcp

tcp协议:

​ 优点:好人协议,流式协议.稳定,安全,

​ 缺点: 效率低,

使用TCP的应用:Web浏览器;文件传输程序。

udp协议:

​ 优点: 效率高,传输快.

​ 缺点: 不安全,不是面向连接的,不可靠

使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP),微信qq。

posted @ 2018-07-22 22:29  Jacobyang  阅读(218)  评论(0)    收藏  举报