TCP/IP/UDP/HTTP/WebSocket/Socket关系区别与含义的理解

TCP/IP/UDP/HTTP/WebSocket/Socket关系区别与含义的理解

之前有些学习过各个协议的含义和理解,但是因为知识点太多也很容易混淆,所以抽空重新复习了一遍,希望能更清晰的明白这些协议以及API之间的含义与区别,所以网上写的很多内容也大致相同,但是自己写的有助于加深记忆和理解.

这里首先说明我想按照从大块到小块的顺序写比较清晰

TCP/IP

TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。因为TCP和IP这两个协议其实最早通过的协议,也是这个协议组的合兴所以才取名TCP/IP.

TCP/IP协议分为四层

  • 网络接口层 (这个不用管,反正也看不懂)

    • 包含(Ethernet 802.3、Token Ring 802.5PPP ATM等)
  • 网络层 (估计也就看得懂一个ip协议)

    • IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)

      控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。

  • 传输层 (下面会解释TCP和UDP)

    • TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。
  • 应用层 (主要理解HTTP)

    • FTP、TELNET、DNS、SMTP、NFS、HTTP、WebSocket

Scoket

单独把Scoket列出来是因为,他不是一个协议,他是两个应用程序之间互相通信得管道,在TCP/IP得上一层,也就是在传输层和应用层之间的抽象层,是一组API,他可以创建TCP和UDP两种链接,所以他和Websocket没有特别大的关系


TCP/UDP,HTTP/WebScoket的区别和关系

首先从上面我们可以知道 TCP/UDP属于同一层传输层,HTTP/WebSocket属于同一层传输层,所以我们分为两组分别比较

TCP

TCP是一种面向连接的协议,必须经过三次握手(三次链接,四次断开),经过建立连接后才能传输数据.通俗来说TCP需要通过三次握手确保链接能够成功才能发送数据,丢包会自动重传

三次握手:

TCP/IP/UDP/HTTP/WebSocket/Socket关系区别与含义的理解_第1张图片

  • 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

UDP

UDP是一种面向无连接协议,也就是UDP很不负责直接讲数据发给指定IP,不保证数据能够到达

TCP和UDP区别

  • TCP面向链接,UDP面向数据报 TCP需要三次握手建立链接才能发送,UDP直接发送信息不需要先建立链接
  • TCP传输安全,UDP传输不安全,TCP发生丢包会自动重传,恢复链接,UDP不会
  • TCP有序,UDP无序,TCP的数据接受可能有前后,但是最后会对接受到的所有数据进行排序,UDP没有
  • TCP只能进行一对一的链接,UDP可以建立一对多,多对一,多对多,一对一的链接
  • TCP首部默认为20字节,最长为40字节, UDP首部为8个字节
  • TCP可以进行拥塞控制,UDP不能进行拥塞控制(什么是拥塞控制,这里拥塞控制及流量控制理解)
  • TCP因为是流模式传输,传输的数据大小是没有限制的,UDP是以数据包传输的,传输的大小有限制

结论

通常情况我们都是用TCP连接的,这样可以保证数据安全,但是如果我们不需要保证数据安全传输的情况下可以用UDP,因为TCP需要三次握手且首部大更为消耗网络资源.


HTTP/WebSocket

两者都是基于TCP协议的应用层协议,所以两者再建立链接时都要进行三次握手.因为两者都经常用到

HTTP

HTTP超文本传输协议是互联网上应用最为广泛的一种网络协议,用于客户端像服务器发送请求数据,但是只能单向的由客户端向服务器请求,服务器不能主动向客户端发送信息。

WebSocket

WebSocket协议其实就是为了实现了浏览器与服务器全双工通信,可以说是为了优化HTTP的单向,短链接.也就是浏览器和服务器可以同时向互相发送信息,能建立一种持久化的链接状态,每次开启只需要通过HTTP建立一次链接,就可以不断传输数据。

你可能感兴趣的:(js,笔记,前端笔记)