本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/45

一、TCP/IP协议产生背景

TCP/IP是伴随着互联网的发展而研发出来的,还是让我们从头说起吧 第二次世界大战结束,苏美两国各自发展了自己的势力范围,成为世界的两极。这两极不是在好好发展经济上竞争,而是在军备上展开竞争。这两个庞大的国家机器进行着无声的对垒。这就是著名的“冷战”

1962年,苏联向古巴运送导弹,企图在古巴建立导弹发射场,被美国U-2侦察机发现。美国总统肯尼迪下令对古巴实行军事封锁,并进行战争威胁,苏联被迫撤走导弹,危机才平息。古巴核导弹危机导致美国和原苏联之间的冷战状态随之升温,核毁灭的威胁成了人们日常生活的话题。 美国国防部(DoD)认为,如果仅有一个集中的军事指挥中心,万一这个中心被原苏联的核武器摧毁,全国的军事指挥将处于瘫痪状态,其后果将不堪设想,因此有必要设计这样一个分散的指挥系统——它由一个个分散的指挥点组成,当部分指挥点被摧毁后其他点仍能正常工作,而这些分散的点又能通过某种形式的通信网取得联系。

1969年,美国国防部高级研究计划署(ARPA)的领导利克利德提出“巨型网络”的概念,设想“每个人可以通过一个全球范围内相互连接的设施,在任何地点都可以快速获取各种数据和信息”。哇!领导就是领导,这个概念的提出无疑是今天的互联网的精辟总结!

当然,革命的实践比革命的理论更牛,这是领导始料未及的。紧接着,在利克利德的资助下,一群天才的科学家们建立了名为阿帕网(ARPAnet)的网络。 1969年9月美国军方阿帕网问世

阿帕网的设计师们

在阿帕网产生运作之初,大部分计算机相互之间不兼容。在一台计算机上完成的工作,很难拿到另一台计算机上去用;想让硬件和软件都不一样的计算机联网,也有很多困难。当时美国陆军用的计算机是DEC系列产品,海军用的计算机是Honeywell中标机器,空军用的是IBM公司中标的计算机,每一个军种的计算机在各自的系统里都运行良好,但却有一个大弊病:不能共享资源。 当时科学家们提出这样一个理念:“所有计算机生来都是平等的。”为了让这些“生来平等”的计算机能够实现“资源共享”就得在这些系统的标准之上,建立一种大家共同都必须遵守的标准,这样才能让不同的计算机按照一定的规则进行“谈判”,并且在谈判之后能“握手”。这里说到的标准、规则就是我们现在所说的通信“协议”的概念。 在确定今天因特网各个计算机之间“谈判规则”过程中,最重要的人物当数温顿·瑟夫(Vinton G.Cerf)。正是他的努力,才使今天各种不同的计算机能按照协议上网互联。温顿·瑟夫也因此获得了与蒂姆·伯纳斯·李(Tim Berners-Lee)、罗伯特·卡恩(Robert Elliot Kahn)一样的美称——“互联网之父”。

温顿·瑟夫

1970年12月制定出来了最初的通信协议是由罗伯特·卡恩开发、温顿·瑟夫参与的“网络控制协议”(NCP),但要真正建立一个共同的标准很不容易。1972年,计算机业和通信业的拔尖儿人才齐聚美国首都华盛顿,大伙儿一起参加了第一届国际计算机通信会议。在热烈的讨论氛围中(第一次会议往往都是热闹非凡的,大家都有新鲜感),会议决定在不同的计算机网络之间达成共通的通信协议。

随后,石破天惊的互联网处女秀开场了——会议决定成立互联网工作组(The Internet Engineering Task Force,IETF),负责建立这种标准规范。这是互联网第一次出现在世人面前,也是第一次从“官方”的嘴中蹦出来! 早期协议,如Telnet(用于虚拟终端仿真)和文件传输协议(FTP)是最早开发的,以指定通过阿帕网共享信息所需的基本实用程序。随着阿帕网在规模和作用范围上的日益扩大,出现了其他协议。​

1973年的世界正处在冷战的高峰期,美国仅有三个互相联系的计算机网络都用于国防或学术,并不对公众开放。温顿·瑟夫与罗伯特·卡恩提出将三个网络合并,尝试设计一个“网关”计算机互连具有不同协议的网络,让计算机和计算机之间的沟通敞开和透明。1974年他们提出命名为TCP的分组网互通协议,随后发表的著名的论文将TCP分为TCP/IP,开始布设可以架构在现有和新的技术上的互联网,让大家使用它自由的分享。​

“互联网一直面临斗争和挑战”,如果温顿·瑟夫和罗伯特·卡恩当年把TCP/IP视为私有财产而申请专利,就不会有今天的互联网的成功。更重要的是他为其统一标准,花了整整十年的时间推广这项新技术,用各种方式说服人们认可并尝试使用它。在1974年,传输控制协议(TCP)作为规范草案引入,它描述了如何在网络上建立可靠的、主机对主机的数据传输服务。这意味着处于散兵游勇状态的计算机网络能够通过协议进行通信,也表示互联网不但有了名头,并且在“团结就是力量”的真理指引下,具备了令世人瞩目的话语权!​

1975年,比尔·盖茨与保罗·艾伦创办了微软公司。1981年,Internet协议(IP)以草案形式引入,它描述了如何在互联的网络之间实现寻址的标准以及如何进行数据包路由。1983年1月1日,阿帕网开始对所有的网络通信和基本通信都要求标准化,由过去的NCP改变为TCP和IP。​

1983年,阿帕网分裂为两部分:用于军事和国防部门的军事网(MILNET)和用于民间的阿帕网版本。同时,局域网、广域网的产生和蓬勃发展对Internet的进一步发展起了重要的作用。其中最引人注目的是美国国家科学基金会ASF(National ScienceFoundation)基于IP建立的名为NSFNET的广域网。NSF在全美国建立了按地区划分的计算机广域网并将这些地区网络和超级计算机中心互联起来。阿帕网为主干网的互联网,只对少数的专家以及政府要员开放,而以NFSNET为主干网的互联网向社会开放。​

1984年,美国国防部将TCP/IP作为所有计算机网络的标准。1990年蒂姆·伯纳斯·李(Tim Berners-Lee)发明了首个网页浏览器——万维网(World Wide Web,WWW),1991年5月WWW在Internet上首次露面,立即引起轰动,获得了极大的成功,并被广泛推广应用。TCP/IP网络大发展时代的序幕由此拉开。

蒂姆·伯纳斯·李

1990年6月NSFNET彻底取代了阿帕网而成为Internet的主干网。到1991年,NSFNET的子网已经扩展到3 000多个,由此奠定了今天异常繁荣的互联网之基础。

蝼蚁再多,也无法撼动大象,NSFNET独木难支,并不足以支撑起今天互联网时代华丽的开局。实际上,NSFNET吸引的用户当中不仅包含有很多学术团体、研究机构,至为重要的是,个人用户也开始参与到这个网络当中。越来越多不同类型用户的加入,让这个无趣的资源共享区开始变得热闹非凡。

人们渐渐地不安分于板着面孔交流资料,各种形式的沟通也开始盛行并越来越有吸引力。E-mail、BBS、FTP、Telnet等,都是互联网产生初期人类智慧的结晶。

1995年,微软Internet Explorer浏览器(IE1)诞生。 1996年,4个并不是科班出身的以色列籍犹太小伙发明了ICQ。至此,互联网完成了由资源传播通道到交流通信平台的角色转换,这个转换过程缓慢而细微,就如同一场天街小雨,轻柔地滋润着这多彩的世界。

至此,互联网完成了由资源传播通道到交流通信平台的角色转换,这个转换过程缓慢而细微,就如同一场天街小雨,轻柔地滋润着这多彩的世界。​

1996年,美国克林顿政府提出“下一代Internet计划(NGI)”。随后的20年,一大批太阳、月亮和星星一样的企业横空出世,一大批业界精英粉墨登场,一大批新技术、新思路、新理念、新思维风起云涌、叱咤风云……

随后的20年,一大批太阳、月亮和星星一样的企业横空出世,一大批业界精英粉墨登场,一大批新技术、新思路、新理念、新思维风起云涌、叱咤风云…

1999年,腾讯公司推出腾讯QQ(简称QQ),同年新浪公司推出“新浪微博”。

2001年,微软发布Windows XP操作系统。 2003年,淘宝网成立。 2011年,腾讯公司推出微信(WeChat)。

2012年,伦敦奥运会开幕式上,蒂姆·伯纳尔斯·李出现在场地中央,他在键盘上敲出一行字,此时大屏幕上显示“This is foreveryone”,意喻万维网是送给世界上每一个人的礼物。 2016年,TCP/IP大行其道,它无所不在,无坚不摧,无往不利,战无不胜,攻无不克……

二、TCP/IP协议是什么

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。 要回答什么是协议,首先必须回答什么是网络。

网络是计算机或类似计算机的设备之间通过常用传输介质进行通信的集合。通常情况下,传输介质是绝缘的金属导线,它用来在计算机之间携带电脉冲,但是阐述介质也可以是电话线,甚至没有线路(比如在无线网络中)。 无论计算机如何连接,计算机之间的通信过程都需要将来自于其中一台计算机的数据,通过传输介质传输到另外一台计算机。在下图中,计算机A必须能够发送消息或请求到计算机B。计算机B必须能够理解计算机A的消息,并通过将一条消息发回计算机A来进行响应。

网络协议就是一套通用规则,用来帮助定义复杂数据传输的过程。数据传输从一台计算机上的应用程序开始,通过计算机网络硬件,经过传输介质到正确目的地,然后上传到目的地计算机网络硬件,最后到达负责接收的应用程序

OSI参考模型和TCP/IP模型

  1. 物理层物理层就像人与人沟通中的能够互相听懂的“发音”。物理层解决最基础的传送通道,涉及问题主要是建立、维护和释放物理链路所需的机械的、电气的/光学的、功能的和规程的特性,如光缆如何抗衰耗,无线设备如何提高发射功率,为什么双绞线要有屏蔽层等。
  2. 数据链路层

有了发音,才能有“字”或者“词”,对于说错的话,要尽快予以纠正;如果不能很好地纠正,就要重新把话再说一遍。接下来,我们开始考虑在物理层提供的按“位”服务的基础上,在相邻的网络节点之间提供简单的、传输以帧为单位的数据,同时它还负责数据链路的流量控制、差错控制。 首先,数据链路层为网络层提供“简单”的通信链路,通信实体所在的系统必须经过物理介质直接相连——当然,这物理介质可以是有线的铜缆或者光缆,也可以是无线的微波。大家要理解,这条链路不具备任何路径选择和转发功能,你可以把它仅仅理解为“一条封闭的路”,除了两端,没有额外出入口。 数据链路层将物理层提供的比特流组成“帧”,也就是说,把发送方发出来的若干“位”的数据组成一组,加上“开始”“结束”标志和与检错有关的代码等,形成有固定格式的数据帧——这有点像把货物放入标准集装箱中,正因为集装箱的体积、尺寸都是标准的,最后所有的集装箱看起来非常整齐,搬运和船载过程也会变得有序和规范。 本层要提供一定的差错检验和纠正机制。信号会因机械、电气等原因,出现错误,如将“0”“1”颠倒,丢失一个“0”或“1”,或者因为外界干扰而多出一位数字。接收者根据检错代码就可以判断收到的数据帧是否有错误,并在可能的情况下纠正错误。不能纠正的错误可以选择重传。这里面很有学问。发送的信息,接收方是不清楚的。但是如何让接收方知道发送过来的信息有错误呢?对付这种问题,数据链路层有应对策略。 假如我们运送的不是数据信息而是货物,运送工具不是帧而是车。这个问题怎么处理?发货方出货前,将附带一张“装箱单”,单子上标明了这车货物的相关参数,比如重量、体积、品质,接收方只需要称重量、测体积以及检验品质,并和装箱单上的数据做对比,即可判断运送过程中是否出现错误或者失误。 数据帧传送也有类似装箱单一样的信息,存储在“纠错字节”中。当数据帧到达目的地,它会对自身进行计算,计算结果和纠错字节中的内容进行对比。如果一致,进行下一步操作。如果不一致呢?这个类似“装箱单”的纠错字节就能够很快将错误检测出来并进行相应处理(比如进行重传)。以太网就属于这一层。所以你会经常听到“以太网帧”这一术语。

  1. 网络层

我们继续分析日常说话的方式。说话应该有目标、内容和语速,向谁说,通过谁转述,说什么,以多快的速度说。网络层所干的工作,就是进行路由选择、拥塞控制和网络互联。网络层对自己的上级——传输层,可以提供两种服务,一种叫作“面向连接”的网络服务,一种叫作“无连接”的网络服务——这有点像有轨交通和无轨交通。 有轨交通的特点是,车辆沿着特定轨道行驶,自出发点到目的地,路线、速度基本确定。面向连接的服务也有类似特点。 无轨交通的特点是,车辆走一站看一站,线路、速度均不确定。无连接的服务与此惊人一致。 这两者的区别,直接导致相关技术体制的巨大差异。面向连接的服务关注于如何建立链路,而无连接的服务则专注于在每一站建立一套详尽的路由表。传统IP技术就是无连接服务,而改造为MPLS(多协议标签交换)网络后,就属于面向连接的服务了。 网络层担负着的四大任务如下。 路由选择。任何数据包都不可能在网络上像无头的苍蝇乱跑乱撞,而网络层的关键任务是发现路由、选择路径,有时,也负责地址转换。它就像一个警察,在网络节点这样的“十字路口”管理来来往往的数据包,数据包的路径选择就是我们经常提到的“路由选择”。各种路由协议、MPLS的流量工程都与路由选择有关。 拥塞控制。后文会专门介绍拥塞发生的原理。网络层可以采用拥塞控制机制,尽量避免拥塞的发生,如果真的发生拥塞,也要通过多种途径缓解拥塞状况(比如丢弃一些数据,或者进行缓存)。 局域网间互联。数据包在局域网间穿梭,会面临诸如包大小、网络速度,甚至协议的差异,这些都是网络层要解决的,就是通过一定的调整,让两个网络之间的数据包成功的传递。 统计和控制。如统计哪些用户需要的网络流量比较多,访问哪些站点比较频繁,或者禁止或控制用户访问某些站点;记账功能一般也在网络层解决。网络层最知名的协议就是IP。

  1. 传输层

要保证别人听到你说的话,不能“想当然”。 传输层的任务是向用户提供可靠的、透明的端到端的数据传输,以及差错控制和流量控制机制。由于它的存在,网络硬件技术的任何变化对高层都是不可见的,也就是说会话层、表示层、应用层的设计不必考虑低层细节,因此传输层起到“承上启下”的作用。 所谓“端到端”是相对链接而言的 各位读者要记住一个概念,OSI参考模型的四层到七层属于端到端的方式,而一到三层属于链接的方式。在传输层,通信双方的两机器之间,有一对应用程序或进程直接对话,它们并不关心低层的实现细节。低层的链接方式就不一样,它要负责处理通信链路中的任何相邻机器之间的通信。假如两台计算机A和B要通信,那么A和B之间可以进行直接的传输层的通信,而在A和B之间如果有若干网络节点,如路由器X、Y、Z,那么A与X、X与Y、Y与Z、Z与B之间都要进行低三层的通信。 传输层通过逻辑接口向高层提供服务。服务的类型是在连接建立时确定的,最重要的服务是端到端的、可靠的、面向连接的字节流服务——这里已经不是“位流”(也称“比特流”)了。 一般情况下,传输层为每一条传输连接生成一条第三层的网络链接,但也有例外:需要高吞吐率的传输连接可以同时占用多条网络链接。 传输层有一项很有趣的工作——流量控制,通过技术手段,使字节流均匀、稳定。当然,这不是必需的。 大名鼎鼎的TCP和UDP就属于传输层。

  1. 会话层

说话要有开始、过程和终止。在不同的机器之间提供会话进程的通信,如建立、管理和拆除会话进程。你可能要考虑这个话是在大庭广众之下说还是专门对某个人说,或者是说一句等对方答复后再说下一句。 会话层还提供了许多增值服务,如交互式对话管理,允许一路交互、两路交换和两路同时会话;管理用户登录远程分时系统;在两机器之间传输文件,进行同步控制等。

  1. 表示层

有些话要以悄悄话的形式,避免第三者听到;有些话,要简单明了,不要拖泥带水。表示层就处理通信进程之间交换数据的表示方法,包括语法转换、数据格式的转换、加密与解密、压缩与解压缩等。

  1. 应用层

有了上面所列的网络层次,你已经把要说的话通过声带的震动,一字一句、清晰明了地地告诉了你的某个好朋友,并且保证他听到了,没有让第三者听到。你明确地让对方知道,你的谈话何时开始以及何时结束。 应用层就负责管理应用程序之间的通信。 应用层是OSI参考模型的最高层,低层所有协议的最终目的都是为应用层提供可靠的传送手段,低层协议并没有直接满足用户的任何实际需求。我们日常使用的收发电子邮件、传送文件、浏览网页、交互即时信息、播放网络视频等都属于应用层的范畴,这是用户体验最直观的服务。 OSI是哲学,而不仅仅是技术! 通信“层”的概念,让各种协议、规范、标准变得有所不同——它们更灵活但可控,更开放但不混乱,更清晰但不拘束。上面的论述会让一些读者觉得乏味,但是如果你能够紧密结合通信网络的一些实际应用,并类比生活中的例子,你会发现其实枯燥中蕴含着无穷乐趣,你也会发现,其实分层是一种哲学而非技术。​

TCP/IP(传输控制协议/网际协议) “优胜劣汰,适者生存”是一条永恒不变的法则,OSI由于体系比较复杂,不太方便计算机软件实现,逐渐退出人们关注的视野,TCP/IP得到了广泛的应用。 TCP/IP是Internet的核心技术,是由IETF定义的。所有的系统、终端、线路、用户、开发者,都必须遵守TCP/IP协议族所规定的法则,否则,将不被IP世界所接受。

对比ISO/OSI的七层结构,看完上面的图,读者会奇怪了:怎么没有表示层和会话层呢?他们到哪里去了? 在TCP/IP分层结构中,的确没有表示层和会话层,也就是说OSI规定的这两层,在TCP/IP中并不是必需的。 还有一种五层的说法,将网络接口层分为物理层和数据链路层两层,这样有利于数据通信的分析。TCP/IP体系结构中最核心的部分是上面的三层:应用层、传输层和互联网层(也称网络层),互联网层以下的层次没有制定相关标准,萝卜咸菜各有所爱,至于最下面的是一层还是两层,这都不太重要。我们建议提到分层模型时按四层来分,在进行数据通信时按五层来分析。 TCP/IP是一个协议组,不仅包括TCP、IP,还包括HTTP、TELNET、FTP、RIP、OSPF、BGP、UDP、ARP、pop3等,只不过TCP/IP这个名字来源于协议族中最主要的两个协议——TCP(传输控制协议)和IP(网际协议)。各个层次分别对应着不同的协议,如图所示。

下面,分别介绍各层的主要功能。

  1. 网络接口层也称为数据链路层,TCP/IP并没有严格定义该层,它只是要求能够提供给其上层——网络层一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同。以太网是IP通信中数据链路层最常见的形式,除此之外还有PPP、HDLC等。10Gbit/s以下的以太网一般应用于局域网,而PPP、HDLC则应用于广域网范围内居多。
  2. 网络层(Internet Layer)俗称IP层,它处理机器之间的通信。IP是一个不可靠的、无连接协议,它接受来自传输层的请求,传输某个具有目的地址信息的分组。该层把分组封装到IP数据报中,填入数据报的首部(也称为报头),使用路由算法来选择是直接把数据报发送到目标机还是把数据报发送给路由器,然后把数据报交给下面的网络接口层中的对应网络接口模块。IP负责给互联网的每一台计算机或者终端分配一个地址,并将信息以IP包的形式传送到正确的目的地。这是TCP/IP的核心。IP协议族中最关键的是路由协议。除此之外还有ICMP,被用来传送IP的控制信息。我们熟知的Ping和Traceroute命令就出自ICMP。
  3. 传输层:传输控制协议(Transmission ControlProtocol,TCP)和用户数据报协议(User DatagramProtocol,UDP)是该层的重要协议。TCP是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP还要处理端到端的流量控制。UDP是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。大家注意一下,在数通试题中,会经常涉及TCP、IP、UDP可靠不可靠,连接无连接的内容。

TCP报文格式 TCP报文包括首部(报头)和数据部分,其中首部的具体字段如下。

  1. 源端口和目的端口字段——各占16bit。端口是传输层与应用层的服务接口。
  2. 序号字段——SEQ序号,占32bit。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
  3. 确认序号:ACK序号,占32 bit,是期望收到对方的下一个报文段的数据的第一个字节的序号。只有ACK标志位为1时,确认序号字段才有效,ACK=SEQ+1。
  4. 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下。

紧急比特 URG——当 URG=1 时,表明紧急指针(urgent pointer)字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 确认比特ACK——只有当ACK=1时确认号字段才有效。当 ACK=0时,确认号无效。 推送比特PSH(PuSH)——接收TCP收到推送比特置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。 复位比特 RST(ReSeT)——当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。 同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。 终止比特 FIN(FINal)——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。 需要注意的是:不要将确认序号ACK与标志位中的ACK搞混了;确认方ACK=发起方SEQ+1,两端配对。

  1. 数据偏移——占4bit,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。
  2. 窗口字段——占16bit。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
  3. 检验和——占16bit。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
  4. 紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
  5. 选项字段——长度可变。TCP只规定了一种选项,即最大报文段长度MSS(Maximum Segment Size)。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
  6. 保留字段——占6bit,保留为今后使用,但目前应置为0。

tcp的三次握手和四次挥手 TCP的连接和建立都是采用客户服务器方式。主动发起连接建立的应用进程叫作客户(Client)。被动等待连接建立的应用进程叫作服务器(Server)。建立TCP需要三次握手才能建立,而断开连接则需要四次挥手。整个过程如下图所示。

TCP建立连接、传输数据、释放连接

  1. 三次握手

在TCP/IP中,采用三次握手建立一个连接,连接过程就像打电话的过程,如图1.11所示。

三次握手

第一次握手:Client(主机A)向Server(主机B)发送一个连接请求,在这个包中,标志位SYN=1,发送序号SEQ=x,上图中x=200,Client进入SYN_SEND状态,等待Server确认。 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,确认序号ACK=x+1=201,随机产生一个发送序号SEQ=y,上图中y=500,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。 第三次握手:Client收到确认后,检查确认序号ACK是否为x+1=201,标志位ACK是否为1,如果正确,则将标志位ACK置为1,确认序号ACK=y+1=501,并将该数据包发送给Server,Server检查确认序号ACK是否为y+1=501,标志位ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态。 完成三次握手,客户端与服务器开始传送数据。​

在成功完成以上三步之后,TCP连接就建立了,接下来就可以传送应用层数据了。TCP提供的是全双工通信,因此通信双方的应用进程在任何时候都能发送数据。 另外,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的。这使得服务器易于受到SYN洪泛攻击

四次挥手 四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开,如图1.12所示。

第一次挥手:当客户A要断开TCP连接时,发送一个包,其中标志位fin=1,ACK=1,发送序号SEQ=x,确认序号ACK=y,上图中x=200,y=500。Client进入FIN_WAIT_1状态。 第二次挥手:客户B知道A要断开后,发送一个确认包,其中标志位ACK=1发送序号,SEQ=y确认序号ACK=x+1=201,Server进入CLOSE_WAIT状态。 第三次挥手:客户B也断开TCP连接,此时发送一个包,其中,标志位fin=1,发送序号SEQ=y+1=501,Server进入LAST_ACK状态。 第四次挥手:客户A收到B的断开请求后,Client进入TIME_WAIT状态,接着发送一个确认包,标志位ACK=1,发送序号SEQ=x+1=201,确认序号ACK=y+2=502;Server进入CLOSED状态。 由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。​

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG。如下

其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有DATA数据传输,RST表示连接重置。

  1. TCP/IP协议体系常见术语

包(Packet)是网络上传输的数据片段,也称分组。包是一种统称,在不同的协议不同的层次,包有不同的名字,如TCP/IP中,数据链路层的包叫帧(Frame),IP层的包称为IP数据报,TCP层的包常称为TCP报文等。大多数包都由包头和信息组成:包头常常包括诸如源和目的地址、包的长度和类型指示符等信息;信息部分可以是原始数据,也可以包含另一个包。

  1. 封装

不同设备的对等层之间依靠封装和解封装来实现相互间的通信。封装就像洗完澡光着身子穿衣服,解封装就像洗澡前脱衣服,脱了一层又一层直到脱光。 TCP/IP也是一种计算机数据打包和寻址的标准方法。在数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在该信封面上记录有分段号的信息,再将TCP信封塞入IP大信封,发送上网。在接受端,一个TCP软件包收集信封,抽出数据,按发送前的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此,TCP/IP在互联网中几乎可以无差错地传送数据。 在通信过程中,TCP/IP每一层都让数据得以通过网络进行传输,这些层之间使用协议数据单元(Protocol Data Unit,PDU)彼此交换信息,确保网络设备之间能够通信。不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。如图1.13所示,传输层在上层数据中加入TCP报头后得到的PDU被称为数据段(Segment);数据段被传递给网络层,网络层添加IP报头得到的PDU被称为数据包(Packet);数据包被传递到数据链路层,封装数据链路层报头得到的PDU被称为数据帧(Frame);最后,帧被转换为比特,通过网络介质传输。这种协议栈向下传递数据,并添加报头和报尾的过程称为封装。数据被封装并通过网络传输后,接收设备将删除添加的信息,并根据报头中的信息决定如何将数据沿协议栈上传给合适的应用程序,这个过程称为解封装。

三、TCP/IP协议中常用的网络命令

ping
ipconfig(windows)
ifconfig(类unix)
arp
tracert  traceroute
route
nslookup
nbtstat(windows)
netstat
net (windows)
telnet
mstsc(windows)
netsh(windows)
tcpdump(linux)

四、网络抓包工具

wireshark

本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/45

TCP/IP协议簇,网络那点事相关推荐

  1. 在哪里查看计算机配置的网络协议簇,tcp/ip协议簇

    TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式.TCP/IP是一组协议的代名词,包括许多别的协议,组成了TCP/IP协议簇.其中比较重要的有SLIP协议.PPP协议.IP协议.I ...

  2. 网络基础之计算机网络参考模型(OSI参考模型与TCP/IP协议簇)

    文章目录 前言 一.OSI七层参考模型 1.OSI简介 2.OSI参考模型各层的功能 二.TCP/IP协议簇 1.TCP/IP 2.常用的网络协议 三.数据封装和解封装 1.数据封装过程 2.数据解封 ...

  3. 套接字、UDP通信、TCP通信、TCP/IP协议簇

    一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...

  4. 套接字、UDP通信、TCP通信、TCP\IP协议簇

    一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...

  5. Day11OSI与TCP/IP协议簇以及物理层

    分层思想分层模型 OSI参考模型TCP/IP协议簇 计算机网络参考模型 数据封装与解封装过程(一) 数据传输过程 数据封装与解封装过程(二) 分层思想: 将复杂的流程分解为几个功能单一的子过程,整个过 ...

  6. TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是"虚拟局域网".LAN可以是由少数几台家用计算机构成的网络,也可以是 ...

  7. TCP/IP协议簇分层详解---转

    http://blog.csdn.net/hankscpp/article/details/8611229 一. TCP/IP 和 ISO/OSI ISO/OSI模型,即开放式通信系统互联参考模型(O ...

  8. TCP/IP协议簇简介

    参考: https://blog.csdn.net/wuzhiwei549/article/details/105965493 https://blog.csdn.net/weixin_4419896 ...

  9. 计算机通识之TCP/IP协议簇(二)

    TCP/IP协议簇 目录 1.子网划分 1.1子网划分概念 1.2 子网划分步骤 1.3 子网划分案例 2.IPv4 3.IPv6 4.OSI七层模型 4.1 OSI七层模型 4.2 TCP/IP五层 ...

  10. 关于TCP/IP协议簇

    TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个网络间实现信息传输的协议簇.TCP/IP协议严格来说 ...

最新文章

  1. 十二、增加Department
  2. Day 8 面向对象
  3. 【数据结构与算法】之深入解析“交错字符串”的求解思路与算法示例
  4. 随机森林做特征重要性排序和特征选择
  5. 【渝粤教育】国家开放大学2019年春季 4有机合成单元反应 参考试题
  6. emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. 手把手教你用java读写excel表格文件(POI,EasyExcel)
  8. 图神经网络让预估到达准确率提升50%,谷歌地图实现新突破
  9. JavaScript学习笔记之BOM篇,认识几种常见的浏览器对象
  10. Android 8.0 linux内核,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序---Android8.0版本实现-对照老罗版本...
  11. php格式文件怎么改成mp4,dat视频文件如何打开 dat格式文件怎样转换成MP4或其它视频格式...
  12. 程序员常用笔记与思维导图工具
  13. angularjs grunt uglify 报错
  14. 2019 初入IT十年(下)---- 视线所及只剩生活
  15. Direct2D编程入门
  16. [重磅] 让HTML5达到原生的体验 系列之一 避免切页白屏
  17. 深度学习100例-卷积神经网络(VGG-16)识别海贼王草帽一伙 | 第6天
  18. 网站的关键!教你13步打造漂亮的WEB字体
  19. 大学两年的经历感受——大学应做的五件事
  20. 360搜索用上了so.com域名

热门文章

  1. java-nio网络编程
  2. 商品期货市场常见的量化交易策略
  3. linux 驱动之PWM蜂鸣器驱动
  4. iOS中百度地图API的总结
  5. 计算机常用的启动方法有,加快电脑开机、运行的常用手段
  6. 汇总|国内外优秀的计算机视觉团队
  7. Excel精选28个实用技巧实例学习
  8. c语言程序设计21点扑克牌,C语言程序设计 21点扑克牌游戏.doc
  9. keepalived
  10. 2021-2027全球与中国TAC功能膜市场现状及未来发展趋势