http和socket关系

article/2025/10/7 18:46:22

一、先说下HTTP网络协议栈

二、连接过程

三、重点来了,TCP套接字编程,也就是所谓的socket

四、通过比较发现http和socket完全是两个不同的概念,http是应用层的,socket是传输层和网络层的,http要基于socket实现。httpclient的默认请求超时时间为60s。

五、发起一个HTTP请求的过程就是建立一个socket通信的过程。httpclient也是基于socket的

Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的封装。

下面是一些的重要的概念,特在此做摘抄和总结。

一。什么是TCP连接的三次握手

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开)

二。利用Socket建立网络连接的步骤

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

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

1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

3。连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

三。HTTP链接的特点

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

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

四。TCP和UDP的区别

1。TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。

2。也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。

知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率


http://chatgpt.dhexx.cn/article/XbQ7fTvA.shtml

相关文章

SOCKET函数详解

socket原理 1.socket socket位于应用层和TCP/IP协议通信中间,抽象成一组接口 1.服务端首先初始化Socket(),然后和接口进行绑定bind()和监听listen(),然后调用accept()进行阻塞。 2.客户端初始化socket(),然后调用connect()与服务端进行连接…

用大白话解释什么是Socket

好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 我在去年就学习过Java中Socket的使用,但对于Socket的理解一直都是迷迷糊糊…

Socket详解

“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时&#xff…

Java socket详解

整理和总结了一下经常遇到的问题: 1. 客户端socket发送消息后,为什么服务端socket没有收到? 2. 使用while 循环实现连续输入,是不是就是多线程模式? 3. 对多线程处理机制不是很明白,希望详细讲解…

Socket的详细介绍

文章目录 前言1-Socket出现的原因1.1-Socket出现的背景1.2-Socket解决的问题 2-Socket的组成及关键点2.1-What:什么是Socket?2.2-How: Socket通信实现的步骤2.3-How: Socket编写流程 3-Socket的关键实现3.1-socket()函数创建套接字…

Socket到底是什么?

学习java网络编程一段时间后,突然被问到socket是什么?回答不上来,感觉很尴尬,于是赶紧是查阅资料。 网络由下往上分为 物理层 、数据链路层 、 网络层 、 传输层 、 会话层 、 表现层 和 应用层。 通过初步了解,我知道…

什么是Socket?

一、什么是Socket? 在计算机通信领域,socket 被翻译为“套接字”(套接字主机端口号),它是计算机之间进行通信的一种约定或一种方式。通过 socket这种约定,一台计算机可以接收其他计算机的数据,也…

Socket的学习(一)什么是Socket?

本文参考的是《Socket通信原理》https://www.cnblogs.com/wangcq/p/3520400.html 一、TCP/IP UDP是什么? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集&#xff0c…

整数划分(递归方法)

最近讲到了递归,老师布置了一道经典的整数划分问题,浏览了网上很多代码,还是似懂非懂,想找张清晰地展现递归过程的图片也没有,今天想了想,自己画了一张才发现,想完整清晰地表现这个过程确实真的…

递归算法--整数划分

何为整数划分: 所谓整数划分,是指把一个正整数n写成为 其中, 为正整数,并且 ; 为n的一个划分。 如果 中的最大值不超过m,即 ,则称它属于n的一个m划分。 例如:6的划分: 6…

递归实现整数划分

递归思想 递归是算法设计中的一种基本而重要的算法。递归方法通过函数调用自身将问题转化为本质相同但规模较小的子问题,是分治策略的具体体现。 不多废话,直接上故事 ->从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故…

复杂的整数划分

复杂的整数划分 又到了动态规划的时间了! 记得我之前讲过的三要素哦 下面这一条题目其实思路并不是非常的难,但是在细节处理上要非常仔细,而且它有3个相互独立的动态规划问题。 总时间限制: 200ms 内存限制: 65536kB 描述 将正整数n 表…

整数划分(DP)

一个正整数 n 可以表示成若干个正整数之和,形如:nn1n2…nk,其中 n1≥n2≥…≥nk,k≥1。 我们将这样的一种表示称为正整数 n 的一种划分。 现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。 输入格式 共一行&#x…

【算法】整数划分问题

描述 整数划分问题是算法中的一个经典命题之一。把一个正整数n表示成一系列正整数之和: 正整数n的这种表示称为正整数n的划分。正整数n的不同划分个数称为正整数n的划分数,记作P(n) 。 正整数6有如下11种不同的划分,所以P(6)11。 6 51 42, …

【递归】整数划分(C++)

一、什么是整数划分 所谓整数划分,是指把一个正整数n写成如下形式: n m 1 m 2 ⋅ ⋅ ⋅ m i nm_1m_2m_i nm1​m2​⋅⋅⋅mi​; 其中 m i m_i mi​为正整数,并且 1 ≤ m i ≤ n 1 \leq m_i \leq n 1≤mi​≤n,则 { …

整数划分问题的递归解决(详解)

整数划分问题 这个问题在网上其实有好多博客、文章,本人认为讲的都稍有粗略,这篇文章是个人写的认为稍微详细一点的!! 将正整数n表示为一系列正整数之和, nn1n2n3n4......nk (其中,n1>n2&…

整数划分算法

整数划分问题 问题阐述 将正整数n表示成一系列正整数之和:nn1n2…nk, 其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。 输入:一个正整数n 输出:n不同划分个数以及n的划分结果。 问题实例 …

整数划分总结

博客原地址:https://blog.csdn.net/dacc123/article/details/50664738 整数划分问题: 笼统上说就是将一个整数划分成若干个整数之和的方案数。整数划分有很多不同的问法,也有比较隐晦的问法。比如n个苹果放到m个盘子里,比如n个砖块…

整数划分问题(分治算法经典)

题目描述: 整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。 即:nn1n2…nk; n1>n2>n3…>nk 如整数的6划分为: 6 5 1 4 2, 4 1 1 3 3, 3 2 1, 3 1 1 1 2 2 2, 2 2 1 1, 2 1 …

数据源:SHP数据下载平台

1. 地理信息专业知识服务系统 中国工程院 中国工程科技知识中心 2. 国家基础地理信息中心 自然资源部 国家基础地理信息中心 3. 天地图API 自然资源部 国家基础地理信息中心 4. 中国科技资源共享网 科技部 国家科技资源共享服务工程技术研究中心 5. 地球大数据科学工…