什么是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修真院:,初学者转行到互联网的聚集地

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 目录 连接 连接池产生原因 连接池实现原理 小结 TEMPERANCE:Eat not to dullness;drink not to elevation.节制
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 一个优秀的工程师和一个普通的工程师的区别,不是满天飞的架构图,他的功底体现在所写的每一行代码上。-- 毕玄 1. 命名风格 【书摘】类名用 UpperCamelC
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个人在用”。哪怕只是throw了一个新的Exception。哈哈,这是我犯的错误。一、接口和抽象类类,即一个对象。先抽象类,就是抽象出类的基础部分,即抽象基类(抽象类)。官方定义让人费解,但是记忆方法是也不错的 —包含抽象方法的类叫做抽象类。接口
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket一、引子文件,作为常见的数据源。关于操作文件的字节流就是 —FileInputStream&FileOutputStream。
作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。交流QQ群:【编程之美 365234583】http://qm.qq.com/cgi-bin/qm/qr?k=FhFAoaWwjP29_Aonqz
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程与多线程 线程是什么? 线程(Thread)是一个对象(Object)。用来干什么?Java 线程(也称 JVM 线程)是 Java 进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。 Ja
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket在面向对象编程中,编程人员应该在意“资源”。比如?1String hello = "hello"; 在代码中,我们
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 《程序兵法:Java String 源码的排序算法(一)》 文章工程:* JDK 1.8* 工程名:algorithm-core-le
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 目录 一、父子类变量名相同会咋样? 有个小故事,今天群里面有个人问下面如图输出什么? 我回答:60。但这是错的,答案结果是 40 。我知错能改,然后说了下父子类变
作者:泥瓦匠 出处:https://www.bysocket.com/2021-10-26/mac-create-files-from-the-root-directory.html Mac 操作系统挺适合开发者进行写代码,最近碰到了一个问题,问题是如何在 macOS 根目录创建文件夹。不同的 ma
作者:李强强上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算。这一讲,泥瓦匠带你走进Java中的进制详解。一、引子在Java世界里,99%的工作都是处理这高层。那么二进制,字节码这些会在哪里用到呢?自问自答:在跨平台的时候,就凸显神功了。比如说文件读写,数据通信,还
1 线程中断 1.1 什么是线程中断? 线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断过程表示一个运行中的线程,通过其他线程调用了该线程的 方法,使得该线程中断标志位属性改变。 深入思考下,线程中断不是去中断了线程,恰恰是用来通知该线程应该被中断了。具体是一个标志位属性,
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocketReprint it anywhere u want需求 项目在设计表的时候,要处理并发多的一些数据,类似订单号不能重复,要保持唯一。原本以为来个时间戳,精确到毫秒应该不错了。后来觉得是错了,测试环境下很多一
纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 加微信:bysocket01
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocketReprint it anywhere u want.文章Points:1、介绍RESTful架构风格2、Spring配置CXF3、三层初设计,实现WebService接口层4、撰写HTTPClient 客户
Writer :BYSocket(泥沙砖瓦浆木匠)什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道“就一个回调…”。此时千万个草泥马飞奔而过(逃哈哈,看着源码,享受着这种回调在代码上的作用,真是美哉。不妨总结总结。一、什么是回调回调,回调。要先有调用,才有调用者和被调用者之间的回调。所以在百
Writer :BYSocket(泥沙砖瓦浆木匠)一、什么大小端?大小端在计算机业界,Endian表示数据在存储器中的存放顺序。百度百科如下叙述之:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加
What is a programming language? Before introducing compilation and decompilation, let's briefly introduce the Programming Language. Programming la
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket泥瓦匠喜欢Java,文章总是扯扯Java。 I/O 基础,就是二进制,也就是Bit。一、Bit与二进制什么是Bit(位)呢?位是CPU
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocket一、前言 泥瓦匠最近被项目搞的天昏地暗。发现有些要给自己一些目标,关于技术的目标:专注很重要。专注Java 基础 + H5(学习) 其他操作系统,算法,数据结构当成课外书博览。有时候,就是那样你越是专注方面越