Python Day 28 网络编程、OSI七层模型、三次握手和四次挥手

  ##网络编程思维路线

“”“
##什么是网络编程?
网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的

​编写基于网络的应用程序的过程序称之为网络编程

##思维路线:

目的是要链接互联网中的其他计算机

物理层 用物理介质链接其他计算机 

数据链路层 用MAC地址来通讯,但仅限于同一局域网

网络层 用ip确定全球范围的某个局域网中的某一台计算机

传输层 用端口来确定 某一计算机中的某一个进程

应用层 组织自己的数据结构,例如json, xml等用于在两个应用程序间交换数据

”“”

  ##C/S架构

“”“
#建立网络至少需要两台计算机,然后使用网络来传输数据
1.网络必须联通
2.在需要访问数据一方  必须安装用于访问数据的应用程序
   该应用程序称之为客户端应用程序(client)

3.在需要提供数据的一方  必须安装用于共享数据的应用程序
   该应用程序称之为服务端应用程序(server)
       简写为C/S
           例如: qq  就是一个客户端   服务器在腾讯公司
                 腾讯视频

                B/S    Browser浏览器/Server    该结构下 通过传输都是HTML文本数据

#学习网络编程 最终的目的就是要编写出一个基于C/S结构的应用程序

  ##网络通讯的基本要素

#要通讯必须具备的两个条件
1.物理传播介质  (双绞线   光纤   同轴线   无线电波)
2.通讯协议   (重点)

  ##网络通讯协议

#是由发送方和接收方共同商定一套规范

#为什么需要协议
其目的是是为了双方能正确解析数据
例如 国内通讯:双方都是用普通话
     国际通信:使用英文


IBM  DELL  HP    早些年 每个公司都有自己一套通讯协议 这导致了  不同品牌的电脑连不了网于是 国际标准组织就提出了一套开放系统互联模型 OSI

  ##OSI七层模型

##Open System Interconnection Reference Model,开放式系统互联通信参考模型,缩写为OSI,是由国际标准组织推出的,其实就是一大堆协议,OSI把整个通讯过程划分为七层,简称OSI七层模型

##最右边就是完整的七层模型,是最完整的通讯模型,虽然很详尽,但是整个通讯流程的复杂度较高,后期为了降低学习难度,将其进行了简化,于是又了中间的五层,和左边的四层

##其中应用层,表示层和会话层都是属于应用程序层的,是一个整体,故将其合并为应用层,由此得到中间的五层,这是我们学习的重点!

   ##OSI工作原理解析

##OSI各层工作原理解析
OSI就是相当于计算机界的通用语言,只要按照OSI规定的标准来通讯,就能够与全世界任何一台所有计算机通讯

#1.物理层的功能:基于电子器件发送电流信号,根据电流的高低可以对应到数字0和1,也就是二进制数据 传播介质:双绞线,电缆,同轴电缆,无线电波

#2.数据链路层
以太网:
    以太网协议(Ethernet)工作在数据链路层,其规定了电信号分组方式,以及一组电信号应该包含哪些内容
ethernet规定如下:
    - 一组电信号构成一个数据包,叫做‘帧’
    - 每一数据帧分成:报头head和数据data两部分
head包含:(固定18个字节)

- 发送者/源地址,6个字节
- 接收者/目标地址,6个字节
- 数据类型(标签+以太类型),6个字节

data包含:(最短46字节,最长1500字节)

- 数据包的具体内容

head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

## mac地址:

head中包含的源和目标地址指的是什么地址呢?

ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址

mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
##广播

 有了mac地址,同一网络内的两台主机就可以通信了

扫描二维码关注公众号,回复: 6286942 查看本文章
ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

广播容易出吸纳广播风暴
交换机不仅负责让网络中的计算机能够互相通信,还要优化网络传输

 #如何优化呢?

 当pc1想要与pc2通讯前

 1.需要知道pc2的MAC地址,所以必须先将这个信息广播给所有的计算机,

 2.这个信息必须先交给交换机,再由交换机广播出去,

 3.pc2收到消息消息后发现目标MAC是自己,就回复数据给发送方,

 4.而回复也必须先交给交换机,此时交换机就会记录pc2的MAC地址与网口号的对应关系存到自己的缓存中,

 5.下一次在要给pc2发数据时从缓存中查找pc2的MAC地址,

 6.如果找到了就直接单独给pc2发送,不在需要广播,

 7.如果没有则重复之前的广播过程

 这一优化功能称之为自动学习功能

  ##网络层

# 1.IP协议

IP协议是工作在网络层的协议,全称:Internet Protocol Address,翻译为互联网协议地址

#### 1.1 IP地址(重点)

- ip协议定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
- 范围0.0.0.0-255.255.255.255
- 一个ip地址通常写成四段十进制数,例:192.168.10.1
- 网络号:标识子网
- 主机号:标识主机

IP地址的分类:

​    A类保留给政府机构

​        1.0.0.0---126.0.0.0

​    B类分配给中等规模公司

​        128.0.0.0---191.255.0.0

​    C类分配给任何需要的人

​        192.168.0.1 - 192.168.255.254

​    D类用于组播

​    E类用于实验

我们的电脑ip通常都是C类的,以192.168开头,正因为C类任何人都可以用

# 1.2 子网掩码(了解)

# 什么是子网掩码

子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。

它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

# 为什么需要子网掩码

单纯的ip地址段只是标识了ip地址的种类,无法辨识一个ip所处的子网
例:192.168.10.1与192.168.10.2并不能确定二者处于同一子网,因为不清楚哪些位表示网络号,哪些表示主机号

#1.3 IP数据包(了解)

ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分

head:长度为20到60字节

data:最长为65,515字节。

而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据帧,分开发送了。


#1.4 ARP协议(了解)

ARP协议的由来: IP是通常是动态分配的, 是一个逻辑地址, 而数据传输则必须依赖MAC地址, 那如何才能通过IP得到对方的MAC地址呢? 这就需要ARP协议了

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

首先明确每台主机ip都是已知的, 并可以通过子网掩码来判断是否属于同一子网

** 案例1:主机192
.168
.1
.101
访问192
.168
.1
.102 **

是同一子网内
ARP请求帧内容:

1.FF:FF:FF:FF:FF:FF是一个特殊的MAC地址 交换机在看到这个地址时会将这个数据向网内所有主机进行广播

2.192.168.1.102 收到ARP请求后 回复自己的MAC给  源MAC主机

3.发送方(192.168.1.101)收到回复后,会将对方的ip的MAC地址映射关系存储到缓存中,以便下次使用

ps:arp -a 可以查看ARP缓存列表

 

#总结:ARP通过广播的方式由IP地址获取MAC地址, 不在同一子网时   ARP得到的时对方网关的MAC地址,数据到达对方网关后,由网关根据IP交给对应的主机,当然对方网关获取主机MAC也是通过ARP

ps:路由器 交换机都可以称之为网关!

 
 
 

  ##传输层

#TCP/UDP工作在这一层
传输层要求每一个应用程序捆绑一个端口号
端口号是一个整数     取值范围0-65536     0-1024 这是系统保留的 不建议使用
端口号不能重复
至此  就可以通过ip+端口号定位全球某一台计算机上的某一个应用程序

#TCP 传输控制协议
    可靠传输协议,  如何保障可靠,在发生完数据之后,必须等待接收方返回回复消息,该数据才算发送成功
    如果对方在一段时间内没有返回,会再次发送数据,超限制次数,将判定为链接丢失
    基于链接的传输
    怎么叫链接
        要发生数据必须先建立链接  简单的说就是找一条可以到达对方的路  ,
        如何选择一条最佳的传输路径,由路由协议来控制
    要保证数据传输室可靠 一定要保证这传输路径是可用的
    建立链接需要三次握手:
        三次握手是为了确定传输可用
        但是并不能保证后续传输可靠 所以TCP协议在传输数据时 每一个数据段segment都需要确认信息
    断开链接需要四次挥手
        保证双方数据传输完毕 ,为什么需要多一次,有可能一段传输结束  另一边还没结束

    优点:
        保证传输可靠,数据完整
    缺点:
        因为需要传输确认信息,所以对网络消耗较大,效率相对较低
    应用场景:
        重要数据,在线支付,文字信息


#UDP 协议用户数据报协议
    不可靠传输
    UDP只管发送 不管对方是否收到
    
    优点:传输效率比TCP高
    缺点:传输不可靠
    应用场景:
        对速度要求高 ,对完整性要求较低
        视频通话,语音聊天
        对战游戏 多是UDP   你卡了你就卡吧  别人正常游戏

 

   ##三次握手和四次挥手总结


#TCP的连接建立是一个三次握手过程,目的是为了通信双方确认开始序号,以便后续
通信的有序进行。主要步骤如下:
1. 连接开始时,连接建立方(Client)发送SYN包,并包含了自己的初始序号a;
2. 连接接受方(Server)收到SYN包以后会回复一个SYN包,其中包含了对上一个a包
的回应信息ACK,回应的序号为下一个希望收到包的序号,即a+1,然后还包含
了自己的初始序号b;
3. 连接建立方(Client)收到回应的SYN包以后,回复一个ACK包做响应,其中包含了
下一个希望收到包的序号即b+1
#TCP终止连接的四次握手过程如下:
1. 首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这
个FIN)执行被动关闭。
2. 当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一
样,一个FIN将占用一个序号。
3. 同时TCP服务器还向应用程序(即丢弃服务器)传送一个文件结束符。接着这个
服务器程序就关闭它的连接,导致它的TCP端发送一个FIN。
4. 客户必须发回一个确认,并将确认序号设置为收到序号加1。

   ##应用层

应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开放的,大家都可以开发自己的应用程序,用什么样的数据格式来传输,就需要由应用程序开发者自己来制定

应用层功能:规定应用程序的数据格式。

例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

猜你喜欢

转载自www.cnblogs.com/liangzhenghong/p/10932762.html