在正式开始学习Python网络编程之前,先来补充一点网络基础知识。
TCP
Internet是在一些共享线路上发送数据的。为了实现共享,TCP通过把你要发送的数据流分解成很多小信息包在Internet传输,而这些信息报到了接受者的地方会再次重新合成在一起。通过分成很小的数据包,Internet链接就会用很少的时间来发送数据的每一个比特,而其他程序的数据包也可以同时传送。(像电话这种类型的设备是独占线路的,如果你想跟朋友聊天的同时发送电话传真,至少需要两根线路。如果每个软件都独占一根网线,那么卖网线一定赚的要死)
为了准确的将数据包发送到指定位置,TCP通过IP确定机器,通过端口号确定哪个软件需要接收你的数据。
TCP是个可靠的协议,为了防止数据在传输的过程中被损坏,每个信息包都包含一个效验码,验证失败信息包就会被省略;为了防止信息报丢失,TCP要求接收方每收到一个信息报都要反馈一下,没收到反馈将重发数据包;为了防止信息包重复或者顺序错误,TCP每传送一个信息包都会传送一个序号,接收方将按顺序合并,如果借到重复序号的数据包则抛弃。
路由
为了使数据包顺利的从机器传送到远程服务器上,数据包常常会经过不同的网络。路由器是互联网络的枢纽,充当"交通警察"的角色。在windows中我们可以通过tracert(linux通过
traceroute、 mtr)命令查看经由的路由器 。
SSL与TLS
在线路和路由器上传送的数据包是可以被抓取的,你一定不希望在淘宝剁手正欢的时候被陌生人抓取你的账户信息。还有种潜在风险是你的连接可能被拦截并把你转向另一个钓鱼网站。程序猿发明了好多方法来解决上述问题,其中最流行的就是SSL和TLS。
SSL一般建立在TCP连接之上,它可以提供服务器认证、加密、数据完整性的功能。TLS与SSL类似,他是SSL的继任者。
C/S模式
在客户端/服务器结构下,服务器一直在侦听来自客户端的请求,有请求之后就建立连接处理他们。通常服务器会使用大家都知道的端口号(如80),而客户端则会由系统随机分配一个保证没被使用的短命的端口。
UDP
UDP被用来发送非常短的消息。它既不能保证数据是否真的能被收到,也不能保证数据是否只接收一次,还不能保证信息次序是否与发送时一致。但是,只要没受到攻击者绕过安全措施后的攻击,通过UDP接受的数据通常都是完整的。
TCP建立关闭连接要话费时间,而UDP不需要建立连接,所以不存在花费时间建立、关闭连接的问题。
UDP常被用在流式视频音频应用软件,反正偶尔丢几个包也看不出来,如果用TCP严格处理丢失的信息包,视频反而不能看了。除此以外,很多网络游戏(极品飞车)、网络文件系统(samba服务器)也大量使用UDP。
Get与Post的区别
1. get用于从服务器上获取数据,post用于向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。
(如图,个个参数用&分割)
post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但收到服务器软件约束,如IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
HTTP
HTTP(超文本传输协议)封装了Web页面服务的整个过程,他是Web的基石。由于这个协议是面对客户/服务器通信之用,所以它主要就是由请求(request,客户端到服务器)和相应(response,服务器到客户端)两个补分组成。而两者之间的服务器上发生的事情不属于HTTP关心的范畴。
如果有什么疑问欢迎到我的微信公众号提问~