首页 > 编程知识 正文

编程是不是很难(学网络好还是学编程好)

时间:2023-05-06 01:59:17 阅读:86472 作者:750

# #一外网通信和P2P

生活中,我们普遍使用的互联网都是网络通信,还有Wechat、支付宝(Alipay )等APP应用,当然也有很多内部网的APP应用(企业内部视频会议、VPN等),但

外网通信开发需要知道外网IP和端口。 在ip38 (可以检查IP地址和域名的网站)中可以看到外网IP,但是通过路由器连接到互联网时需要端口映射。

##1.Wechat和QQ的通信理解

在Wechat通信中使用了HTTP短链接和TCP长链接,没有使用UDP。 其中,登录验证、头像身份信息和日志等功能使用HTTP,文本消息、语音消息、视频消息、图像消息等使用TCP长链接。 通过心跳包维持长时间的连接状态,300S为1次心跳,聊天视频聊天为UDP,消息为TCP。 (通过随身携带WIFI,用wireshark抓包就知道了(33603359 www.oschina.net/question/104204 _ 112824

q登录时采用TCP协议和HTTP协议,与朋友的消息发送主要采用UDP协议,内部网文档采用P2P技术。

1 .登录过程,客户端客户端使用TCP协议向服务器发送信息,HTTP协议下载信息。 登录后,有TCP连接以保持在线状态。 2 .和朋友发送信息。 客户端客户端采用的是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 .套接字拦截绑定用于创建套接字套接字的bind的listen

4 .对方主动连接connect-接收连接请求accept (新的套接字被创建);

5 .使用新的插座进行send/write-对方的revc/read的通信

6 .结算

TCP、UDP的优缺点比较

UDP的系统资源少,有数据包丢失的可能性

TCP是可靠的传输。 下载时、telnet时.

UDP是不可靠的传输。 视频、语音聊天.

# # # #

TCP和UDP使用IP协议将包从一个网络传输到另一个网络。 IP就像一条高速公路,允许其他协议在其上运行,从而找到其他计算机的出口。 TCP和UDP是高速公路上的“轨道”,它们具有HTTP、文件传输协议FTP之类的协议等。 TCP和UDP是在FTP、HTTP和SMTP等中使用的传输层协议。 TCP和UDP都用于传输其他协议,但TCP提供有保证的数据传输,但不提供UDP。 也就是说,TCP有确保数据安全的特殊机制,UDP不提供这样的保证。 超文本传输协议(HTP )是利用TCP在两台计算机(通常为Web服务器和客户端)之间传输信息的协议。 客户端使用Web浏览器向Web服务器发送HTTP请求,Web服务器向客户端发送请求的信息。 请记住,连接到网络需要IP协议; TCP是一种安全传输数据的机制,而使用TCP协议传输数据的HTTP是Web服务器和客户端使用的特殊协议。 套接字接口是TCP/IP网络的API,它定义了许多用于在TCP/IP网络上开发APP应用程序的函数或例程。

TCP/IP握手详细信息:https://blog.csdn.net/Huangshu lang 1234/article/details/79061438

TCPUDP的几种常用IO模型

1.TCP同时块IO :多线程实现

如果实施了多进程并且无法连接,则端口可能会被占用。

IO多路复用

####

通信步骤(主要将UDP升级为TCP ) :

插座SKT_FD=申请插座(af_inet,SOCK_STREAM,0 );

/* af _ inet :使用IP v4的协议sock _ stream :使用TCP通信0 :使用标准协议,返回网络操作的密钥*/

维修侧

/*IP绑定IP地址结构和套接字,实现资源初始化*

RTV=绑定(SKT _ FD,)结构套接字* ) SKT _添加,尺寸) SKT _添加);

{/*监听:设定网络最大同时通信数:2*/

RTV=Listen(SKT_FD,

2);

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2636843-58f0accf4775f0a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

}

客户端

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

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2636843-89ca53d73a4a93c0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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个数为0~255任意数,我们就拿最后一个数(也就是Ip二进制后8位)来说吧,可用的IP地址一般不是以0或255结尾,以0结尾的一般表示网络地址,255结尾的是广播地址,也就是说我们用的IP地址是1~254结尾之间的,这其中以1或254结尾的地址常常会用作网关地址,所以我们电脑用的ip后面一般是1~253或2~254之间的数结尾的。

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](http://upload-images.jianshu.io/upload_images/2636843-7ac2a4492652787f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

例: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

![【喵叫瘦星人】,一只有温度的寄生兽](https://upload-images.jianshu.io/upload_images/2636843-31e10ec0831fae3b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。