Python知识总结
1. 什么是TCP,什么是UDP,他们两者有什么区别?
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议。UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。
区别:
1、TCP是面向连接的,两者通信需要建立连接,端对端的传输。UDP是面向无连接的,发送数据之前不需要建立连接。
2、TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP不保证可靠交付。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
2. TCP的三次握手和四次挥手?
seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认,值是等待接收的数据包的序列号。SYN:同步序列编号(Synchronize Sequence Numbers)。
第一次握手:建立连接时,客户端发送syn包(syn=1)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=1),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
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连接的时间要比客户端早一些。
3. HTTP和HTTPS协议的不同之处?
l HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
l HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
l HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
两者区别:
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
1、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
2、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
3、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
4. HTTP八种请求方式
方法 | 描述 |
---|---|
get | 请求指定的页面信息。(向服务器请求指定的资源) |
head | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
post | 向指定资源提交数据进行处理请求,例如提交表单或者上传文件。数据被包含在请求体中。post请求可能会导致新的资源的建立或已有资源的修改。 |
put | 向服务器上传指定的内容 |
delete | 请求服务器删除Request-URL所标识的资源。 |
connect | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
options | 返回服务器对指定资源数据支持的HTTP请求方法,一般用于测试服务器功能的可用性。 |
trace | 回显服务器收到的请求,主要用于测试或诊断 |
get和post的区别?
GET提交的数据会放在URL之后,以?分隔URL和传输数据,参数之间以&相连,如https://www.baidu.com/s?ie=UTF-8&wd=wsgi
提交参数的大小不同。GET产生一个TCP数据包;POST产生两个TCP数据包。
安全问题
GET方式提交数据,会带来安全问题,因为参数是裸露在地址栏上,所以不安全。
POST方式参数在body中,所以安全性较高。(注意:在http协议下,不管哪种提交方式,都是明码提交,只要有抓包工具,都能抓取数据。)
- 是否浏览器可以收藏
GET请求因为参数在地址栏上,因此可以收藏。而POST请求不行,不能被浏览器收藏,因为参数无法被浏览器保存。
5. URI与URL?
URI:(Uniform Resource Identifier),统一资源标识符。HTTP使用URI来传输数据和建立连接。
URL:(Uniform Resource Location),统一资源定位符。是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。