http、socket、tcp、udp的区别及四层/七层网络协议

一、OSI模型也称七层网络模型 & TCP/IP 模型也称四层网络模型

二、SOCKET、TCP、UDP和HTTP的关系

1.socket 本身不是一种协议,而是用来操作TCP/UDP协议的接口。
而是对传输层中的 TCP/UDP 协议进行了封装,对用户隐藏了内部 TCP/UDP 是如何传输的,只提供一套接口(API)给程序员调用,从而完成socket编程。

2.通过socket接口,我们才能使用TCP/UDP协议。

3.而我们通常浏览网页用到的 http 协议,是建立在TCP协议之上的一种应用层协议(底层也是socket)。
(http协议最显著的特点是它是一种无状态连接,客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接,是一种“短连接”。)

http 等应用层协议,都是通过 socket 接口从而调用 tcp udp 等传输层协议,从而达到 网络通信。


  http
    ||
socket
    ||
tcp udp

我们编程不会直接去调用tcp udp,而是通过他们封装好的接口socket去通信。可以说,现在几乎网络上所有的通信,底层都是通过socket完成的,一切皆Socket

综上所述,我们编程不会直接去调用tcp udp,而是通过他们封装好的接口socket去通信。可以说,现在几乎网络上所有的通信,底层都是通过socket完成的,一切皆Socket。
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元

Socket连接与HTTP连接

由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。

HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步:

  • 此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;
  • 若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

http协议是应用层的协议。有个比较形象的描述:
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

————————————————
参考自:

socket、tcp、udp、http 的认识及区别_socket udp-CSDN博客

一篇搞懂tcp,http,socket,socket连接池之间的关系 - 知乎 (zhihu.com)

TCP、UDP、HTTP、SOCKET_http、tcp、udp、socket-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户/服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSEADDR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline实现 用readline实现回射客户/服务器 getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 11socket编程(六) TCP回射客户/服务器 TCP是个流协议 僵进程与SIGCHLD信号 12socket编程(七) TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 13socket编程(八) 五种I/O模型 select 用select改进回射客户端程序 14socket编程(九) select 读、写、异常事件发生条件 用select改进回射服务器程序。 15socket编程(十) 用select改进第八章点对点聊天程序 16socket编程(十一) 套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程(十五) udp聊天室实现 21socket编程(十六) UNIX域协议特点 UNIX域地址结构 UNIX域字节流回射客户/服务 UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对象的持续性 24进程间通信介绍(二) 死锁 信号量 PV原语 用PV原语解决司机与售票员问题 用PV原语解决民航售票问题 用PV原语解决汽车租赁问题 25System V消息队列(一) 消息队列 IPC对象数据结构 消息队列结构 消息队列在内核中的表示 消息队列函数 26System V消息队列(二) msgsnd函数 msgrcv函数 27System V消息队列(三) 消息队列实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、消息队列与共享内存传递数据对比 mmap函数 munmap函数 msync函数 29System V共享内存 共享内存数据结构 共享内存函数 共享内存示例 30System V信号量(一) 信号量 信号量集结构 信号量集函数 信号量示例 31System V信号量(二) 用信号量实现进程互斥示例 32System V信号量(三) 用信号集解决哲学家就餐问题 33System V共享内存与信号量综合 用信号量解决生产者消费者问题 实现shmfifo 34POSIX消息队列 POSIX消息队列相关函数 POSIX消息队列示例 35POSIX共享内存 POSIX共享内存相关函数 POSIX共享内存示例 Linux网络编程之线程篇 36线程介绍 什么是线程 进程与线程 线程优缺点 线程模型 N:1用户线程模型 1:1核心线程模型 N:M混合线程模型 37POSIX线程(一) POSIX线程库相关函数 用线程实现回射客户/服务器 38POSIX线程(二) 线程属性 线程特定数据 39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一个简单的线程池实现 线程池性能分析 线程池实现
Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户/服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSEADDR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline实现 用readline实现回射客户/服务器 getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 11socket编程(六) TCP回射客户/服务器 TCP是个流协议 僵进程与SIGCHLD信号 12socket编程(七) TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 13socket编程(八) 五种I/O模型 select 用select改进回射客户端程序 14socket编程(九) select 读、写、异常事件发生条件 用select改进回射服务器程序。 15socket编程(十) 用select改进第八章点对点聊天程序 16socket编程(十一) 套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程(十五) udp聊天室实现 21socket编程(十六) UNIX域协议特点 UNIX域地址结构 UNIX域字节流回射客户/服务 UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对象的持续性 24进程间通信介绍(二) 死锁 信号量 PV原语 用PV原语解决司机与售票员问题 用PV原语解决民航售票问题 用PV原语解决汽车租赁问题 25System V消息队列(一) 消息队列 IPC对象数据结构 消息队列结构 消息队列在内核中的表示 消息队列函数 26System V消息队列(二) msgsnd函数 msgrcv函数 27System V消息队列(三) 消息队列实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、消息队列与共享内存传递数据对比 mmap函数 munmap函数 msync函数 29System V共享内存 共享内存数据结构 共享内存函数 共享内存示例 30System V信号量(一) 信号量 信号量集结构 信号量集函数 信号量示例 31System V信号量(二) 用信号量实现进程互斥示例 32System V信号量(三) 用信号集解决哲学家就餐问题 33System V共享内存与信号量综合 用信号量解决生产者消费者问题 实现shmfifo 34POSIX消息队列 POSIX消息队列相关函数 POSIX消息队列示例 35PO
目 录 一、目录…………………………………………………………………1 二、题目……………………………………………………………2 三、设计任务…………………………………………………2 四、WinSocket简介及特点原理…………………………………2 五、TCP简介及特点原理………………………………………3 六、Visual C++简介………………………………………………7 七、设计方案…………………………………………………8 八、系统的原理框图和程序流程图………………………10 九、实验中的问题…………………………………………………14 十、实验结果及分析………………………………………………14 十一、课程设计的总结体会………………………………………16 十二、参考文献……………………………………………………16 利用Socket实现双机通信 一、设计任务 1.利用WinSock来实现双机通信,理解TCP状态机图。 2.要求使用WinSock编程,采用其中的TCP面向连接方式,实现文本数据的交换。 二、WinSocket简介及特点原理 2.1、什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应 用程序通常通过"套接字"向网络发出请求或者应答网络请求。 Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用 它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解So cket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和 输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也 是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返 回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现 的。 常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_D GRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Soc ket是一种无连接的Socket,对应于无连接的UDP服务应用。   最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个so cket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫 方知道的电话号码)。 socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器so cket 半相关为全局所公认非常重要。不妨考虑一下,两个完全随机的用户进程之间如何建立 通信?假如通信双方没有任何一方的socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。 2.2、WinSocket的通信原理 WinSock是一个基于Socket模型的 API。WinSock在 Windows98,Window NT中使用。WinSock一般由两部分组成:开发组件和运行组件。开发组件是供程序员在w indows环境下开发网络应用程序使用的,它包括应用程序接口库函数、头文件和实现的 文档,其中最主要的是WINSOCK.H运行组件是以动态链接库(DlL)来实现socket接口的。 文件名为WINSOCK.DLL应用程序在执行时装入它就能实现网络通信功能 三、TCP简介及特点原理 1.什么是TCP TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能 。   在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常 需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包 交换。   应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分 割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU )的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层 。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实 体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK)
TCPUDP都是在IP协议上运行的传输层协议,用于在网络上传输数据包。TCP提供可靠的数据传输,而UDP则不提供此保证。具体来说,以下是它们的区别: 1. 可靠性:TCP提供有保证的数据传输,它使用特殊的机制来确保数据从一个端点安全地传输到另一个端点,而UDP不提供这种保证。因此,在需要确保数据完整性和可靠性的应用中,如文件传输和电子邮件,通常使用TCP。而在对实时性要求较高的应用中,如音频和视频流媒体,通常使用UDP。 2. 连接性:TCP是面向连接的协议,它在发送和接收数据之前需要先建立连接。连接的建立过程包括三次握手,确保双方的通信状态正确。而UDP是无连接的协议,发送方直接将数据包发送到目标地址,无需建立连接。这使得UDP具有较低的延迟和开销。 3. 数据流:TCP以字节流的形式发送和接收数据,没有数据边界。这意味着TCP会将数据拆分成适当的大小进行传输,并在接收端重新组装。而UDP以数据报的形式发送和接收数据,每个数据报都有固定的大小和独立的边界。这使得UDP更适合于短小的数据包,例如DNS查询。 总结起来,TCP提供可靠的、面向连接的数据传输,适用于对数据完整性和可靠性要求较高的应用。而UDP则是无连接的、不可靠的协议,适用于对实时性要求较高的应用。Socket接口则是用于开发TCP/IP网络应用程序的API。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [TCPUDPHTTPSOCKET之间的区别](https://blog.csdn.net/iteye_12028/article/details/82480495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [TCPUDPsocket编程中的区别(转载)](https://blog.csdn.net/LIN943168247/article/details/120264124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值