TCP/IP & HTTP & WebSocket & Socket & 路由

最近在写一个上位机,需要将采集到的数据上传到云平台,然后就考虑到使用WebSocket实现,但是WebSocket和Socket有啥区别,这两个东西分别是个啥,咱也不清楚,然后就查资料,发现有好多之前想了解但是不清楚的东西,这里就记录一下,方便以后查阅。

OSI七层模型

https://blog.csdn.net/Gherbirthday0916/article/details/123392291

1. 简介

OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。

2. 七层的划分

OSI定义了网络互连的七层框架 (物理层、数据链路层、网络层、传输层、会话层、表示层、应用层) ,即ISO开放互连系统参考模型。

每一层实现各自的功能和协议,并完成与相邻层的接口通信。

OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。

在这里插入图片描述

七层协议举例
应用层例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
表示层例如XDR、ASN.1、SMB、AFP、NCP
会话层例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
传输层例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
网络层例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25
数据链路层例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
物理层例如线路、无线电、光纤、信鸽

3. 七层的解释

3.1 应用层

就是应用软件使用的协议。

如邮箱使用的POP3,SMTP、远程登录使用的Telnet、获取IP地址的DHCP、域名解析的DNS、网页浏览的http协议等;这部分协议主要是规定应用软件如何去进行通信的

3.2 表示层

决定数据的展现(编码)形式,如同一部电影可以采样、量化、编码为RMVB、AVI,一张图片能够是JPEG、BMP、PNG等。

3.3 会话层

为两端通信实体建立连接(会话),中间有认证鉴权以及检查点记录(供会话意外中断的时候可以继续,类似断点续传)。

3.4 传输层

将一个数据/文件斩件分成很多小段标记顺序以被对端接收后可以按顺序重组数据,另外标记该应用程序使用的端口号及提供QOS(Quality of Service,服务质量)。(不同的应用程序使用不同计算机的端口号,同样的应用程序需要使用一样的端口号才能正常通信)

3.5 网络层

路由选路,选择本次通信使用的协议(http、ftp等),指定路由策略及访问控制策略。(IP地址在这一层)

3.6 数据链路层

根据端口与MAC地址,做分组(VLAN)隔离、端口安全、访问控制。(MAC地址在这一层)处理VLAN内的数据帧转发,跨VLAN间的访问,需要上升到网络层。

3.7 物理层

将数据最终编码为用0、1标识的比特流,然后传输。(例如将题主头像的图片,变为一串01100111100这样的数字来表示)。

TCP/IP参考模型

TCP/IP四层模型

TCP/IP五层模型

每一层都呼叫它的下一层提供的网络来完成自己的需求。

  1. 物理层: 负责光电信号传递方式。集线器工作在物理层。以太网协议。
  2. 数据链路层: 负责设备之间的数据帧的传输和识别。交换机工作在数据链路层。例如网卡设备的驱动,帧同步,冲突检测,数据差错校验等工作。
  3. 网络层: 负责地址管理和路由选择。路由器工作在网络层。
  4. 传输层: 负责两台主机之间的数据传输。
  5. 应用层: 负责应用程序之间的沟通。网络编程主要针对的就是应用层。

在这里插入图片描述

在这里插入图片描述

如果是四层模型数据链路层和物理层在一层:

在这里插入图片描述

每一层的封装结构如下图:

在这里插入图片描述
网络接口层的传输单位是帧(frame),IP层的传输单位是包(package),TCP层的传输单位是段(segment),HTTP的传输单位则是消息或报文(message),这些单位其实并没有本质上的区别,可以统称为数据包。

TCP协议与UDP协议

一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

TCP/IP,TCP,UDP,IP,Socket 之间的关系

一篇文章看明白 TCP/IP,TCP,UDP,IP,Socket 之间的关系

1. TCP/IP

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

TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。像这样把与互联网相关联的协议集合起来总称为 TCP/IP。也有说法认为,TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/IP 是在 IP 协议的通信过程中,使用到的协议族的统称。

2. TCP/IP 的分层管理

TCP/IP 协议族里重要的一点就是分层。把 TCP/IP 层次化是有好处的。比如,如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需把变动的层替换掉即可。把各层之间的接口部分规划好之后,每个层次内部的设计就能够自由改动了。

值得一提的是,层次化之后,设计也变得相对简单了。处于应用层上的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪个地方、对方的传输路线是怎样的、是否能确保传输送达等问题。

OSI中的层功能TCP/IP协议族
7 应用层文件传输,电子邮件,文件服务,虚拟终端TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
6 表示层数据格式化,代码转换,数据加密没有协议
5 会话层解除或建立与别的接点的联系没有协议
4 传输层提供端对端的接口TCP,UDP
3 网络层为数据包选择路由IP,ICMP,OSPF,EIGRP,IGMP
2 数据链路层传输有地址的帧以及错误检测功能SLIP,CSLIP,PPP,MTU
1 物理层以二进制数据形式在物理媒体上传输数据ISO2110,IEEE802,IEEE802.2

3. TCP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

就是指不间断的数据结构,你可以把它想象成排水管中的水流。
TCP 为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。

4. UDP

UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是 OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

UDP 协议全称是用户数据报协议,在网络中它与 TCP 协议一样用于处理数据包,是一种无连接的协议。

UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

UDP 用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用 UDP 协议。

UDP 是不具有可靠性的数据报协议。细微的处理他会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,不能保证消息一定会到达。因此应用有时会根据自己的需要进行重发处理。

5. TCP 与 UDP 区别

TCP 用于在传输层有必要实现可靠传输的情况。由于它是面向有链接并具备顺序控制、重发控制等机制的,所以他可以为应用提供可靠的传输。

UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。

6. IP

网络之间互连的协议(IP)是 Internet Protocol 的外语缩写,IP 是在 TCP/IP 协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目的,IP 定义了寻址方法和数据报的封装结构。第一个架构的主要版本,现在称为 IPv4,仍然是最主要的互联网协议,尽管世界各地正在积极部署 IPv6。

IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址MAC地址(Media Access Control Address)。

IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC地址基本上不会更改。

7. Socket

应用在使用 TCP 或 UDP 时,会用到操作系统提供的类库。这种类库一般被称为 API(Application Programming Interface,应用编程接口)。

建立网络通信连接至少要一对端口号(Socket)。Socket 本质是编程接口(API)对 TCP/IP 的封装,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口;HTTP 是轿车,提供了封装或者显示数据的具体形式;Socket 是发动机,提供了网络通信的能力。

应用程序利用套接字,可以设置对端的 IP 地址端口号,并实现数据的发送与接收。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 Socket

8. TCP/IP 通讯示例

在这里插入图片描述

在 TCP/IP 通讯过程中,每个分层,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送端的目标地址一节协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层角度看,从上一层收到的包全部被认为是本层的数据。

HTTP,HTTPS,SSL/TLS 之间的关系

一篇文章看明白 HTTP,HTTPS,SSL/TLS 之间的关系

1. HTTP

超文本传输协议(HTTP,Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。

设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。简单来说,HTTP 是一个网络协议,专门用来帮你传输 Web 内容的

2. HTTP 和 TCP 之间的关系

在这里插入图片描述

简单地说,TCP 协议是 HTTP 协议的基石——HTTP 协议需要依靠 TCP 协议来传输数据。在网络分层模型中,TCP 被称为“传输层协议”,而 HTTP 被称为“应用层协议”。

在这里插入图片描述

HTTP 对 TCP 连接的使用,分为两种方式:俗称“短连接”和“长连接”(“长连接(Keep-Alive)”又称“持久连接(Persistent Connection)”)。

假设有一个网页,里面包含好多图片,还包含好多【外部的】 CSS 文件和 JS 文件。在“短连接”的模式下,浏览器会先发起一个 TCP 连接,拿到该网页的 HTML 源代码(拿到 HTML 之后,这个 TCP 连接就关闭了)。然后,浏览器开始分析这个网页的源码,知道这个页面包含很多外部资源(图片、CSS、JS)。然后针对【每一个】外部资源,再分别发起一个个 TCP 连接,把这些文件获取到本地(同样的,每抓取一个外部资源后,相应的 TCP 就断开)

在这里插入图片描述

相反,如果是“长连接”的方式,浏览器也会先发起一个 TCP 连接去抓取页面。但是抓取页面之后,该 TCP 连接并不会立即关闭,而是暂时先保持着(所谓的“Keep-Alive”)。然后浏览器分析 HTML 源码之后,发现有很多外部资源,就用刚才那个 TCP 连接去抓取此页面的外部资源。

在这里插入图片描述

3. HTTPS

3.1 HTTP 的缺点

  1. 通信使用明文(不加密),内容可能会被窃听
  2. 不验证通信方的身份,因此有可能遭遇伪装
  3. 无法证明报文的完整性,所以有可能已遭篡改

3.2 HTTPS 的诞生

为了解决 HTTP 协议的以上缺点,在上世纪90年代中期,由网景(NetScape)公司设计了 SSL 协议。SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)。

在这里插入图片描述

WebSocket & Socket

WebSocket介绍和Socket的区别

1. WebSocket介绍与原理

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。

1.1 目的:即时通讯,替代轮询

网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。

HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。
当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。

HTTP缺点:会导致过多不必要的请求,浪费流量和服务器资源,每一次请求、应答,都浪费了一定流量在相同的头部信息上

然而WebSocket的出现可以弥补这一缺点。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。

1.2 原理

WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。

连接过程 —— 握手过程

  1. 浏览器、服务器建立TCP连接,三次握手。这是通信的基础,传输控制层,若失败后续都不执行。
  2. TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息。(开始前的HTTP握手)
  3. 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。
  4. 当收到了连接成功的消息后,通过TCP通道进行传输通信。

2. WebSocket与HTTP的关系

2.1 相同点

  1. 都是一样基于TCP的,都是可靠性传输协议。
  2. 都是应用层协议。

2.2 不同点

  1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
  2. WebSocket是需要握手进行建立连接的。

2.3 联系

WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。

3. WebSocket与Socket的关系

Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口

当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。

WebSocket则是一个典型的应用层协议。

4. WebSocket与HTML5的关系

WebSocket API 是 HTML5 标准的一部分, 但这并不代表 WebSocket 一定要用在 HTML 中,或者只能在基于浏览器的应用程序中使用。

实际上,许多语言、框架和服务器都提供了 WebSocket 支持,例如:

  • 基于 C 的 libwebsocket.org
  • 基于 Node.js 的 Socket.io
  • 基于 Python 的 ws4py
  • 基于 C++ 的 WebSocket++

交换机 & 路由器 & 网关 & 路由

交换机和路由器有什么区别?网关和路由又是什么意思?简单说网络2-交换机与路由器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 `golang.org/x/net/websocket` 包中,并没有内置的路由功能。如果您想要使用该包处理不同的 WebSocket 路由,您可以结合使用 `net/http` 包的路由功能来实现。以下是一个示例代码: ```go package main import ( "log" "net/http" "golang.org/x/net/websocket" ) func main() { http.Handle("/ws/foo", websocket.Handler(handleFooWebSocket)) http.Handle("/ws/bar", websocket.Handler(handleBarWebSocket)) log.Println("WebSocket 服务器启动,监听端口 8080") err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("WebSocket 服务器启动失败:", err) } } func handleFooWebSocket(conn *websocket.Conn) { // 处理 /ws/foo 路由WebSocket 连接逻辑 // ... } func handleBarWebSocket(conn *websocket.Conn) { // 处理 /ws/bar 路由WebSocket 连接逻辑 // ... } ``` 在上述示例中,我们使用 `net/http` 包的 `http.Handle` 函数来定义不同的路由,并使用 `websocket.Handler` 将每个路由的处理函数转换为 WebSocket 的处理器。 在这个示例中,我们定义了两个 WebSocket 路由,`/ws/foo` 和 `/ws/bar`。当有 WebSocket 连接请求到达时,路由器会将请求传递给相应的处理函数 `handleFooWebSocket` 或 `handleBarWebSocket` 进行处理。 您可以根据实际需求添加更多的路由和处理函数。 请注意,`golang.org/x/net/websocket` 包现在已经被废弃,推荐使用 `github.com/gorilla/websocket` 包来处理 WebSocket 连接。`github.com/gorilla/websocket` 包提供了更多的功能和灵活性。 希望以上信息对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值