问 题 实际现象 今天在整理东西的时候, 不经意间看了看自己办理的宽带的合同, 突然发现上面和我签订合同的乙方, 竟然不是电信, 而是一个没有听过的公司:http://www.tianyancha.com/com... 我一直以为自己的宽带是电信宽带, 那么对应的, 和我签订合同的应该是电信( 而不是什么莫名其妙的公司 ) 然后去ipip上查了自己的出口ip ( ipip的准确度应该是可以信赖的 ), 信息如下 您当前的IP:183.193.25.107 中国上海 移动 如下问题: 在中国, 实际拥有宽带的有电信, 联通, 移动, 对不对 ? 其他的乱七八糟的宽带分类, 它们是不是相当于"二次销售" ? ( 从1中的3个运营商那里批发, 然后出售 ) 接2, 既然如此, 为何2中的宽带可以做到" 比一级运营商的宽带费用还便宜 " ? ( 同等变量条件下 ) http://www.tianyancha.com/com... 这个公司,
以下是关于 网络 的编程技术问答
问 题 最近在读 shadowsocks 的源码,有一些疑惑。 shadowsocks 每次通过 epoll 监听到新连接之后,程序都会阻塞一段时间去执行 on_remote_read() 或 on_remote_write() 来传输数据,数据传输完毕之后才会再次调用 epoll 并 accept 新的 socket 连接,当连接达到一定数量之后,会出现高延迟、低效率的情况啊 # 在知乎上问了这个问题,没人理只好来 SegmentFault 啦~ 解决方案 因为这个过程是高CPU、高内存的操作,而非高硬盘IO的操作,也就是说,这个过程考验的是CPU性能。而我们知道,计算机了没有真正的多进程或是多线程,都是通过CPU调度模拟出来的。那么对于高CPU的操作,最好就是用单进程或者单线程的方法来处理(多核心可考虑增加),这样才是最高效的办法,因为这样避免了线程或进程来回切换带来的消耗。 这块可以参考Nginx的架构,Nginx的高负载也是在单进程中完成的。
问 题 因为我在f12里看到,当我Post表单的时候,formdata里的username和Password都是明文的,那么,这个数据传输出去以后,在路上的时候到底有没有被加密? 解决方案 没有加密, 明文传输的 比如你在POST提交表单时, 数据按HTTP协议封装成http报文, 计算机把该http报文直接交付给下层tcp协议,tcp协议通过三次握手建立与目的主机的通信, 把该数据包交付下层IP协议, IP协议把数据包封装成IP数据包从而交给下层数据链路层传输到目的主机。 当你使用https是, 数据在传输过程中是经过加密的, 若使用https, 则数据包在交付给TCP协议前, 会先把数据交给位于http和tcp中间的ssl, 数据包先经过ssl按特定加密, 在传输给下层协议 所以理论上说, https协议是安全的
问 题 比如www.baidu.com , 和 baidu.com , 有网友说www是主机名,我不知道是什么意思, 我只知道com是一级域名,baidu是二级域名,那么www是三级域名吗?是主机名吗?不好意思,我真不知道,希望可以解答一下,十分感谢! 解决方案 baidu 是域名 .com 是域名后缀 完整的域名是 baidu.com 相同的域名 不同的域名后缀 组合起来是不同的域名 如 baidu.cn、baidu.tv 购买者不一定是百度 www 是主机名 随意填写 域名解析的时候填写主机记录和记录值 (服务器 IP 或域名) 意思是将 www.baidu.com 解析到哪 不同的主机名可以解析到不同的 IP *.baidu.com 都属于 baidu.com 如 tieba.baidu.com 是 baidu.com 的子域名(二级域名) 属于百度
问 题 本地用node.js创建一个服务监听80端口,我在浏览器访问比如:www.baidu.com 在node.js里log不出req.headers。而访问127.0.0.1就能获得headers。 是不是服务是本地的,必须要本地访问,而访问www.baidu.com是访问百度的服务器。但都是通过80端口了,不清楚其原理为什么?(求大神指导。) 这个问题已被关闭,原因:问题已解决 - 问题已解决,且对他人无借鉴意义 解决方案 你访问百度的80端口,这个80端口是对方的。本地是分配了一个动态端口去连的。 本地开放的80端口是监听“别人”的连接,当别人访问你的IP时(当然也包括你自己访问自己的反射性IP [::1]),连接的是你的80端口
问 题 用socket模块建立的socket服务端,比如监听了本地的4399端口。用浏览器连接,但是显示不了socket发来的字符。 这该怎么办? 解决方案 因为你的端口不是80, 所以浏览器没法用http协议去解析你的请求, 因为它不认识4399是干嘛的, 所以如果你想用监听4399,并且用浏览器看到socket服务端发送的消息, 你就必须自己构建http报文 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # tcp 报文 s.bind(('localhost', 4399)) s.listen(2) req, req_info = s.accept() req.recv(65549) # http协议头是文本形式, 以\r\n作为每个字段的分隔, 最后头部以\r\n结束, 所以我们主要构造好 http头, 浏览器就能识别的, 接下来的正文, 就能按照html的标准
问 题 未来有没有可能改进协议,让端口大于这个数字。 解决方案 65535个端口还不够? 全球现有的IPv4地址一共有2的32次方个。 理论上: 两台互联的电脑之间,使用不同端口,最多可以建立 65535*65535 个TCP/IP连接。 同1个端口(例如都使用80),一台电脑最多可以和全世界所有联网设备建立 2的32次方 个TCP/IP连接。 你要说IP不够用,现在有IPv6了,端口什么的,真心够用了。 监听一个端口,至少需要1个线程吧。 一般的电脑,据说几千个线程,操作系统连线程的调度都会很卡,根本用不到这么多端口。 Update at 20170620: 来来来,不服就踩,毕竟只敢匿名玩的辣鸡。 总结答案,别说65535个端口,即使只有1个端口也够了。 在协议完善,复用充分的情况下,可以实现无限量的通信需求。 同理,你要觉得操作系统1个进程不够用,用一个进程开个虚拟机,爱怎么玩怎么玩。 回复评论: Q1 监听1个
问 题 重装Ubuntu 16.04之后eth0不见了,之前都有的,输入ifconfig -a的结果如下: enp5s0 Link encap:Ethernet HWaddr 28:d2:44:98:e8:d8 inet6 addr: fe80::edad:34e9:52a2:790f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1303966 errors:0 dropped:12 overruns:0 frame:0 TX packets:243162 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:314699523 (314
问 题 假设服务器跑着这样一段简单的flask代码: app = Flask() @app.route('/') def index(): return render_temple('index.html') 这时候服务器来了两个访问请求,这两个请求都被路由到@app.route('/'). 请问flask是如何同时处理这两个请求的 ? 如果我的代码没有实现任何并发功能,flask会自动帮我处理并发请求吗 ? 如果有Nginx这类HTTP服务器,情况又是怎样? 希望各位能指导下,给个解答或者指明下学习方向都行 ! 万分感谢 ! 解决方案 这段程序只是一个APP服务的一个路由。你的APP服务又被用WSGI接入到HTTP服务器,就是你说的nginx。这个问题跟nginx无关,因为这里它只是一个通道。跟Flask也无关,因为它只是负责根据Request产生Response。有关的就是WSGI server。通常来讲WSGI server是通过