网络编程

一 外网通信与P2P

生活中,我们普遍使用的网络都是外网通信,像微信、支付宝这些应用,当然也有许多内网的应用(企业内部视频会议,VPN等等),此文暂且不表;
外网通信开发中需要知道外网IP与端口, IP38(一个可以查询IP地址或域名的网站)上可以看到外网IP, 但是如果你是路由器上网, 那么需要作端口映射。

1.微信与QQ的通信了解

微信通讯中使用了HTTP短连接和TCP长连接,并没有用到UDP,其中登陆验证和头像身份信息及日志等功能采用的HTTP,文本消息、语音消息、视频消息、图片消息这些使用的是TCP长连接。通过心跳包来维护长连接状态,300S一个心跳 ,微信视频聊天是UDP,信息是TCP。(可以通过随身WIFI,用wireshark抓一下包就知道了)引:https://www.oschina.net/question/104204_112824
QQ登陆时采用TCP协议和HTTP协议,和好友之间发送消息主要采用UDP协议,内网传文件采用了P2P技术。
1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。如果单就QQ用户消息的传递而言:最早年是UDP,而且是P2P的。原因前面很多同学提了。1)P2P的UDP穿透容易。这个应该是主要原因。2)UDP成本低。用过老QQ应该还记得很多时候有消息无法传递到对端的事情。有人还记得当年的QQ可以查看对方的地点吗。就是通过IP转换查询得到的。当然使用UDP并不完美呀。安全问题就很麻烦。现在,如果没记错后面都是TCP的了。而且已经都是C/S架构的了。主要改进的原因还是安全吧。改进的时间应该在06年左右。当然其他很多东西的传输也还有走UDP的。

王者荣耀更新:模仿TCP的UDP协议(腾讯自己封装)

TCP完整通信过程
1.创建套接字socket;2.绑定bind;3.监听listen;
4.对方主动连接connect-接收连接请求accept(会创建新的套接字);
5.使用新的套接字通信send/write-对方revc/read;
6.close

TCP、UDP优缺点比较
UDP占有系统资源少,可能会丢包
TCP是可靠的传输。下载时,telnet时....
UDP是不可靠传输。视频,语音聊天....

2.TCP/UDP/HTTP 详解

TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就像HTTP,文件传输协议FTP这样的协议等。TCP和UDP是FTP,HTTP和SMTP之类使用的传输层协议。虽然TCP和UDP都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。记住,需要IP协议来连接网络;TCP是一种允许我们安全传输数据的机制,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。

TCP/IP握手详解:https://blog.csdn.net/huangshulang1234/article/details/79061438
TCP&UDP几种常见IO模型
1.TCP并发阻塞IO:多线程实现
多进程实现,出现无法连接时有可能端口被占用;
IO多路复用

Socket编程(TCP/UDP的API)

通讯步骤(UDP为主 升级到TCP):
①申请socket套接字 skt_fd = socket( AF_INET, SOCK_STREAM, 0);
/AF_INET:使用IPV4的协议 SOCK_STREAM:使用tcp通信 0:使用标准协议,返回一个针对网络操作钥匙/
②服务端
/绑定IP地址结构体和套接字,实现资源初始化/
rtv = bind(skt_fd, (struct sockaddr )&skt_addr, sizeof(skt_addr));
{/
监听:设置网络最大同时通信数量:2*/
rtv = listen(skt_fd, 2);

Paste_Image.png

}
客户端
connect连接 rtv = connect(skt_fd, (struct sockaddr )&skt_addr, sizeof(skt_addr));/skt_addr是IPV4结构体sockaddr_in对象*/

Paste_Image.png

1.htonl(INADDR_ANY);//登记本机所有网卡
③收rtv = read(clt_fd, buf, sizeof(buf));发rtv=write(skt_fd,buf,sizeof(buf));
sendto(skt_fd, buf, sizeof(buf),0,(struct sockaddr *)&clt_addr, &len );
recvFrom
④关闭close(skt_fd);
bind的端就叫发送端,谁先接收谁绑定bind bind自己的IP 两边都绑定
接收端bind后占用解除 sinsize = 1;
一个套接字建立一个连接,connect只用使用一次 客户端/服务端都一样
收发函数send() recv()
字符串转整数函数:atoi()

四类网络地址(传统32位)-通俗讲解
A:第一字节网络地址 二三四字节主机地址 0开始
B:二 10
C:三 110
D:
一般不用0和255
前三个数第一个不可以是0,其他2个数为0255任意数,我们就拿最后一个数(也就是Ip二进制后8位)来说吧,可用的IP地址一般不是以0或255结尾,以0结尾的一般表示网络地址,255结尾的是广播地址,也就是说我们用的IP地址是1254结尾之间的,这其中以1或254结尾的地址常常会用作网关地址,所以我们电脑用的ip后面一般是1253或2254之间的数结尾的。
IP地址分类 C类网络号占三段(24位)
IP数据报重组:分片发生在路由上 重组在目的主机 数据包首部包含分片信息
TCP四次握手:SYN建立连接 FIN关闭连接 ACK响应 PSH有DATA数据传输 RST连接重置 首部报文包含内容 URG=1紧急封包

动起来

1.小项目

上面说了一大堆理论知识,现在让我们来亲手实践一下,用最简单的tcp/ip协议来实现一个简单的局域网通信小程序吧;




2.中等实例

带UI多人局域网聊天

3.网络服务器

多人群聊
文件传输
在线视频

二 联网技术应用及DLNA介绍

https://blog.csdn.net/gebitan505/article/details/19497545
使用Platium库开发dlna投屏功能:https://blog.csdn.net/w_z_z_1991/article/details/52926219 里面介绍很好
《智能家庭网络:技术、标准与应用实践》
https://openconnectivity.org/developer/developer-kit
电脑控制手机:Vysor https://blog.csdn.net/nongminkouhao/article/details/81265820

三 常见的网络开发问题

1.C10K(10000 connection)

描述:
解决方案:

2.音视频传输

延时 包的大小 图像/视频压缩 内/外网

3.并发处理

1.epoll这种可以支持成千上万tcp并发连接
2.udp模拟tcp,udp缺点及优化
3.TCP维持多人同时在线是个问题[1], 涉及到服务器数量,系统调优,编程手段等很多方面
4.QQ UDP丢包重发机制(缓存MTU设置 头部信息 切包 编号 多线程收发)

4.多线程与互斥锁(解决并发问题)

对返回的skt_fd操作即可.png

常见的网络通信流程(每层对应的硬件有哪些)及通信流程解析

例:QQ->物理层(网卡,厂商提供) 数据链路层(网卡驱动 通信协议)
会话层:登录 加密算法 应用层:QQ界面程序 表示层:解密
路由器 交换机:①网路层(ip协议,路由:数据发送路径[路由协议(算法)用来解决何种效率最高])②数据链路层(安全 效率)路由器国内研发主要方向:优化协议 算法 虚拟网卡->软件代替硬件 什么是AP QOS模式,带双WAN 下载续传
路由表-数据结构,算法算出最高效路径端口号(0-65535,2个字节,16位二进制,实际从1024开始用,之前有大部分有系统用)

即时聊天架构解析(即时通讯网 http://www.52im.net/thread-33-1-1.html)
1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。
2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。

好书、资料推荐

《C++设计新思维泛型编程与设计模式之应用》
详细的网络IO模式及流程(讲得很详细):https://www.cnblogs.com/xiehongfeng100/p/4763225.html
DDos攻击的原理:listen有一个队列,处理连接请求。在收到匿名IP发过来的SYN之后,会在listen队列中存放一个记录,但是队列容量是有限的,当这样的恶意请求过多的时候,listen队列里就塞满了这些无效的连接请求,然后装不下更多的连接记录了,所以就拒绝其他请求
REST是什么?怎么用:http://www.cnblogs.com/alex3714/articles/6808013.html
qps和并发:https://blog.csdn.net/leyangjun/article/details/64131491
fastrpc(高性能 c++ 服务器框架, 协程rpc框架):[https://www.oschina.net/p/python-fastrpc][https://enterprise.gitee.com/feimat/fastrpc]
ACE:https://blog.csdn.net/calmreason/article/details/50757535
c socket https://www.cnblogs.com/kefeiGame/p/7246942.html
Http请求与tinyHttpd服务器:http://www.cnblogs.com/qiyeboy/p/6296387.html

Github:https://github.com/kjiawei/smartHome

【喵叫瘦星人】,一只有温度的寄生兽
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容