什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次
这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次? 】 标题: 【修真院java小课堂】什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次? 大家好,我是IT修真院西安分院第4期的学员鲁伯良,一枚正直纯洁善良的java程序员,今天给大家分享一下,修真院官网java任务2,深度思考中的知识点——什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次? (1)背景介绍: 如果要了解一个人,可以从他归属的集体聊起来。我们的HTTP协议就属于TCP/IP协议家族中的一员,了解HTTP协议再整个网络流程中的地位,也能更加充分的理解HTTP协议。 ? ? 要想了解什么是TCP/IP协议,就要知道为什么有这个协议。中国人和中国人说话,要遵循汉语的的语法结构,使用汉语的发音。当我们和外国人交流时,就要适用外国的语言了,遵循外国的语法机构和发音。其实这就是一种协议,只不过我们称之为语言。计算机再这方面体现的更为直观,两台机器之间该如何通信呢,就需要制定各种各样的协议了。例如:文件传输适用TCP协议。域名系统适用DNS协议。有了些协议的存在,各种数据流按照规则传输,计算机之间得意通信.? ? ? ? ? (2)知识剖析: tcp/ip四层 1.链路层 用来处理连接网络的硬件部分.包括控制操作系统.硬件的设备驱动.NIC,及光纤等物理可见部分(还包括连接器等一切传输媒介).硬件上的范畴均在链路层的作用范围之内. 2.网络层 网络层用来处理在网络上滚动的数据包.数据包是网络传输的最小数据单位.该层规定了通过样的路径(所谓的传输路线)到打对方计算机,并把数据包传送给对方. 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所引起的作用就是在众多的选项内选择一条输出路线. 3.传输层? ?? TCP UDP 4.应用层 FTP(文件传输协议) DNS(域名系统) http:协议 IP协议 IP(Internet protocol),这里的IP不是值得我们通常所说的192.168.1.1.这个IP指的是一种协议,而后面的数字值得是IP地址。IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址(Media Access Control Address)。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素外不可能重复。举一个现实生活中的例子,IP地址就如同是我们居住小区的地址,而MAC地址就是我们住的那栋楼那个房间那个人 TCP协议 如果说IP协议是找到对方的详细地址。那么TCP协议就是把安全的把东西带给对方。各有分工,互不冲突 ? 按层次分,TCP属于传输层,提供可靠的字节流服务。什么叫字节流服务呢?这个名字听起来让人不知所以然,下面听下我通俗的解释。所谓的字节流,其实就类似于信息切割。比如你是一个卖自行车的,你要去送货。安装好的自行车,太过庞大,又不稳定,容易损伤。不如直接把自行车拆开来,每个零件上都贴上收货人的姓名。最后送到后按照把属于同一个人的自行车再组装起来,这个拆解、运输、拼装的过程其实就是TCP字节流的过程. ? ? ? ? ? ?? DNS ?DNS(Domain names System) 和HTTP协议一样是处于应用层的服务,提供域名到IP地址之间的解析服务。 互联网之间是通过IP地址通信的,但是IP地址并不符合认得记忆习惯,人喜欢记忆有意义的字词。所以DNS服务就为了解决这个问题而生了。其实很好理解,形如我们电脑中host文件。192.168.1.11? ? ? ?roverliang.com 当我们访roverliang.com 的时候,电脑便不会去外网服务器上查询了,直接去访问192.168.1.111。这是一个简单的域名劫持,足以说明DNS的涵义了。 我们访问一个网页,各个协议起到的作用 1. DNS解析域名对应的ip 2. http协议的职责 生成针对目标WEB服务器的http请求报文 3. tcp 协议的职责 为了方便通信,将http请求报文分割成报文段,按序号分为多个报文段把每个报文段可靠的传给对方 4. IP协议的职责 收索对方的地址,一遍中转一边传送 5. 又到了TCP 从对方那里接受到的报文段,重组到达的报文段,按序号以原来的顺序重组请求报文 6. HTTP协议的职责 对web服务器请求的内容的处理 TCP三次握手 第一步:我们也就是client发送一个请求,向server表示须要连接。然后等待server的回应。 第二步:server接收到这种请求包后,查看是否在接听的是指定的port,假设不是就拒绝建立连接。向我们表示,server连接已经准备好了,等待我们的确认。。 第三步:我们发送确认建立连接的信息给server。 这样我们的连接就建立起来了。 举个例子 QQ聊天 A:在吗跟你说个坏消息?? ?(第一次握手)? ?SYN B:我做好心理准备了说吧(第二次握手)? ? ?ACK 和 SYN A:"叽里咕噜咕噜估计................"(说正事 第三次握手) ACK 关闭连接的四次挥手 因为TCP连 接是全双工的,因此每一个方向都必须单独进行关闭。这原则是当一方完毕它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN仅仅意味着这一方向上没有数据流动。一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将运行主动关闭。而还有一方运行被动关闭。 (1) TCP客 户端发送一个FIN。用来关闭客户到server的数据传送。 (我说完了) (2) server收到这个FIN。它发回一个ACK,确认序号为收到的序号加1。 (好的) (3) server关闭client的连接,发送一个FIN给client。 (那就这样吧,再见) (4) 客户段发回ACK报文确认。并将确认序号设置为收到序号加1 (拜拜) ? (3)常见问题: 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢? (4)解决方案: ?这是由于服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后。它能够把ACK和SYN(ACK起应答作用。而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它只表示对方没有数据发送给你了。但未必你所有的数据都所有发送给对方了。所以你能够未必会立即会关闭SOCKET,也即你可能还须要发送一些数据给对方之后,再发送FIN报文给对方来表示你允许如今能够关闭连接了。所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。 (5)编码实战: (6)拓展思考: DoS攻击 ? ? ? ? ? 一般正常的三次握手过程在①②③这三步执行之后就完成,客户端与服务器就可成功建立TCP连接。如果客户端通过伪造不存在的IP作为源地址向服务器发送SYN报文,服务器收到之后回应一个SYN+ACK报文并在自己的半连接队列中为收到的SYN报文创建一个条目,等待客户端的ACK应答。但由于客户端采取了IP欺骗,服务器发送的SYN-ACK报文根本得不到回应,这时服务器会不断等待、重传直至重传次数超过系统规定的最大重传次数才停止,并将这个SYN项目从半连接队列中删除。SYN泛洪攻击就是在短时间内伪造大量不存在的IP地址并快速发送大量这样的SYN报文给攻击目标计算机,使其半连接队列被阻塞,正常的SYN请求反而被丢弃,同时还要不断对这个庞大的半连接队列中所有项目进行SYN+ACK的重试,系统可用资源急剧减少,系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。 (7)参考文献: 互联网 (8)更多讨论: Q1:提问人:两次握手不可以建立连接吗? A1:回答人:你问我能听到吗?我说能听到.但我怎么知道你能不能听到肯定要问一下你能不能听到,出于礼貌,你也要回答我你能不能听到. 这就三次握手了. Q2:提问人:前面讲的四次挥手没懂再简单说一下? A2:回答人:就是说建立连接的时候syn-ack报文可以同时发送,三次握手可以建立连接,关闭连接的时候fin报文只能单独发送,所以没有办法确定双方数据是否都发送完毕.然后和三次握手一样双方确认才可以关闭 Q3:提问人:tcp是如何进行流量控制的? A3:回答人:一般来说,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。 ? ? ? 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。 ? ? ? 下面通过下图的例子说明如何利用滑动窗口机制进行流量控制。 (10)结束语: 今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~ PPT链接?视频链接 更多内容,可以加入IT交流群565734203与大家一起讨论交流 这里是技能树·IT修真院:,初学者转行到互联网的聚集地 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |