Socket、TCP、HTTP 三者区别与联系

目录

1. OSI 七层网络模型

 2. TCP / IP 四层网络模型

3. Socket

3.1 Socket 介绍及其用途

3.2 建立socket连接

4. TCP

4.1 TCP 简介

4.2 TCP 特点

4.3 TCP 三次握手与四次挥手

4.3.1 概念

4.3.2 三次握手

4.3.3 四次挥手

5. HTTP

5.1 HTTP 简介

5.1.1 HTTP 特点

6. Socket 与 TCP / IP 连接

7. Socket 与 HTTP 连接


1. OSI 七层网络模型

OSI(Open System Interconnect),即开放式系统互连。该体系架构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层)

 2. TCP / IP 四层网络模型

3. Socket

3.1 Socket 介绍及其用途

  • 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
  • 它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
  • 应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP 协议端口传输数据。
  • 为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。
  • 应用层可以和传输层通过 Socket 接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

3.2 建立socket连接

  • 套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
  • 通过 bind 函数可以绑定 IP 地址 和端口号等信息
  • 套接字之间的连接过程分为三个步骤:服务器监听(listen),客户端请求(connect),连接确认(accept)

4. TCP

4.1 TCP 简介

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络 OSI 模型中,它完成第四层传输层所指定的功能。

4.2 TCP 特点

  • 有连接
  • 可靠传输
  • 面向字节流
  • 全双工

4.3 TCP 三次握手与四次挥手

4.3.1 概念

  1. TCP 的三次握手和四次挥手实质就是TCP通信的连接和断开
  2. 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。
  3. 四次挥手:即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
  4. TCP三次握手、四次挥手时序图

4.3.2 三次握手

        TCP协议位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。

三次握手​​​​​​​过程:

第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;

第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;

第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。

可通过以下趣味图解理解三次握手:

三次握手过程详细说明:

  1. 客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)
  2. 服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接
  3. 客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

4.3.3 四次挥手

        由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭

四次挥手​​​​​​​过程:

  • 第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态
  • 第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态
  • 第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态
  • 第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手

其中:FIN标志位数置1,表示断开TCP连接。可通过以下趣味图解理解四次挥手​​​​​​​:

 四次挥手​​​​​​​过程详细说明:

  1. 客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成)
  2. 服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)
  3. 服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)
  4. 客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
    至此TCP断开的4次挥手过程完毕

5. HTTP

5.1 HTTP 简介

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

5.1.1 HTTP 特点

  • HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
  • 由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接

6. Socket 与 TCP / IP 连接

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据 如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

实际上socket是对TCP/IP协议的封装Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现 只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口

实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。socket是对端口通信开发的工具,它要更底层一些

7. Socket 与 HTTP 连接

由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。HTTP 协议是应用层的协议,Socket本身并不是协议,而是一个调用接口(API)

参考:一文搞懂TCP的三次握手和四次挥手_tcp三次握手和4次挥手的过程_不脱发的程序猿的博客-CSDN博客

 最全的socket,tcp,http三者之间的区别和原理_500万一根油条的博客-CSDN博客

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"C"是拉丁字母表中的第三个字母,也是英语中常用的字母之一。在计算机编程中,C语言是一种高级程序设计语言,是一种通用的程序设计语言,也是最基础的编程语言之一。C语言很重要,因为它是许多其他编程语言的基础。它简洁、灵活、强大,允许编程者以底层的方式控制计算机的功能。 通过学习C语言,可以培养抽象思维和逻辑思维能力,提高问题解决和编程技巧。在学习C语言的过程中,可以了解计算机的原理和工作方式,实践如何利用计算机进行程序设计和开发。C语言广泛应用于操作系统、编译器、编程工具、嵌入式系统、游戏开发等领域。 C语言有许多重要的特性,如简洁的语法、强大的表达能力、高效的执行速度、低级的内存访问控制、丰富的标准库等。它也是许多其他编程语言的基础,如C++、C#、Java等,通过学习C语言,可以更容易地学习和掌握这些相关编程语言。 C语言虽然强大,但也有一些限制和挑战,如对高级特性的支持不够、对异常处理的不足、容易出现内存错误等。因此,在实际编程中,需要有良好的编程习惯和规范,遵循标准和最佳实践来确保程序的质量和可靠性。 总之,C语言作为一种通用的程序设计语言,具有重要的地位和作用。通过学习C语言,可以提高编程能力和理论基础,为进一步学习和掌握其他编程语言打下基础。它是计算机科学和软件工程领域必不可少的学科,对于从事相关行业和领域的人来说具有重要的意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值