网络营销和网站推广的区别,jquery 手机网站开发,网站建设 东方网景,大网站服务器维护费用(83条消息) 《网络是怎样连接的》#xff08;一#xff09;_qq_38480311的博客-CSDN博客
本文主要取材于 《网络是怎样连接的》 第二章。
目录
#xff08;1#xff09;创建套接字
#xff08;2#xff09;连接服务器
#xff08;3#xff09;收发数据
#xf…(83条消息) 《网络是怎样连接的》一_qq_38480311的博客-CSDN博客
本文主要取材于 《网络是怎样连接的》 第二章。
目录
1创建套接字
2连接服务器
3收发数据
4从服务器断开连接
TCP 整体流程 简述将探索操作系统中的网络控制软件协议栈和网络硬件网卡是如何将浏览器的消息发送给服务器的。
客户端会创建套接字一块内存记录控制信息然后协议炸根据套接字里的内容去和服务端连接。服务端的套接字是提前创建好的等待客户端过来连接连接过程双方各会开辟一块内存叫做缓冲区缓冲数据。连接服务器实际是发送控制包到服务器包头里包含着客户端的信息这个包相当于去建“管道”的工人。连接建好后发送数据时数据会在缓存区到达一定数量时才发送为了避免频繁的小包此过程中 通过发送端的序号以及接收端的ACK号可以判断包是否正确收到。收到的包在接收端也会先存到缓冲区进行原始数据组合之后提交给应用。通信结束之后会进行断开断开是四次握手删除套接字。
本章共六个章节主要理解前四节上一章提到 收发数据操作TCP/IP是以下四个步骤
1创建套接字创建套接字阶段2将管道连接到服务器端的套接字上连接阶段3收发数据通信阶段4断开管道并删除套接字断开阶段 1创建套接字
从应用程序收到委托后协议栈通过TCP协议收发数据的操作可以分为4个阶段。首先是创建套接字在这个阶段我们将介绍协议栈的内部结构、套接字的实体以及创建套接字的操作过程。到这里大家应该可以对套接字到底是什么样的一个东西有一个比较具体的理解。 如何理解协议栈
协议栈就是一套规则如上图所示上下层有一定的规则上层会委派下层去做一些工作下层按照上层的指示执行工作。
应用程序的下面是Socket库其中包括解析器解析器用来向DNS服务器发出查询IP详见第一章。
操作系统 协议栈的上半部分有两块分别是负责用TCP协议收发数据的部分和负责用UDP协议收发数据的部分它们会接受应用程序的委托执行收发数据的操作。
下面一半是用IP协议控制网络包收发操作的部分。在互联网上传送数据时数据会被切分成一个一个的网络包。
IP下面的网卡驱动程序负责控制网卡硬件而最下面的网卡则负责完成实际的收发操作也就是对网线中的信号执行发送和接收的操作。
套接字是什么如何生成的
套接字只是一个概念不存在实体如果一定要赋予它一个实体这些控制信息就是套接字的实体。协议栈在执行操作时需要参阅这些控制信息如套接字中的通信对象IP地址和端口号以便向指定的IP地址和端口发送数据。 创建套接字就是先开辟一个内存空间将控制信息写入。接下来需要把套接字的描述符给应用程序即把自己的号码牌给app让app知道用哪个套接字通信。接下来当app委托协议栈发送消息时只需要提供描述符即可。创捷套接字之后浏览器会调用connect协议栈会将本地套接字与服务器套接字进行连接。
对套接字的理解当于是一块记录了控制信息的牌子。假如我是app一个快递收发大户我每次发快递需要告诉快递员 我这个快递需要发给谁地址是什么电话是什么如果每次都说我很累。
但是假如我把我需要的发货地址信息全部编号写在一张张号码牌上即创建套接字。
我只需要告诉快递员快递的发货信息是几号就行调用cennect进行连接让协议栈知道ip等信息比如我app拿了个快递消息给快递员协议栈说这个快递给我发1号快递员自己会找1号对应的地址各类信息等等。
服务器也会创建套接字。但是服务器的套接字并不知道通信对象是谁因为连服务器上的app自己都不知道通信对象是谁。所以需要客户端过来请求告诉服务器“我想和你通信我的ip是**端口号是我们通信吧。” 此外当执行数据收发操作时我们还需要一块用来临时存放要收发的数据的内存空间这块内存空间称为缓冲区它也是在连接操作的过程中分配的。
2连接服务器
接下来是客户端套接字向服务器套接字进行连接的阶段。我们将介绍“连接”具体是进行怎样的操作在这个过程中协议栈到底是如何工作的以及客户端和服务器是如何进行交互的。 客户端先创建一个包含表示开始数据收发操作的控制信息的头部, 然后 TCP会将头部委托给IP模块IP模块执行包发送包到达服务器 服务器上的IPI将接收到的数据传递给TCP模块服务器的TCP模块根据TCP头部中的信息找到端口号对应的套接字然后套接字中会写入相应的信息并将状态改为正在连接。
这个过程TCP头部中请求 有SYN 1表示请求服务器收到包后 相应将ACK控制位设为1 然后 客户端会再回一个 ACK控制位设为1。 这个应该就是TCP三次握手的过程。
3收发数据
连接好之后双方怎么发数据呢
为避免频繁小包协议栈会将数据存放在内部的发送缓冲区等到数据累计一定数量发或者等待一段时间若数据不满也发送避免响应太迟对于非常大的数据拆分为小包发送。那么对于发送的数据如何确定收到呢拆分的数据怎么组装呢TCP模块会拆分数据算好每一块数据相当于从头开始的第几个字节将算好的字节数写在TCP头部中“序号”字段就是派在这个用场上的。收端收到了包回复ACK号通过“序号”和“ACK号”可以确认接收方是否收到了网络包可以判断丢失重发等。当接收方的TCP收到包后会先将数据存放到接收缓冲区中然后将数据块组装起来还原成原本的数据并传递给应用程序。
4从服务器断开连接
并删除套接字收发消息的操作全部结束之后接下来要断开服务器的连接并删除套接字。断开操作的本质是当消息收发完成后客户端和服务器相互进行确认的过程。
服务器和客户端 谁都可以选择先断开。
若客户端先发起断开则断开的操作顺序如下。
1客户端发送FIN2服务器返回ACK号3服务器发送FIN4客户端返回ACK号
服务断开后一般套接字 需要等几分钟再删除。例如第三步发的FIN重发了在网络中呆了好久到达客户端客户端的端口已经被新的套接字占用了然后新的连接可能就断了
TCP 整体流程