什么是TCP/IP协议?

什么是TCP/IP协议?

计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件,操作系统之间的通信,所有这一切都需要一种规则.而我们就将这种规则称为协议 (protocol).

image-20191027150025587

也就是说,TCP/IP 是互联网相关各类协议族的总称。

TCP/IP 的分层管理

TCP/IP协议里最重要的一点就是分层。TCP/IP协议族按层次分别为 应用层,传输层,网络层,数据链路层,物理层。当然也有按不同的模型分为4层或者7层的。

为什么要分层呢?

把 TCP/IP 协议分层之后,如果后期某个地方设计修改,那么就无需全部替换,只需要将变动的层替换。而且从设计上来说,也变得简单了。处于应用层上的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪个地方,怎样传输,如果确保到达率等问题。

image-20191027150352733

如上图所示,我们将TCP/IP分为5层,越靠下越接近硬件。我们由下到上来了解一下这些分层。

  1. 物理层

    该层负责 比特流在节点之间的传输,即负责物理传输,这一层的协议既与链路有关,也与传输的介质有关。通俗来说就是把计算机连接起来的物理手段。

  2. 数据链路层

    控制网络层与物理层之间的通信,主要功能是保证物理线路上进行可靠的数据传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据结构的结构包,他不仅包含原始数据,还包含发送方和接收方的物理地址以及纠错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。如果在传达数据时,接收点检测到所传数据中有差错,就要通知发送方重发这一帧。

  3. 网络层

    决定如何将数据从发送发路由到接收方。网络层通过综合考虑发送优先权,网络拥塞程度,服务质量以及可选路由的花费等来决定从网络中的A节点到B节点的最佳途径。即建立主机到主机的通信。

  4. 传输层

    该层为两台主机上的应用程序提供端到端的通信。传输层有两个传输协议:TCP(传输控制协议)和 UDP(用户数据报协议)。其中,TCP是一个可靠的面向连接的协议,udp是不可靠的或者说无连接的协议

  5. 应用层

    应用程序收到传输层的数据后,接下来就要进行解读。解读必须事先规定好格式,而应用层就是规定应用程序的数据格式。主要的协议有:HTTP.FTP,Telent等。

TCP与UDP

TCP/UDP 都是传输层协议,但是两者具有不同的特效,同时也具有不同的应用场景。

image-20191027212512703

面向报文

面向报文的传输方式是应用层交给UDP多长的报文,UDP发送多长的报文,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。

面向字节流

虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应该程序传送的数据块太长,TCP就可以把它划分短一些再传送。

TCP的三次握手与四次挥手

具体过程如下:

  • 第一次握手:建立连接。客户端发送连接请求报文段,并将syn(标记位)设置为1,Squence Number(数据包序号)(seq)为x,接下来等待服务端确认,客户端进入SYN_SENT状态(请求连接);

  • 第二次握手:服务端收到客户端的 SYN 报文段,对 SYN 报文段进行确认,设置 ack(确认号)为 x+1(即seq+1 ; 同时自己还要发送 SYN 请求信息,将 SYN 设置为1, seq为 y。服务端将上述所有信息放到 SYN+ACK 报文段中,一并发送给客户端,此时服务器进入 SYN_RECV状态。

    SYN_RECV是指,服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。

  • 第三次握手:客户端收到服务端的 SYN+ACK(确认符) 报文段;然后将 ACK 设置为 y+1,向服务端发送ACK报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED(连接成功)状态,完成TCP 的三次握手。

上面的解释可能有点不好理解,用《图解HTTP》中的一副插图 帮助大家。

img

当客户端和服务端通过三次握手建立了 TCP 连接以后,当数据传送完毕,断开连接就需要进行TCP的四次挥手。其四次挥手如下所示:

  • 第一次挥手

    客户端设置seq和 ACK ,向服务器发送一个 FIN(终结)报文段。此时,客户端进入 FIN_WAIT_1 状态,表示客户端没有数据要发送给服务端了。

  • 第二次挥手

    服务端收到了客户端发送的 FIN 报文段,向客户端回了一个 ACK 报文段。

  • 第三次挥手

    服务端向客户端发送FIN 报文段,请求关闭连接,同时服务端进入 LAST_ACK 状态。

  • 第四次挥手

    客户端收到服务端发送的 FIN 报文段后,向服务端发送 ACK 报文段,然后客户端进入 TIME_WAIT 状态。服务端收到客户端的 ACK 报文段以后,就关闭连接。此时,客户端等待 2MSL(指一个片段在网络中最大的存活时间)后依然没有收到回复,则说明服务端已经正常关闭,这样客户端就可以关闭连接了。

最后再看一下完整的过程:

img

如果有大量的连接,每次在连接,关闭都要经历三次握手,四次挥手,这显然会造成性能低下。因此。Http 有一种叫做 长连接(keepalive connections) 的机制。它可以在传输数据后仍保持连接,当客户端需要再次获取数据时,直接使用刚刚空闲下来的连接而无需再次握手。

img

一些问题汇总:

1. 为什么要三次握手?

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

具体解释: “已失效的连接请求报文段”产生情况:

client 发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间滞留,因此导致延误到连接释放以后的某个时间才到达 service。如果没有三次握手,那么此时server收到此失效的连接请求报文段,就误认为是 client再次发出的一个新的连接请求,于是向 client 发出确认报文段,同意建立连接,而此时 client 并没有发出建立连接的情况,因此并不会理会服务端的响应,而service将会一直等待client发送数据,因此就会导致这条连接线路白白浪费。

如果此时变成两次挥手行不行?

这个时候需要明白全双工与半双工,再进行回答。比如:

  • 第一次握手: A给B打电话说,你可以听到我说话吗?
  • 第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗?
  • 第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!

在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 **这样,就可以开始正常通信了。**如果是两次,那将无法确定

2. 为什么要四次挥手?

TCP 协议是一种面向连接,可靠,基于字节流的传输层通信协议。TCP 是全双工模式(同一时刻可以同时发送和接收),这就意味着,当主机1发出 FIN 报文段时,只是表示主机1已结没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回 ACK报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会中断这次TCP连接。

3.为什么要等待 2MSL

MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间

原因如下:

  • 保证TCP协议的全双工连接能够可靠关闭
  • 保证这次连接的重复数据从网络中消息

第一点: 如果主机1直接 关闭,由于IP协议的不可靠性或者其他网络原因,导致主机2没有收到主机1最后回复的 ACK。那么主机2就会在超时之后继续发送 FIN,此时由于主机1已经关闭,就找不到与重发的 FIN 对应的连接。所以,主机1 不是直接进入 关闭,而是TIME_WAIT 状态。当再次收到 FIN 的时候,能够保证对方收到 ACK ,最后正确关闭连接。

第二点:如果主机1直接 关闭,然后又再向主机 2 发起一个新连接,我们不能保证这个新连接与刚才关闭的连接端口是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但还是有特殊情况出现;假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中( Lost Duplicate ),那些延迟数据在建立新连接之后才到达主机2,由于新连接和老连接的端口号是一样的,TCP 协议就认为哪个延迟的数据时属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接要在 TIME_WAIT 状态等待两倍 MSL ,保证本次连接的所有数据都从网络中消失。

### 回答1: TCP/IP协议是一种网络协议,它是互联网的基础协议,用于在网络中传输数据。TCP/IP协议是由两个协议组成的,分别是传输控制协议(TCP)和互联网协议(IP)。 TCP/IP协议的特点包括以下几点: 1. 可靠性:TCP协议提供可靠的数据传输,确保数据的完整性和准确性。 2. 分组传输:IP协议将数据分成小的数据包进行传输,提高了网络的效率。 3. 网络互联:TCP/IP协议可以连接不同类型的网络,实现不同网络之间的通信。 4. 开放性:TCP/IP协议是开放的标准,任何人都可以使用它来进行网络通信。 5. 灵活性:TCP/IP协议可以根据不同的应用需求进行配置和调整,具有很强的灵活性。 ### 回答2: TCP/IP协议是计算机网络中使用最广泛的协议之一,也是互联网的核心协议。TCP/IP是Transmission Control Protocol/Internet Protocol的缩写,它由两个协议共同构成:TCP协议和IP协议TCP协议用于数据的可靠传输,而IP协议则主要负责网络中数据的路由和传输。 TCP/IP协议是一种分层协议体系,分为四层:应用层、传输层、网络层和物理链路层。其中应用层协议包括http、ftp、smtp等,它们是用户直接使用的协议。传输层协议主要有TCP和UDP两种,TCP协议可以确保数据传输的可靠性,而UDP协议则主要用于视频、音频等实时传输数据。网络层协议主要是IP协议,它负责把数据包从源节点传输到目的节点,同时负责路由的选择。物理链路层则主要是把数字信号转换为模拟信号或光信号,进行物理传输。 TCP/IP协议的特点包括: 1. 可靠性高:TCP协议可以确保数据传输的可靠性,可靠地传输数据包,不容易出错。 2. 开放性:TCP/IP协议是开放性的、公共的协议,任何人都可以使用,不受特定计算机或操作系统的限制。 3. 传输效率高:TCP/IP协议不仅能支持大量的用户,还能够进行高速数据传输。并且通过路由器来优化网络传输,进一步提高了传输效率。 4. 灵活性:TCP/IP协议允许通过在网络各层添加新的协议来扩展网络功能,使其更加灵活维护和管理。 总的来说,TCP/IP协议已经成为现代计算机和通信网络中不可或缺的协议标准。通过它,我们可以实现电子邮件、网页浏览、文件下载等多种网络应用。 ### 回答3: TCP/IP协议是一种网络协议,是互联网的核心协议。TCP/IP是由美国国防部在20世纪60年代中期开发出来的,经过几十年的发展和改进,已经成为了互联网上最普及的网络协议之一。 TCP/IP协议是一种面向连接的协议,通常使用传输控制协议(TCP)来保证数据的可靠性和完整性,使用互联网协议(IP)来把数据包发往目的地和路由。TCP负责数据的可靠传输、数据的分段等工作,IP负责地址的分配、路径选择等工作,这两个协议共同构成了TCP/IP协议。当前的TCP/IP协议一般分为四层:应用层、传输层、网络层和物理层。 TCP/IP协议有以下几个特点: 1. 网络开放性强:TCP/IP协议可以在各种不同的计算机系统之间进行通讯,从而具有很强的互操作性和开放性。 2. 分层结构明确:TCP/IP协议的分层结构明确,每一层都有自己的功能,可以相互独立地发展和演化。 3. 面向连接的协议:TCP协议是一种面向连接的协议,数据传输之前需要先建立连接,保证数据的可靠性和完整性。 4. 实现路由选择功能:IP协议可以实现路由选择功能,使得不同的数据包可以寻找到合适的路径,从而提高了数据传输的效率。 5. 支持多种网络协议:TCP/IP协议支持多种不同的网络协议,使得网络的组织和管理更加灵活和自由。 总之,TCP/IP协议是互联网的核心协议之一,其开放性、灵活性和可靠性使得它成为了网络领域的重要标准之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值