TCP与UDP,TCP的三次握手和四次挥手

  • TCP three handshake and four handwave

首先来看一下什么是TCP协议:
事实上,TCP协议只是互联网四层模型(TCP/IP)对应协议的一层。此四层模型用于实现互联网上主机之间的相互通信。
应用层协议
TCP/UDP(传输层协议)
IP(网络层协议)
以太网协议

与OSI七层模型包含的协议层层对应,同样最底层的以太网数据包里面包含了以太网表头,IP标头,TCP标头以及最内层的应用层数据包。一个数据包的大小是固定的 为1522个字节,最开头的22个字节是以太网协议标头,再往里的20字节是IP协议标头,再往里的20字节是TCP协议标头。由于还存在其他信息 所以TCP数据包在1400字节左右。所以从低到顶是层层解封装,而从顶到底是层层封装
在这里插入图片描述
在这里插入图片描述
TCP和UDP都是传输层协议,两者有何区别?
与TCP20字节封装头不同 UDP的封装头只有8字节
简而言之 就是:
TCP封装格式:以太网首部(14)+IP首部(20)+TCP首部(20)+应用数据+以太网尾部(4)
UDP封装格式:以太网首部(14)+IP首部(20)+UDP首部(8)+应用数据+以太网尾部(4)。
除了两者在封装字节长度上的区别 还有哪些区别呢?
我们知道,TCP全称为:transmission control protocol, 传输控制协议。也就是说 在收发数据之前,需要和对方建立可靠的链接。一个TCP链接必须要经过三次握手才能建立起来。
通俗一点 这三次握手可以被概括为:主机A想向主机B发数据,因此第一次握手:主机A向B发出链接请求数据包。第二次:主机B向主机A发送同意连接和要求同步:同意连接 请问何时发? 第三次:主机A再发一个数据包要求同步:我现在就发 请准备接受。这三次对话之后 主机A向主机B正式发送数据。
专业一点:第一次握手:主机A向主机B发送一个含有SYN(同步序列号的标志位)的数据段给主机B,向主机B请求建立连接。通过这个SYN数据段,主机A告诉主机B两件事:我想和你通信,你可以用这个SYN作为起始数据段来回应我。
第二次握手:主机B收到主机A的请求之后 用一个带有ACK和SYN的数据段回应A,相当于告诉A:请求已收到,你可以用SYN序列号作为起始字段传输数据了。
第三次握手:主机A收到此ACK和SYN的数据段之后 发送一个确认应答给B.
三次握手通信的特点:在此过程中没有应用层的数据被传输,SYN这个标志位只有再TCP建立连接(进行时)的时候才会被置为1,握手完成后SYN标志位被置为0.

那么四次挥手是什么呢?
四次挥手用于断开连接(即A传输完数据之后)
第一次:当主机A完成数据传输,将控制位FIN置1(即题出停止TCP连接的请求)
第二次:当主机B收到后 需要做一次确认,因此其将ACK置1 表示已经收到
第三次:由主机B发起数据完成 请求关闭的请求,将FIN置1 (主机B发送完ACK=1 and FIN=1后关闭)
第四次:主机A对主机B的请求进行确认 将ACK置1,A关闭。

那么为什么TCP采取三次握手四次挥手呢?因为TCP使用面向连接的通信方式,大大提高了数据通信的可靠性 是的发送数据端和接收端在数据正式传输前就有了交互,为数据的正式传输打下了可靠的基础。
我们再来看UDP:全称user data protocol(用户数据报协议)
他是一个非面向连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传输带宽的限制; 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等, 因此一台服务机可同时向多个客户机传输相同的消息。
吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、 源端和终端主机性能的限制。
UDP使用尽最大努力交付,即不保证可靠交付, 因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
(小插曲:ping命令是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping命令是使用 IP 和网络控制信息协议 (ICMP),因而没有涉及到任何传输协议(UDP/TCP) 和应用程序。它发送icmp回送请求消息给目的主机。 事实上经常用ping来查自己IP地址是否在墙外)。

总结TCP与UDP的区别:
1、基于连接与无连接;

2、对系统资源的要求(TCP较多,UDP少);

3、UDP程序结构较简单;

4、流模式与数据报模式 ;

5、TCP保证数据正确性,UDP可能丢包;

6、TCP保证数据顺序,UDP不保证。

TCP/UDP的应用场景:
TCP:TCP虽然精确 但是需要的资源多。因此用于文件传输 发送和接受邮件 远程登陆等场景
UDP: 其虽然不提供可靠交付,但是在即时通讯方面 是一种很有效的工作方式。

下面是三次握手和四次挥手的示意图 有助于理解:
在这里插入图片描述
在这里插入图片描述

如何快速记住三次握手和四次挥手?
三次握手的主要目的是为了每一边都确认四个东西:自己的传送和接受正常 对方的传送和接受正常
第一次: server确认对方发送正常
第二次:client确认自己发送接受正常 对方发送接受正常 server确认了自己接受正常 对方发送正常。
第三次:client确认自己发送接受正常 对方发送接受正常 server确认了自己发送、接收正常,对方发送,接收正常

四次挥手:
四次挥手的目的:任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
服务器-关闭与客户端的连接,发送一个FIN给客户端
客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

posted @ 2020-03-31 12:03  EvanMeetTheWorld  阅读(48)  评论(0)    收藏  举报