简单理解TCP/IP协议
转自: https://mp.weixin.qq.com/s/sNHPwyyckZZLFMLp-mURWA假如你是一台电脑,你的名字叫 A经过 《如果让你来设计网络,你会把它弄成啥样?》 这篇文章中的一番折腾,只要你知道另一位伙伴 B 的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你的伙伴 B。这就是物理层、数据链路层、网络层这三层所做的事情。站在第四层的你,就可以不要脸地利用下三层所做的铺垫,随心所欲地发送数据,而不必担心找不到对方了。虽然你此时还什么都没干,但你还是给自己这一层起了个响亮的名字,叫做 传输层 。你本以为自己所在的第四层万事大吉,啥事没有,但很快问题就接踵而至。问题来了前三层协议只能把数据包从一个主机搬到另外一台主机,但是,到了目的地以后,数据包具体交给哪个 程序 (进程)呢?所以,你需要把通信的进程区分开来,于是就给每个进程分配一个数字编号,你给它起了一个响亮的名字: 端口号 。然后你在要发送的数据包上,增加了传输层的头部, 源端口号 与 目标端口号 。OK,这样你将原本主机到主机的通信,升级为了 进程和进程之间的通信 。你没有意识到,你不知不觉实现了 UDP 协议 !(当然 UDP 协议中不光有源端口和目标端口,还有数据包长度和校验值,我们暂且略过)就这样,你用 UDP 协议无忧无虑地同 B 进行着通信,一直没发生什么问题。但很快,你发现事情变得非常复杂......丢包问题由于网络的不可靠,数据包可能在半路丢失,而 A 和 B 却无法察觉。对于丢包问题,只要解决两个事就好了。第一个,A 怎么知道包丢了?答案:让 B 告诉 A第二个,丢了的包怎么办?答案:重传于是你设计了如下方案,A 每发一个包,都必须收到来自 B 的 确认 (ACK),再发下一个,否则在一定时间内没有收到确认,就 重传 这个包。你管它叫 停止等待协议 。只要按照这个协议来,虽然 A 无法保证 B 一定能收到包,但 A 能够确认 B 是否收到了包,收不到就重试,尽最大努力让这个通信过程变得可靠,于是你们现在的通信过程又有了一个新的特征, 可靠交付 。停止等待虽然能解决问题,但是效率太低了,A 原本可以在发完第一个数据包之后立刻开始发第二个数据包,但由于停止等待协议,A 必须等数据包到达了 B ,且 B 的 ACK 包又回到了 A,才可以继续发第二个数据包,这效率慢得可不是一点两点。于是你对这个过程进行了改进,采用 流水线 的方式,不再傻傻地等。但是网路是复杂的、不可靠的。有的时候 A 发出去的数据包,分别走了不同的路由到达 B,可能无法保证和发送数据包时一样的顺序。在流水线中有多个数据包和ACK包在 乱序流动 ,他们之间对应关系就乱掉了。难道还回到停止等待协议?A 每收到一个包的确认(ACK)再发下一个包,那就根本不存在顺序问题。应该有更好的办法!A 在发送的数据包中增加一个 序号 (seq),同时 B 要在 ACK 包上增加一个 确认号 (ack),这样不但解决了停止等待协议的效率问题,也通过这样标序号的方式解决了顺序问题。而 B 这个确认号意味深长:比如 B 发了一个确认号为 ack = 3,它不仅仅表示 A 发送的序号为 2 的包收到了,还表示 2 之前的数据包都收到了。这种方式叫 累计确认 或 累计应答 。注意,实际上 ack 的号是收到的最后一个数据包的序号 seq + 1,也就是告诉对方下一个应该发的序号是多少。但图中为了便于理解,ack 就表示收到的那个序号,不必纠结。有的时候,A 发送数据包的速度太快,而 B 的接收能力不够,但 B 却没有告知 A 这个情况。怎么解决呢?很简单,B 告诉 A 自己的接收能力,A 根据 B 的接收能力,相应控制自己的 发送速率 ,就好了。B 怎么告诉 A 呢?B 跟 A 说"我很强"这三个字么?那肯定不行,得有一个严谨的规范。于是 B 决定,每次发送数据包给 A 时,顺带传过来一个值,叫 窗口大小 (win),这个值就表示 B 的 接收能力 。同理,每次 A 给 B 发包时也带上自己的窗口大小,表示 A 的接收能力。B 告诉了 A 自己的窗口大小值,A 怎么利用它去做 A 这边发包的流量控制呢?很简单,假如 B 给 A 传过来的窗口大小 win = 5,那 A 根据这个值,把自己要发送的数据分成这么几类。图片过于清晰,就不再文字解释了。当 A 不断发送数据包时, 已发送的最后一个序号 就往右移动,直到碰到了窗口的上边界,此时 A 就无法继续发包,达到了流量控制。但是当 A 不断发包的同时,A 也会收到来自 B 的确认包,此时 整个窗口 会往右移动,因此上边界也往右移动,A 就能发更多的数据包了。以上都是在窗口大小不变的情况下,而 B 在发给 A 的 ACK 包中,每一个都可以 重新设置 一个新的窗口大小,如果 A 收到了一个新的窗口大小值,A 会随之调整。如果 A 收到了比原窗口值更大的窗口大小,比如 win = 6,则 A 会直接将窗口上边界向右移动 1 个单位。如果 A 收到了比原窗口值小的窗口大小,比如 win = 4,则 A 暂时不会改变窗口大小,更不会将窗口上边界向左移动,而是等着 ACK 的到来,不断将左边界向右移动,直到窗口大小值收缩到新大小为止。OK,终于将流量控制问题解决得差不多了,你看着上面一个个小动图,给这个窗口起了一个更生动的名字, 滑动窗口 。但有的时候,不是 B 的接受能力不够,而是网络不太好,造成了 网络拥塞 。拥塞控制与流量控制有些像,但流量控制是受 B 的接收能力影响,而拥塞控制是受 网络环境 的影响。拥塞控制的解决办法依然是通过设置一定的窗口大小,只不过,流量控制的窗口大小是 B 直接告诉 A 的,而拥塞控制的窗口大小按理说就应该是网络环境主动告诉 A。但网络环境怎么可能主动告诉 A 呢?只能 A 单方面通过 试探 ,不断感知网络环境的好坏,进而确定自己的拥塞窗口的大小。拥塞窗口大小的计算有很多复杂的算法,就不在本文中展开了,假如 拥塞窗口的大小为 cwnd ,上一部分流量控制的 滑动窗口的大小为 rwnd ,那么窗口的右边界受这两个值共同的影响,需要取它俩的最小值。窗口大小 = min(cwnd, rwnd)含义很容易理解,当 B 的接受能力比较差时,即使网络非常通畅,A 也需要根据 B 的接收能力限制自己的发送窗口。当网络环境比较差时,即使 B 有很强的接收能力,A 也要根据网络的拥塞情况来限制自己的发送窗口。正所谓受其 短板 的影响嘛~有的时候,B 主机的相应进程还没有准备好或是挂掉了,A 就开始发送数据包,导致了浪费。这个问题在于,A 在跟 B 通信之前,没有事先确认 B 是否已经准备好,就开始发了一连串的信息。就好比你和另一个人打电话,你还没有"喂"一下确认对方有没有在听,你就巴拉巴拉说了一堆。这个问题该怎么解决呢?地球人都知道, 三次握手 嘛!A:我准备好了(SYN)B:我知道了(ACK),我也准备好了(SYN)A:我知道了(ACK)A 与 B 各自在内存中维护着自己的状态变量,三次握手之后,双方的状态都变成了 连接已建立 (ESTABLISHED)。虽然就只是发了三次数据包,并且在各自的内存中维护了状态变量,但这么说总觉得太 low,你看这个过程相当于双方建立连接的过程,于是你灵机一动,就叫它 面向连接 吧。注意:这个连接是虚拟的,是由 A 和 B 这两个终端共同维护的,在网络中的设备根本就不知道连接这回事儿!但凡事有始就有终,有了建立连接的过程,就要考虑释放连接的过程,又是地球人都知道, 四次挥手 嘛!A:再见,我要关闭了(FIN)B:我知道了(ACK)给 B 一段时间把自己的事情处理完...B:再见,我要关闭了(FIN)A:我知道了(ACK)以上讲述的,就是 TCP 协议的核心思想,上面过程中需要传输的信息,就体现在 TCP 协议的头部,这里放上最常见的 TCP 协议头解读的图。不知道你现在再看下面这句话,是否能理解:TCP 是面向连接的、可靠的、基于字节流的传输层通信协议面向连接、可靠,这两个词通过上面的讲述很容易理解,那什么叫做基于字节流呢?很简单,TCP 在建立连接时,需要告诉对方 MSS(最大报文段大小)。也就是说,如果要发送的数据很大,在 TCP 层是需要按照 MSS 来切割成一个个的 TCP 报文段 的。切割的时候我才不管你原来的数据表示什么意思,需要在哪里断句啥的,我就把它当成一串毫无意义的字节,在我想要切割的地方咔嚓就来一刀,标上序号,只要接收方再根据这个序号拼成最终想要的完整数据就行了。在我 TCP 传输这里,我就把它当做一个个的 字节 ,也就是基于字节流的含义了。一提到 TCP,可能很多人都想起被三次握手和四次挥手所支配的恐惧。但其实你跟着文中的思路你就会发现,三次握手与四次挥手只占 TCP 所解决的核心问题中很小的一部分,只是因为它在面试中很适合作为知识点进行考察,所以在很多人的印象中就好像 TCP 的核心就是握手和挥手似的。 如果你能从问题出发,真正理解 TCP 所想要解决的问题,你会发现很多原理就好像生活常识一样顺其自然,并不复杂,希望你读完本文能有所收获~

什么是“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协议。TCP作用:当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。IP作用:IP信息包的传送。P信息包的分割与重组。TCP/IP协议缺陷(1)该模型没有明显地区分服务、接口和协议的概念。因此,对于使用新技术来设计新网络,TCP/IP模型不是一个太好的模板。(2)TCP/IP模型完全不是通用的,并且不适合描述除TCP/IP模型之外的任何协议栈。(3)链路层并不是通常意义上的一层。它是一个接口,处于网络层和数据链路层之间。接口和层间的区别是很重要的。以上内容参考百度百科-IP以上内容参考百度百科-TCP以上内容参考百度百科-TCP/IP协议
TCP/IP协议叫做传输控制/网际协议,它是Internet国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议。 虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。 TCP/IP协议的基本传输单位是数据包(datagram),TCP协议负责把数据分成若干个数据包,并给每个数据包加上包头(就像给一封信加上信封),包头上有相应的编号,以保证在数据接收端能将数据还原为原来的格式,IP协议在每个包头上再加上接收端主机地址,这样数据找到自己要去的地方,如果传输过程中出现数据丢失、数据失真等情况,TCP协议会自动要求数据重新传输,并重新组包。总之,IP协议保证数据的传输,TCP协议保证数据传输的质量。TCP/IP协议数据的传输基于TCP/IP协议的四层结构:应用层、传输层、网络层、接口层,数据在传输时每通过一层就要在数据上加个包头,其中的数据供接收端同一层协议使用,而在接收端,每经过一层要把用过的包头去掉,这样来保证传输数据的格式完全一致。
第一步:下载兔子IP转换器,安装到你的电脑上。 第二步:注册账号第三步:登录软件,连接你要修改的城市IP节点第四步:打开浏览器查询IP是修改之后的IP了就可以解决你的问题了。动态和静态线路比较多,可以随意切换 解决网络卡顿

什么是TCP/IP协议?
TCP/IP协议(又名:网络通讯协议)即传输控制协议/互联网协议,是一个网络通信模型,以及一整个网络传输协议家族。这一模型是Internet最基本的协议,也是Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。 其定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。TCP负责发现传输的问题,而IP是给因特网的每一台联网设备规定一个地址。 为了减少网络设计的复杂性,大多数网络都采用分层结构。对于不同的网络,层的数量、名字、内容和功能都不尽相同。在相同的网络中,一台机器上的第N层与另一台机器上的第N层可利用第N层协议进行通信,协议基本上是双方关于如何进行通信所达成的一致。不同机器中包含的对应层的实体叫做对等进程。在对等进程利用协议进行通信时,实际上并不是直接将数据从一台机器的第N层传送到另一台机器的第N层,而是每一层都把数据连同该层的控制信息打包交给它的下一层,它的下一层把这些内容看做数据,再加上它这一层的控制信息一起交给更下一层,依此类推,直到最下层。最下层是物理介质,它进行实际的通信。相邻层之间有接口,接口定义下层向上层提供的原语操作和服务。相邻层之间要交换信息,对等接口必须有一致同意的规则。层和协议的集合被称为网络体系结构。每一层中的活动元素通常称为实体,实体既可以是软件实体,也可以是硬件实体。第N层实体实现的服务被第N+1层所使用。在这种情况下,第N层称为服务提供者,第N+1层称为服务用户。服务是在服务接入点提供给上层使用的。服务可分为面向连接的服务和面向无连接的服务,它在形式上是由一组原语来描述的。这些原语可供访问该服务的用户及其他实体使用。TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。 面向连接的服务(例如 Telnet、 FTP、 rlogin、 X Windows和 SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收 域名数据库),但使用UDP传送有关单个主机的信息。

tcp/ip协议包含哪些协议
TCP/IP协议不仅是TCP 和IP两个协议,还包含FTP、SMTP、TCP、UDP、IP等协议构成的协议簇。 祝你好运

tcp和ip有什么区别?
TCP/IP(TransmissionControlProtocol/InternetProtocol的简写,中文译名为传输控制协议/互联网络协议)。简单地说,就是由底层的IP协议和TCP协议组成的。TCP/IP其实是两个网络基础协议:IP协议、TCP协议名称的组合。下面谈谈这两个无处不在的协议。 IP协议:IP(InternetProtocol)协议的英文名直译就是:因特网协议。从这个名称我们就可以知道IP协议的重要性。在现实生活中,我们进行货物运输时都是把货物包装成一个个的纸箱或者是集装箱之后才进行运输,在网络世界中各种信息也是通过类似的方式进行传输的。IP协议规定了数据传输时的基本单元和格式。如果比作货物运输,IP协议规定了货物打包时的包装箱尺寸和包装的程序。除了这些以外,IP协议还定义了数据包的递交办法和路由选择。同样用货物运输做比喻,IP协议规定了货物的运输方法和运输路线。TCP协议: 我们已经知道了IP协议很重要,IP协议已经规定了数据传输的主要内容,在IP协议中定义的传输是单向的,也就是说发出去的货物对方有没有收到我们是不知道的。就好像8毛钱一份的平信一样。那对于重要的信件我们要寄挂号信怎么办呢?TCP协议就是帮我们寄“挂号信”的。TCP协议提供了可靠的面向对象的数据流传输服务的规则和约定。简单的说在TCP模式中,对方发一个数据包给你,你要发一个确认数据包给对方。通过这种确认来提供可靠性。
TCP:面向连接的传输层协议 IP:网路层协议 tcp在ip上一层。如果用一个包的角度来看的话,tcp被ip报包住。tcp提供端口号,序列等来实现面向连接的服务。而ip提供ip地址来进行数据报在网络中的传送,只提供尽可能传送的服务
TCP/IP 指传输控制协议/因特网互联协议(Transmission Control Protocol / Internet Protocol),又名网络通讯协议 IP是因特网协议
根据OSI(Open System Interconnection)协议,底层协议为高层协议服务,高层协议接受来自底层协议的服务。我们知道IP协议处于网络层(Network layer),在第三层,而TCP面向传输层,在第四层,于是可以预见,TCP和IP的关系是:IP提供基本的数据传送,而高层的TCP对这些数据包做进一步加工,如提供了端口号等

本文由 在线网速测试 整理编辑,转载请注明出处。