Alamofire(一)-- 网络基础TCP/IP协议简述

最近在学习Alamofire框架的相关知识,这是一个Swift版本的很强大的网络请求库,再深入学习之前,我们先来学习了解一下跟网络协议相关的一些知识。以下的概念内容和背景来自百度百科TCP/IP协议

概念

TCP/IP协议(传输控制协议/互联网协议)不是简单的一个协议,而是一组特别的协议,包括:TCPIPUDPARP等,这些被称为子协议。在这些协议中,最重要、最著名的就是TCPIP。因此,大部分网络管理员称整个协议族为“TCP/IP”。

产生的背景

  • Internet网络的前身ARPANET当时使用的并不是传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol,TCP/IP),而是一种叫网络控制协议(Network Control Protocol,NCP)的网络协议,但随着网络的发展和用户对网络的需求不断提高,设计者们发现,NCP协议存在着很多的缺点以至于不能充分支持ARPANET网络,特别是NCP仅能用于同构环境中(所谓同构环境是网络上的所有计算机都运行相同的操作系统),设计者就认为“同构”这一限制不应被加到一个分布广泛的网络上。1980年,用于“异构”网络环境中的TCP/IP协议研制成功,也就是说,TCP/IP协议可以在各种硬件和操作系统上实现互操作。1982年,ARPANET开始采用TCP/IP协议。
  • TCP/IP始于美国国防部,美国国防部于20世纪60年代末为高级研究计划局网络(ARPAnet,Internet的前身)开发了TCP/IPTCP/IP的迅速流行要归功于它的低成本、可在不同的平台间进行通信的能力和它开放的特性。“开放”的意思是软件开发人员可以自由地使用和修改TCP/IP的核心协议。TCP/IPInternet实际采用的标准。UNIXLinux一直都使用TCP/IPWindows网络操作系统也以TCP/IP作为默认的协议。
  • TCP/IP协议的开发始于20世纪60年代后期,早于OSI参考模型,故不甚符合OSI参考标准。大致来说,TCP协议对应于OSI参考模型的传输层,IP协议对应于网络层。虽然OSI参考模型是计算机网络协议的标准,但由于其开销太大,所以真正采用它的情况并不多。TCP/IP协议则不然,由于它的简洁、实用,从而得到了广泛的应用。可以说,TCP/IP协议已成为建立计算机局域网、广域网的首选协议,已成为事实上的工业标准和国际标准。

协议分层

TCP/IP协议族按照层次由上到下有以下各层,层层包装。

应用层

这一层,向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。

传输层

提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。

网络层

负责相邻计算机之间的通信。其功能包括三方面:

  • 处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
  • 处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
  • 处理路径、流控、拥塞等问题。

数据链路层

这是TCP/IP软件的最低层,负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。

与HTTP关系密切的TCP、IP

IP协议

IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址、MAC地址(Media Access Control Address)。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素外不可能重复。举一个现实生活中的例子,IP地址就如同是我们居住小区的地址,而MAC地址就是我们住的那栋楼那个房间那个人。

TCP协议

  • 如果说IP协议是找到对方的详细地址。那么TCP协议就是把安全的把东西带给对方。各有分工,互不冲突。
  • 按层次分,TCP属于传输层,提供可靠的字节流服务。什么叫字节流服务呢?这个名字听起来让人不知所以然,所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
  • 为了确保信息能够确保准确无误的到达,TCP采用了著名的三次握手策略。

通过上面的概述,引来了咱们的重点知识问题:

  1. TCP建立连接为什么是三次握手,而不是两次或四次?
  2. 为什么又出现了四次挥手?什么是四次挥手?
    接下来,我们来一一解答这个问题。

三次握手

一些名词解释

  • SYN:发起一个新连接
  • ACK:确认序号有效
  • PSH:接收方应该尽快将这个报文交给应用层
  • FIN:释放一个连接
  • RST:重置连接
  • URG:紧急指针(urgent pointer)有效
  • Sequence numberSeq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  • Acknowledge numberAck序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1
  • establish:建立,创建

三次握手流程

所谓的三次握手,即是建立TCP的连接,是指在建立一个TCP的连接时,需要客户端服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:

三次握手

看到上面这图,感觉怎么样?一脸懵了吧,看看上面的名词解释吧。

  • 第一次握手Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给ServerClient进入SYN_SENT状态,等待Server确认。
  • 第二次握手Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYNACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  • 第三次握手Client收到确认后,检查ack是否为J+1ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给ServerServer检查ack是否为K+1ACK是否为1,如果正确则连接建立成功,ClientServer进入ESTABLISHED状态,完成三次握手,随后ClientServer之间可以开始传输数据了。

四次挥手

所谓的四次挥手即是终止TCP连接,就是指断开一个TCP连接时,需要客户端服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端服务端任一方执行close来触发,整个流程如下图所示:

四次握手

由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

  • 第一次挥手Client发送一个FIN,用来关闭ClientServer的数据传送,Client进入FIN_WAIT_1状态。
  • 第二次挥手Server收到FIN后,发送一个ACKClient,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  • 第三次挥手Server发送一个FIN,用来关闭ServerClient的数据传送,Server进入LAST_ACK状态。
  • 第四次挥手Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACKServer,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

当然,还有其他的情况,上面如果是一方主动关闭了连接,另一方被动关闭的情况,实际中,可能还会出现同时发起主动关闭的情况,如下图:


1521012596831673.png

总结

简单的总结一下,关于TCP/IP相关的网络知识,还有很多很多我没有提到的、深入了解到的东西,因为在这里,我们只是为了探索Alamofire框架的一些前瞻知识,有一个大概的了解基础,并不是需要深入底层去了解网络TCP/IP,有兴趣的同学,可以去查查其他资料,有很多的,我这里就不深入了。接下来的文章,我们会慢慢的深入我们的主题 -- Alamofire

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