【修真院java小课堂】什么是TCP/IP协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?

大家好,我是IT修真院西安分院第三期学员,一枚正直纯洁善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务二,深度思考中的知识点——什么是TCP/IP协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?

一、背景介绍

要想了解什么是TCP/IP协议,就要知道什么是网络协议。书本上的定义:网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

中国人之间交流使用汉语,要遵循汉语的语法结构和发音;那如果我们跟英国人交流的话,就要使用英语的语法结构和发音;我们人与人之间交流所用的语言就是一种协议。对于计算机来说,两台机器之间的通信就要制定各种各样的协议,例如:文件传输使用TCP协议,域名系统使用DNS协议。数据根据协议规定的内容进行传输,这样就实现了两台机器之间的通信。

总的来说:网络协议就是人为规定的一套通信规范,只要双方都遵循这个规范,就能实现交流。

TCP/IP具体含义:从字面意义上讲,可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。然而多数情况下,它只是利用ip进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。

二、知识剖析

TCP/IP协议族中有一个重要的概念是分层,TCP/IP协议按照层次分为以下四层:

应用层、传输层、网络层、数据链路层。提到协议分层,通常会联想到OSI的七层协议经典架构,但是TCP/IP协议族的结构则稍有不同。如图所示

1、数据链路层

功能:定义了电信号的分组方式, 统一的标准,即以太网协议ethernet

ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址

mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

有了mac地址,两台硬件设备就可以通信,通过arp协议获取另一台设备的mac地址;以广播的方式进行发送(群发),所有的设备收到数据包后,自己验证报头head部分中的mac地址是不是自己的,来确定是否响应

2、网络层

网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

首先,以太网的广播方式, 一台机器发送的包全世界都会收到;

其次,互联网是由一个个彼此隔离的小的局域网组成的,在局域网内以广播的方式;为了分辨广播域, 采用路由的方式(向不同广播域/子网分发数据包);

IP协议:

规定网络地址的协议叫ip协议,它定义的地址称之为ip地址

ip地址分成两部分

网络地址:标识子网----网络ip

主机地址:标识主机----分配的ip

ip地址和子网掩码计算>>>>>得到网络地址和主机地址

(1)网络地址:ip地址结合子网掩码区分出自己所处的子网-----确定属于哪一个局域网

(2)地址解析协议ARP:以广播的方式发送数据包(报头中包含主机ip),主机通过主机ip确定是否响应,返回自己的mac地址

3、传输层

由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序--通过端口确定应用程序

传输层功能:建立端口到端口的通信

tcp协议:

可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

udp协议:

不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

4、应用层

由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 

应用层功能:规定应用程序的数据格式。

浏览器和服务端之间通信所用的协议是HTTP协议,所传输数据的主要格式为HTML。

发送电子邮件时用到的协议是SMTP。

文件传输(FTP)

远程登录常用TELNET与SSH两种协议。远程登录是指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。

网络管理(SNMP)

 

三、常见问题

1,TCP/IP协议通信的过程?

2,如何建立TCP/IP连接?

3,为什么要三次握手?

四、解决方案

(一)TCP/IP协议通信的过程

通信的过程其实就对应着数据装包与拆包的过程。装包的过程,数据发送方每层不断地封装首部,添加一些信息用于传输,确保能传输到目的地。拆包的过程,数据接收方每层不断地拆除首部,得到最终传输的数据。(图例)

每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。

浏览器访问服务器服务流程:

1、浏览器访问网址

2、dns协议解析域名

3、http协议---http数据,确定数据传输格式等

4、TCP协议---加TCP首部----端口之间发送数据包----三次握手达成连接

5、IP协议---加IP首部----通过IP地址确定网络地址

6、以太网协议--加以太网首部----确定mac地址(主机网卡的唯一标识)

(二)如何建立TCP/IP连接?

TCP传输控制协议,是一个面向连接的协议。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

基础信息:

TCP报文格式

(1)序列号:Sql序号,用来标识数据包,发起方发送数据时对此进行标记。

(2)确认序号:Ack序号,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

(3)标志位:共6个,即SYN、ACK、PSH、RST、URG、FIN

1)SYN:发起一个请求。 2)ACK:确认序号有效(表示对请求的响应)。 
3)URG:紧急指针(urgent pointer)有效。 4)PSH:接收方应该尽快将这个报文交给应用层。
5)RST:重置连接。 6)FIN:释放一个连接。

三次握手:

第一次握手:客户端发送一个TCP标志位SYN=1,ACK=0的数据包给服务端,并随机会产生一个Seq=J.当服务端接收到这个数据后,服务端由SYN=1可知客户端是想要建立连接;
第二次握手:服务端要对客户端的联机请求进行确认,向客户端发送应答号ACK=1、SYN=1 确认号Ack=J+1,此值是客户端的序列号加1,还会产生一个随机的序列号Seq=K,这样就告诉客户端可以进行连接; 
第三次握手:客户端收到数据后检查Ack是否为J+1,以及标志位ACK的值是否为1,若为1,则会发送ACK=1、确认号码Ack=K+1,告诉服务端,你的请求连接被确认,连接可以建立,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

三次握手通过抓包的实例:(与以上流程结合理解)

(三)为什么要三次握手?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

三次握手是在安全可靠的基础上,握手次数最少的方案。两次握手并不能保证可靠性。四次握手又浪费了效率,当然,有的需要更高安全性的地方,是可以有N次握手协议的,但那是特殊情况。

client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。

主要目的防止server端一直等待,浪费资源。

5.编码实战

6.扩展思考

网络TCP建立连接为什么需要三次握手而结束要四次挥手?

差别在于:

三次握手:client请求连接SYN---server确认收到,发送ACK和SYN---client确认收到

四次挥手:client请求关闭FIN---(server确认收到,发送ACK---server继续发送数据直到完毕,发送FIN)----client确认收到

但是在没有数据传输是,会出现以下现象:

也就是三次握手连接,三次回收断开连接。

7.参考文献

网络协议

https://www.cnblogs.com/linhaifeng/articles/5937962.html

三次握手

https://www.cnblogs.com/QingFlye/p/4442529.html

基于实例

https://blog.csdn.net/chenvast/article/details/77978588

https://www.cnblogs.com/rootq/articles/1377355.html

八、更多讨论

(一)TCP与UDP的区别

TCP即传输控制协议,UDP即用户数据报协议,他们的区别主要有以下几点:

1、TCP协议是面向连接的,发送数据之前需要建立连接;UDP协议是无连接的,发送数据之前不需要建立连接
2、TCP协议提供可靠的传输服务;UDP协议提供不可靠的传输服务
3、TCP发送数据大小会受发送窗口、接收窗口及MSS(最大报文段)限制,因此会分为多段发送;UDP发送数据大小即为数据本身大小
4、TCP拥有众多反馈机制与附加机制;UDP没有反馈机制
5、TCP传输速度较慢;UDP传输速度较快

总的来说,TCP协议提供面向连接的,可靠的传输服务,但速度较慢,适合文件下载等传输任务;UDP协议提供无连接的,不可靠的传输服务,但速度较快,适合媒体流等看重传输速度的传输任务。

(二)Sequence number序列号是什么?

Sql序号,用来标识数据包,发起方发送数据时对此进行标记。数据包的序号,有操作系统根据一定的算法生成,相当于id的作用。

(三)acknowledgement number和ACK区别?

ACK:标识符,只有0和1,只要有数据包的传输,ACK就要set为1;

acknowledgement number:ack序号,只有ACK标志位为1时,确认序号字段才有效,ack=Seq+1;在数据包传输过程中ack=seq+len;

 

感谢观看,如有出错,恳请指正

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值