【嵌入式软件工程师面经】Socket,TCP,HTTP之间的区别

avatar
作者
猴君
阅读量:10

目录:

目录

目录:

一、Socket原理与TCP/IP协议

1.1 Socket概念:

1.2 建立Socket连接:

1.3 SOCKET连接与TCP/IP连接

二、HTTP连接:

2.1 HTTP原理

三、三者的区别和联系


前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能教程

一、Socket原理与TCP/IP协议

1.1 Socket概念:

        套接字是网络上的通信节点,可以看做是为实现TCP/IP网络数据传输而提供的一个接口。在网络中进行数据交换时,套接字扮演着端点的角色,并且封装了通信所需要的若干关键信息:所应用的通信协议类型(比如TCP或UDP),本机的网络地址(即IP地址),运行在本机的程序指定的端口号,以及对应的远程计算机的网络地址和其上相应程序的端口号。这些信息共同定义了网络中的一个通信链路,确保数据能正确从一个端点传输到另一个端点

        当应用层利用传输层进行数据交换时,TCP协议需要处理同时服务多个应用进程的挑战。在这种情况下,多个TCP连接或应用进程可能尝试使用同一个TCP端口来发送数据。为了识别这些不同的通信流并确保它们能够并发处理,操作系统通常提供了一个套接字接口。通过这个套接字接口,应用层和传输层能够区分不同应用进程或网络连接之间的通信,从而实现并发数据传输服务。简而言之,套接字接口允许系统在共享同一端口的同时,精确地管理并区分各个独立的通信会话

1.2 建立Socket连接:

        建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket

        套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认

        1. 服务器监听服务器端的套接字进入一种等待状态,监听网络上的连接请求。这意味着服务器准备好接受来自任何客户端的连接尝试,但尚未与任何特定的客户端建立连接。

        2. 客户端请求客户端的套接字发起一个连接请求,指定服务器端的套接字地址和端口号。这个请求表明客户端希望与服务器建立通信。

        3. 连接确认服务器端在接收到客户端的连接请求后,会确认这个请求。这通常涉及到服务器创建一个新的线程或进程来处理这个连接,并将服务器端套接字的信息发送回客户端。一旦客户端确认了这些信息,双方就正式建立了连接。此时,数据可以在客户端和服务器之间传输。

1.3 SOCKET连接与TCP/IP连接

        在网络通信中,"Socket连接"和"TCP/IP连接"这两个术语经常被使用,但它们指的是不同的概念:

        1. Socket连接:

        Socket(套接字)是一个抽象概念,它提供了一种标准的接口,允许应用程序通过网络进行通信。在操作系统中,Socket通常被实现为一种编程接口,允许开发者创建、使用和销毁网络连接。

        一个Socket连接通常涉及到两个端点:一个在客户端,另一个在服务器端。这两个端点通过网络地址(IP地址和端口号的组合)来标识。

         Socket连接可以基于不同的网络协议,如TCP、UDP等。因此,Socket连接是一个更广泛的概念,它可以使用TCP/IP协议,也可以使用其他协议。

        2. TCP/IP连接:

        TCP/IP(传输控制协议/互联网协议)是一组网络通信协议,它们定义了数据如何在网络中传输和接收。TCP/IP协议族中的TCP协议特别提供了可靠的、面向连接的数据传输服务

        当提到TCP/IP连接时,通常指的是使用TCP协议建立的连接。这种连接是面向连接的,意味着在数据传输之前,客户端和服务器之间需要建立一个连接,并且在数据传输完成后,这个连接会被关闭。

        TCP/IP连接确保了数据的顺序传输和无差错传输,它通过握手过程(三次握手)来建立连接,并通过确认机制来保证数据的可靠传输

        Socket连接是一个更通用的概念,它可以通过TCP/IP协议或其他协议来实现。而TCP/IP连接特指使用TCP协议建立的连接,这种连接提供了可靠的数据传输服务。在实际应用中,Socket编程通常用于创建基于TCP/IP的连接,但Socket的概念并不局限于TCP/IP协议。        

        3.数据传输:

        在数据传输过程中,虽然可以仅依赖传输层的TCP/IP协议来确保数据的可靠传输,但若缺乏应用层的支持,我们将无法理解传输的数据内容。为了确保数据传输的实际意义和有效性,必须结合应用层协议。应用层协议种类繁多,包括HTTP、FTP、TELNET等,同时也可以根据特定需求自定义应用层协议。例如,在Web通信中,我们使用HTTP作为应用层协议来组织和封装文本信息,随后通过TCP/IP作为传输层协议,将这些封装好的HTTP信息发送到网络中,确保信息的正确传递和解析。

      我们提到的socket实际上是一种编程工具,它提供了一个接口(API),开发人员通过这个接口能够在应用程序中实现网络通信的功能。虽然socket常与TCP/IP协议结合使用来进行网络数据传输,但它本身并非一个网络协议。(协议抽象出来就是格式和速度Socket作为一个编程接口,其实是独立于具体网络协议的;它能够支持不同的协议族,例如TCP/IP、IPX/SPX等。因此,Socket编程实际上是利用这个接口来调用底层网络协议栈的功能,它为应用程序提供了创建网络连接、发送数据、接收数据等能力。

二、HTTP连接:

2.1 HTTP原理

        HTTP,全称为超文本传输协议,构成了Web浏览和手机网络访问的核心技术基础,它是一种位于TCP协议之上的应用层协议。HTTP的主要特征在于它采用的是“请求-响应”模式,即每当客户端发起一个请求时,服务器都需要给予相应的回应。而且,这种协议在请求完成并得到响应后会自动断开当前的连接,这个从连接建立到断开的全过程称作“一次会话”。

        1) 在HTTP 1.0协议中,客户端每发起一个请求,都需要与服务器建立一个新的连接。一旦该请求被服务器处理并响应完毕,这个连接就会立即被关闭。

        2) 相比之下,HTTP 1.1协议引入了持久连接的概念,允许在一次连接中处理多个请求。这意味着客户端可以在同一连接上连续发送多个请求,而不必等待前一个请求完全处理完毕后再发送下一个。这种机制支持请求的重叠处理,        提高了效率。

        HTTP通常使用所谓的“短连接”,这意味着每次请求处理完成后连接会自动关闭。为了维持客户端的在线状态,客户端需要频繁地重新建立与服务器的连接。即使在没有数据交换需求的情况下,为了保持连接的活性,客户端通常每隔一定时间就会向服务器发送一个“保活”请求。当服务器接收到这种请求时,它会向客户端发回一个相应的响应以维持连接的持续性。 

        在HTTP协议中,为了确保客户端的在线状态,即使没有实际的数据请求,客户端也会定期向服务器发送“保持活跃”的请求。(属于心跳包的功能)这种请求的目的是让服务器知道客户端仍然在线。服务器在接收到这样的请求后,会发送一个回复,确认它已经注意到客户端的存在。如果服务器在一段时间内没有收到来自客户端的任何请求,它会假设客户端已经离线。同样,如果客户端在一段时间内没有收到服务器的任何响应,它也会判断网络连接可能已经中断。

三、三者的区别和联系

        两个计算机进行网络通信,用TCP/IP协议就够了,就能发数据,双方也能收到各自发来的数据,可是,仅仅收到了数据,无法解析数据,比如http协议就是解决服务器与浏览器之间的一个通信协议数据格式的一个解析。

        浏览器B和server约定的格式是HTTP协议,底层通过TCP来传输数据,socket是程序员能够进行TCP/IP编程的最小单位,对TCP的一个封装。

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!