iOS理解网络简介网络体系结构网络体系结构把网络功能进行了层次拆分,不同的体系结构有不同的划分方式物理层:物

原生移动端主流的2种网络请求协议,分别是HTTP请求和WebSocket请求

URL是(UniformResourceLocator)的缩写,统一资源定位器。通常DomainName也被称作Host

RESTful中通常使用JSON作为URL指向的资源,使用HTTPMethod表示处理动作增删改查

(TransmissionControlProtocol)是一个提供了可靠的,有序的,错误检查的在不同主机间的数据传输的面向链接的协议,需要使用三次握手和四次挥手来建立和断开链接,链接建立好之后才开始传输数据。TCP设计用来处理拥塞和网络错误,并且可以通过自动重新传输丢失的数据包来保证数据传输的可靠性。

四要素对应一个链接

(UserDatagramProtocol)是一个无链接的协议提供不可靠和无序的数据传输。在传输数据之前不需要建立链接,并且不提供任何数据重传和数据纠错功能。

超文本传输协议(Hyper-TextTransferProtocol),超越普通文本,因为还包含了文字,图片,视频等,HTML就是常见的超文本

HTTP的Request和Response结构主要由Status-Line,Header和Body或者说是Payload组成

Request

Response

HTTP协议中使用statusCode来标识response的状态

队头阻塞

队头阻塞是指单个(慢)对象阻止其他/后续的对象前进

由于HTTP1.1是纯文本协议,只通过Header中的Content-Length来判断资源大小,不会进一步区分单个大块资源与其他资源。所以在一个链接上会一个一个完整的传输资源,如果前面的资源创建缓慢或者过大,会导致队头阻塞问题。这是HTTP协议导致的队头阻塞

由于前端H5场景下,需要加载的api,css,js,img等资源更多,所以做了如下优化。在移动端的场景下,主要还是api接口,数量也较少。

HTTP1.1中导致队头阻塞是因为在资源块(resourcechunks)之间没有分隔符和标识符,只能打开多个并行链接来解决。而在HTTP2.0中在单个TCP链接上解决了队头阻塞的问题,在资源块前面加上了帧(frames)。

Dataframe包含了2个关键的元数据

简单描述的话,可能是这样拆分不同资源,混合传输,通过steamid进行组合,甚至可以加上优先级策略,决定传输的分配和顺序。

不过HTTP/2还是无法解决TCP协议导致的队头阻塞。TCP基于自身的握手和数据确认机制,提供了可靠的链接。假设在传输1,2,3数据包,接收到1的数据包时,TCP交付数据。但是如果接收到3数据包,2数据包丢失时,3数据包将不会被交付,而是保存在接收缓冲区中(receivebuffer)等待2数据的重传,之后按照顺序再交付这两个数据包。此时数据包2队头阻塞了数据包3。TCP相当于时顺序交付。

由于HTTP/2中单TCP链接承载了多种不同资源,所以TCP队头阻塞的情况会造成传输性能的降低。

队头阻塞真是实实在在推动了HTTP协议的发展,感谢队头阻塞。当然减少RTT也是推动网络协议发展的重要因素。

继续解决HTTP/2中TCP队头阻塞的问题,由于TCP协议的广泛使用,导致升级TCP协议可行性低,QUIC中使用了UDP协议来解决这个问题。与HTTP/2中的数据帧类似,QUIC中添加了流帧(streamframes)分别跟踪每个流的字节范围。QUIC在出现数据包丢失的时候,会判断流中的预期数据是否接收到,已经接收到预期数据就交付,反之等待丢失的数据包重传。

QUIC数据可能不再以与发送时完全相同的顺序交付,相当于在单个资源流中保留了顺序,但不再夸单个流(individualstreams)进行排序。

Streamframe

应用层协议协商(Application-LayerProtocolNegotiation),是一个传输层安全协议(TLS)的扩展,ALPN使得应用层可以协商在安全连接层之上使用什么协议,比如是使用HTTP1.1还是使用HTTP2.0,避免了额外的往返通讯。

NPN是服务端发送所支持的HTTP协议列表,由客户端选择;NPN的协商结果是在ChangeCipherSpec之后加密发送给服务端

ALPN是客户端发送所支持的HTTP协议列表,由服务端选择;ALPN的协商结果是通过ServerHello明文发给客户端

HTTPS是在HTTP协议基础加上TLS加密的实现。

传输层安全协议(TransportLayerSercurity)以及前身安全套接层(SecureSocketsLayer,SSL),是一种安全协议。

TLS协议采用主从式架构模型,用于在两个应用程序间透过网络创建起安全的连线,防止在交换资料时受到窃听及修改。

TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。

TLS包含三个主要组件

握手过程

2RTT

1RTT

OCSP(OnlineCertificateStatusProtocol,在线证书状态协议)是由数字证书颁发机构CA(CertificateAuthority)提供,客户端通过OCSP可实时验证证书的合法性和有效性。

你使用URLSession实例创建一个或多个URLSessionTask实例,这些URLSessionTask实例可以获取数据、下载文件或将数据和文件上传到服务器。要配置会话,请使用URLSessionConfiguration对象,该对象控制行为,例如如何使用缓存和cookie,或者是否允许在蜂窝网络上进行连接。

你可以重复使用一个会话来创建任务。例如,网络浏览器可能有分开的会话供常规浏览和私人浏览使用,而私人会话不会缓存其数据。

执行流程

代码示例

CFNetwork是CoreServices框架中的一个框架,它为网络协议提供了一个抽象库。这些抽象使执行各种网络任务变得容易,例如:

CFNetwork框架分两部分

基础API:

CFNetworkAPI:

curl在macOS系统上是默认集成的,你可以通过命令来使用

curlwww.baidu.com在iOS上,libcurl有对应的framework,可以集成framework进行网络方面的开发

size_twrite_callback(void*ptr,size_tsize,size_tnmemb,void*userdata){size_trealsize=size*nmemb;char*response=(char*)malloc(realsize+1);if(response==NULL){return0;}memcpy(response,ptr,realsize);response[realsize]='\0';char*old_data=(char*)userdata;char*new_data=realloc(old_data,strlen(old_data)+realsize+1);if(new_data==NULL){free(response);return0;}strcat(new_data,response);free(response);userdata=new_data;returnrealsize;}CronetCronet是谷歌开发的网络库,提供了一个标准的iOS网络库。Cronet跟libcurl一样,是可以做成多端统一的实现

iOS中WKWebView作为WebKit的容器工具提供了用来加载和渲染web内容的高层级的API

//处理responsefuncwebView(_webView:WKWebView,didFinishnavigation:WKNavigation!){webView.evaluateJavaScript("document.documentElement.outerHTML.toString()"){(html:Any,error:Error)iniflethtmlString=htmlasString{print("Response:(htmlString)")}}}WebsocketWebSocket是一种在单个TCP连接上进行全双工通信的协议,iOS中可以依赖与Starscream库,这个库使用Swift对WebSocket端做了实现。

importStarscream//创建socket对象letsocket=WebSocket(url:URL(string:"wss://example.com")!)//设置代理socket.delegate=self//链接到webSocketsocket.connect()实现WebSocketDelegate协议来处理WebSocket事件

funcwebsocketDidConnect(socket:WebSocketClient){print("WebSocketconnected")socket.write(string:"Hello,server!")}funcwebsocketDidReceiveMessage(socket:WebSocketClient,text:String){print("Receivedmessage:(text)")}funcwebsocketDidDisconnect(socket:WebSocketClient,error:Error){ifleterror=error{print("WebSocketdisconnectedwitherror:(error)")}else{print("WebSocketdisconnected")}}发消息

//发消息socket.write(string:"Hello,server!")断开链接

操作系统通常会为应用程序提供一组应用程序接口(API),称为套接字接口(socketAPI)。应用程序可以通过套接字接口,来使用网络套接字交换数据。最早的套接字接口来自于4.2BSD,因此现代常见的套接字接口大多源自Berkeley套接字(Berkeleysockets)标准。在套接字接口中,以IP地址及端口组成套接字地址(socketaddress)。远程的套接字地址,以及本地的套接字地址完成连线后,再加上使用的协议(protocol),这个五元组(five-elementtuple),作为套接字对(socketpairs),之后就可以彼此交换资料。

socket是一种操作系统提供的进程间通信机制,实际做的事情就是对TCP/UDP等操作抽象成了几个工作。

套接字地址结构

structsockaddr_in{uint16_tsin_family;uint16_tsin_port;structin_addrsin_addr;unsignedcharsin_zero[8];};structsockaddr{uint16_tsa_family;charsa_data[14];}客户端和服务器使用socket函数来创建一个套接字描述符(socketdescriptor)。

accept函数等待来自客户端的连接请求到达侦听描述符listenfd,然后再addr中填写客户端你的套接字地址,并返回一个已链接描述符(connectdescriptor),这个描述符可被用来利用UnixI/O函数与客户端通信。

getnameinfo函数和getaddrinfo函数时相反,将一个套接字地址结构转换成相应的主机和服务名字符串

异地多活的方案可以增加可用性,提升性能,提升扩展性,更好的灵活性,更好的灾备和恢复能力。当前的主流云厂商都给出了自己的方案,可以参考和部署。

自研

IP直连使用了下发和择优机制,避开了传统DNS的过程,也避免了传统DNS统一被篡改和解析性能不佳的问题。在建立链接的时候直接使用了ip,但是在链接的过程中证书等还是需要对host进行验证,从而会带来一些问题

建立链接是相对耗时的阶段,所以链接复用率是重要的性能指标,尽可能的减少链接的建立和耗时。

THE END
1.计算机的网络体系结构硬件组成和网络分类计算机网络结构可以从网络体系(NetworkArchitecture)结构,网络组织和网络配置三个方面来描述。网络体系结构是从功能上来描述,指计算机网络层次结构模型和各层协议的集合;网络组织是从网络的物理结构和网络的实现两方面来描述;网络配置是从网络应用方面来描述计算机网络的布局、硬件、软件和通信线路。 https://blog.csdn.net/2401_89319128/article/details/144092531
2.为什么需要网络体系结构在信息技术日新月异的今天,网络已经成为我们生活、工作中不可或缺的一部分。对于参加软考的考生来说,深入理解网络体系结构不仅是为了应对考试,更是为了在实际工作中能够灵活运用网络知识,解决实际问题。那么,为什么我们需要网络体系结构呢?它在我们的学习、工作和软考中又扮演着怎样的角色? https://blog.51cto.com/u_14545997/11359187
3.网络架构是什么意思网络架构(network architecture)指的是计算机网络的设计方案和组成部分的结构。一个网络架构必须能够满足用户对网络的需求,提供高效、可靠、安全的数据传输服务。网络架构的重要性在以互联网为代表的当今信息化时代显得尤为突出。 从技术角度来看,网络架构包括多个层次的子系统,其中每个子系统负责特定的任务。由于网络架构不http://kaoshi.educity.cn/rk/uvzvkqd3dc.html
4.基础计算机网络1认识计算机网络体系结构,了解计算机网络的本章主要介绍计算机网络体系结构的基本概念,读者可以在理解的基础上适当地记忆。重点掌握网络的分层结构(包括5层和7层结构),尤其是ISO/OSI参考模型各层的功能及相关协议、接口和服务等概念。掌握有关网络的各项性能指标。特别是时延、带宽、速率和吞吐量等的计算。 https://developer.aliyun.com/article/1326402
5.IT架构师介绍软件架构设计学习第一天(非原创)业务架构其实已经开始脱离技术层面了,但是它要求架构师有跨越多系统的大局观,去整合和组织不同系统的技术平台与交互模式。其实这个职位的未来也就是CIO了。 主要内容:理解业务,梳理模型,设计模式,接口,数据交互。 1.5 网络架构师 过去,我们可能听的最多的是网络工程师。不错,一个优秀的网络架构师必须有足够的网络技https://www.jianshu.com/p/f9a4525ad3fb
6.城市轨道交通OA协同办公系统解决方案产品采用B/S模式,基于SOA体系架构,保证了产品技术的先进性、开放性及与平台的无关性等;利用强大的邮件、协作、文档处理及安全机制,结合关系型数据库擅长处理结构化业务数据的特点,完美地解决了数据类型复杂、实时协作和安全控制要求高的需求。 5.3实时协作,支持移动办公 https://www.deerpu.cn/solution-11.html
7.网络信息安全培训方案8篇(全文)1.1 建立信息安全体系的理解和观念淡薄 很多学校现在都设置有网络中心和信息中心两个部门,但是在具体的事物上部门之间的衔接与配合问题多多,主要体现在:网络中心疲于应付飞速增长的病毒和木马,天天焦头烂额;信息中心对于学校重要信息的保护缺乏整体的构建,导致重要数据丢失,学生成绩查询系统和学校网站主页被篡改的情况时有https://www.99xueshu.com/w/filex50luf3l.html
8.招计算机类专业!2024招商银行招银网络科技社会招聘公告(深圳市2、熟悉大数据技术生态圈,精通大数据技术架构,有大数据平台构建经验; 3、熟悉数据仓库和大数据技术和应用体系,对大数据技术的发展方向和架构演进有深刻理解; 4、熟悉主数据、元数据、数据质量、数据资产目录和数据建模等数据治理相关的体系和方法; 5、3年以上大数据相关工作经验(数仓开发,数仓管理,数据治理方面)。 https://www.gaodun.com/jr/1590779.html
9.网络信息体系技术架构网络信息技术的快速发展给世界范围带来了巨大变革,信息化条件下作战中呈现出体系对抗的鲜明特征,网络信息体系建设面临挑战和机遇,成为全军重大课题之一。我军的网络信息体系初具规模、成效显著,但相关技术规范并不完全统一,缺乏整体设计构架。通过网络信息体系技术架构参考模型,从需求到技术剖析了参考模型中的关键部分,为构https://www.zhkzyfz.cn/CN/10.3969/j.issn.1673-3819.2017.06.001