手记

前端不得不了解的TCP协议

背景

早期的网络是基于OSI(开放式系统互联网,一般叫OSI参考模型)模型,该模型是由ISO国际标准组织制定的,包含了七层(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层),即复杂又不实用,以至于招到了许多批评,所以,当时就有一批技术人员为了方便开发,提高效率,自己开发了一套新的协议,TCP/IP协议,在简化的计算机网络OSI模型中,她完成了第四层传输层所指定的功能

概念

TCP/IP协议(Transmission Control Protocol),翻译过来是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。包含有四层(应用层、传输层、网际层、网络接口层),不过从实质来讲,TCP/IP协议只有最上面的三层,因为最下面的网络接口层基本上和一般的通信链路的功能上没多大差别

  • 应用层:负责处理特定的应用程序细节。包含各种应用程序协议,如:Telnet远程登录、FTP文件传输协议、SMTP简单邮件传送协议、SNMP简单网络管理协议

  • 传输层:为网络提供了流量控制,错误控制和确认服务。在TCP/IP协议族里面,又包含两个互不相同的传输协议:TCP和UDP,后面会讲解

  • 网际层:提供独立于硬件的逻辑寻址,实现物理地址与逻辑地址的转换,网际层(也叫网络层)协议包括IP协议、ICMP协议以及OGMP协议( Internet 组管理协议)

  • 网络接口层:通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆或其他人护额传输媒介的物理接口细节,对应的设备有,传输介质、网卡、交换机

TCP与UDP

TCP和UDP是两种最为著名的传输层协议,二者都使用IP作为网络层协议尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务

TCP

TCP,传输控制协议,面向连接的协议,可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须建立一个TCP连接

特点:

  • 只支持一对一传输(端对端的传输)

  • 数据大小无限制

  • 建立连接通道

  • 速度慢,但是可靠性高

UDP协议

用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP提供了无连接通信,适合于一次传输少量数据,UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP

特点:

  • 可以一对一、一对多、多对一和多对多的交互通信
  • 速度快,但可靠性低
  • 数据有大小限制(64k)
  • 不需要建立连接

应用:

一般应用于QQ、微信等即时聊天上

TCP和UDP的区别

  • TCP面向连接(如打电话要先拨号建立连接),UDP是无连接的,即发送数据之前不需要建立连接
  • TCP提供可靠的服务,也就是说通过TCP连接传送的数据,无差错,无丢失,不重复,且按序到达;TCP通过校验和重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制,UDP尽最大努力交付,即不保证可靠交付
  • UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信
  • 每一条TCP连接只能是点对点,UDP支持一对一、一对多、多对一和多对多的交互通信
  • TCP对系统资源要求较多,UDP对系统资源要求较少

三次握手与四次挥手

这个是前端面试中,最经常考的,所以呢,这个我们得重点掌握才行。

tcp的首部数据

在了解三次握手和四次挥手之前,我们得先了解tcp头部数据的宏观位置和首部报文格式,方便我们后面理解

宏观位置

  • 数据从应用层->传输层->网络层->链路层,没经过一次都会在保温中增加相应的首部
  • tcp数据被封装在ip数据报中

首部报文格式

一行有32个bit即32位,1个字节=8个位,即一行有4个字节

  • 16位源端口和16位目的端口:告知主机该报文段是来自哪里(源端口Source Port)以及传给哪个上层协议或应用程序
  • 32位序号:用于对字节流进行编号
  • 确认号:期望收到的下一个报文段的序号
  • 选项:长度不定
  • 数据:该TCP协议包负载的数据

标识位说明:

  • URC:紧急标志,为1时,表示紧急指针有效
  • ACK:确认标志,连接建立成功,总为1,为1时确认号有效
  • PSH:接收方应尽快把这个报文交给应用层
  • RST:复位标志,重建连接
  • SYN:同步标志,该标志仅在三次握手建立TCP连接时有效,它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。
  • FIN:关闭连接标志

三次握手

  • 三次握手机制是为了保证建立一个安全可靠的连接
  • tcp连接是全双工的,数据在两个方向上能同时传递


第一次握手:第一次握手是有客户端发起的,客户端向服务端发送一个报文,在报文里面SYN标志位为1,seq携带一位32位的序列号,当服务端收到这个报文之后,就在知道客户端是想要和我建立一个新的连接

第二次握手:第二次握手是由服务端发起的,服务端在收到客户端在第一次握手时发的报文之后,确定客户端是想和自己建立连接后,,于是服务端就向客户端发送了一个确认消息包,在这个包里面,SYN标志位和ACK标志位都为1,并携带32位的确认序号

以上两次握手后,对于客户端而言,已经明确了客户端既能给服务端发小心,也能收到服务端的响应。但是对服务端而言,两次握手是不够的,到目前为止,服务端只知道一件事情,客户端发给我的消息我能收到,但是客户端能不能收到我的消息我是不知道的,所以,还需要进行第三次握手

第三次握手:第三次握手就是当客户端收到服务端发送的响应报文之后,还要继续去给服务端进行回应,在报文里面携带一个32位的确认序号。

通过以上三次握手之后,不管是客户端还是服务端,都知道,我既能给对方发送消息,也能收到对方的响应,那么这个连接就被安全的创建了

四次挥手

第一次挥手:第一次挥手也是由客户端发起的,客户端会发送一个报文,报文里面FIN标志位为1,表示关闭连接,当服务端收到这个报文之后,就知道客户端想要和我断开连接了

第二次挥手:第二次报文是由服务端发起的,当服务端收到客户端的报文之后,服务端辞职可能还有未发送完的报文消息,需要继续发送,所以此时客户端只能告诉客户端,我知道你要和我断开连接啦,但是我还没准备好,需要等我一下等我好了之后我会通知你的(此时的报文消息里面包含32位确认序号ack和确认标志ACK=1)

第三次挥手:此时的服务端已经准备好了,于是就告诉客户端,我可以断开连接啦,在这条消息报文里面FIN=1,并携带32位的ack确认序号

第四次挥手:当客户端收到服务端的断开连接的报文后,客户端同样需要继续发送一个确认包的报文给服务端。

通过这四次的相互沟通和连接,不断时客户端还是服务端,都已经做好了断开的准备

作者:Cynthia-milk
出处:https://www.cnblogs.com/cythia/p/14743096.html

0人推荐
随时随地看视频
慕课网APP