Python之☞网络编程中一些概念问题(未完)
:::一些名词的解释:::
网络: 网络是辅助双方能够连接在一起的工具,使用网络的目的,为了联通多方然后进行通讯,能够让软件在不同的电脑上运行,相互传输数据.
网络协议: 约定俗成的,没有理由.
TCP/IP协议: 互联网协议簇就是通用的协议标准。最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议.
常用的网络协议如图:
:::OSI七层模型:::
应用层
与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。
表示层
这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。
会话层
它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。
传输层
这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。
网络层
这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。
数据链路层
它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。
物理层
OSI的物理层规范是有关传输介质的特这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。
UDP协议:
UDP:用户数据报协议,不可靠性,只是把应用程序传给IP层数据报送出去,但是不能保证他们是否能到达目的地,传输数据报钱不用再客户端和服务器之间建立连接,并且没有超时重发机制,所以传输速度快。
特点: -安全性差不稳定,没有顺序, 大小限制64KB内 -速度快.
TCP协议:
tcp通信,在通讯之前,一定要先建立相关链接,才能发送数据.
TCP三次握手:
标志控制:
ACK:确认标志
SYN:同步标志
FIN:结束标志
TCP特点:
- 安全性高,稳定性好,有序
- 速度相对较慢
问题1: OSI七层模式是什么?
ISO (国际标准化组织)
OSI七层模型 ----> 网络通信工作流程的标准化
应用层:提供用户服务,具体功能由特定的程序而定
表示层:数据的压缩优化,加密
会话层:建立应用级的连接,选择传输服务
传输层:提供不同的传输服务.流量控制
网络层:路由选择,网络互连
链路层:进行数据交换,具体消息的发送,链路连接
物理层:物理硬件,借口设定,网卡路由交换机等
---------------------
问题2: TCP三次握手是什么?
简单解释:
三次握手:tcp传输在数据传输前建立连接的过程
1 客户端向服务器发送连接请求
2 服务器收到请求后,回复确认消息,表示允许连接
3 客户端收到服务器恢复,进行最终标志发送确认连接
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如上面那个图所示:
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
问题3: TCP四次挥手是什么?
简单解释:
四次挥手:tcp传输在连接断开前进行断开确认的过程
1 主动方发动报文告知被动方要断开连接
2 被动方收到请求后立即返回报文告知已经准备断开
3 被动方准备就绪后再次发送报文告知可以断开
4 主动方发送消息,确认最终断开
所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
问题3: 线程和进程是什么?
线程: 是操作系统能够运行运算调度的最小单位,在进程之中是进程中实际运作单位.一条线程指的是进程中一个单一顺序的控制流.一个进程中可以并发多个线程,每条线程并行执行不同的任务.一个线程是一个execution context(执行上下文),即一个cpu执行时所需压迫的一串指令.
进程:一个程序的执行实例就是一个进程,每一个进程提供执行程序所需的所有资源.一个进程有一个虚拟的地址空间,可执行代码,操作系统的接口,安全的上下文(记录启动流进程的用户和权限等),唯一的进程ID,环境变量,优先级类,内存空间,还至少有一个线程.一个进程启动时,最先产生一个线程,即主线程,然后主线程创建其他子线程.
区别与联系:
1. 同一个进程中的线程共享同一内存空间,进程间是独立的.
2. 同一个进程中的所有线程数据共享的,(进程通讯),进程之间的数据是独立的.
3. 对主线程的修改可能会影响其他线程的行为,但是父进程的修改(除删除外),不影响其他子进程.
4. 线程是一个上下文的执行指令,而进程则是与运算相关的一簇资源.
5. 同一个进程的线程之间可以通信,但是进程之间需要借助中间代理实现通信.
6. 创建新的线程容易,但创建新的进程需要对父进程做一次复制.
7. 一个线程可操作同一进程的其他线程,但进程只能操作其子进程.
8. 线程启动速度快,进程启动速度慢(两者速度无可比性).
其他: 线程和进程的操作是由程序触发系统接口,最后的执行者是系统.
协程:
协程的操作则是程序员
协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保持状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。
协程的适用场景: 当程序中存在大量不需要CPU的操作时(IO),适用于协程.
(网络编程包括计算机网络,操作系统,中的知识.后续还有很多,之后会再补充.)