前端不得不了解的TCP协议

更新日期: 2021-05-04阅读: 1.5k标签: 协议

背景

早期的网络是基于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确认序号

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

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

原文 http://www.cnblogs.com/cythia/p/14743096.html

链接: https://www.fly63.com/article/detial/10273

Web开发HTTP协议知识_常用http方法、http状态码等(前端开发和面试必备))

HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

//缺省协议的讲解,用 //代替 http:// 有什么好处?

//缺省协议的使用,代表资源访问的协议和当前页面保持一致,如果当前页面是http ,采用http协议访问,如果是https,则使用 https 协议访问。这样用就不管是http还是升级到https都不用改动代码,现在很多CDN资源都是这样引用。一般使用在内链中,外链的协议头具有不确定性的原因。

常见的网络协议有哪些?几种常用的网络协议

常用的网络协议有TCP/IP协议、HTTP协议、FTP协议、Telnet协议、FTP协议、SMTP协议、NFS协议、UDP协议等。网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

IPv6特点;IPv6与IPv4共存技术

实践证明IPv4是一个非常成功的协议,它本身也经受住了Internet从数目很少的计算机发展到目前上亿台计算机互联的考验。但该协议是几十年前基于当时的网络规模而设计的。

HTTP协议无状态,到底要怎么理解?

一天,你有个需求,你要去超市买一瓶酱油。到了超市买了酱油,你告诉售货员,下次给我准备下面粉,我下次来拿。第二次,你去超市拿面粉,售货员说他不记得你什么时候说要准备面粉。

HTTP与TCP的区别和联系

手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”

HTTP无状态协议理解

HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

实现memcached客户端:TCP、连接池、一致性哈希、自定义协议

memcached 本身并不支持集群,为了使用集群,我们可以自己在客户端实现路由分发,将相同的 key 路由到同一台 memcached 上去即可。路由算法有很多,这里我们使用一致性哈希算法。

HTTP 协议的 8 种请求类型介绍

HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式,具体介绍如下:虽然 HTTP 的请求方式有 8 种,但是我们在实际应用中常用的也就是 get 和 post

javascript伪协议是什么?

伪协议是为关联应用程序而使用的,JavaScript伪协议实际上是把javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!