• 通过HTTP来总结网络编程知识


    目录

    HTTP理论方面

    工具篇 

    代码篇

    其他辅助知识

    当在浏览器输入了一个URL会发生什么 

    应用层角度 

    偏代码层的角度

    纯粹的网络数据传输的的角度

    题目练习+知识总结 

    计算机网络传输体系

    传输层知识 

    IP层知识 

    应用层的知识

    SNMP协议 

                      数据链路层

                      Socket套接字


    HTTP理论方面

    • 协议本身是应用层的协议,是基于传输层的TCP协议之上(1.0,1.1版本下)
    • 请求,响应的结构体
    • 请求的格式: 请求行(请求方法+URL+协议的版本)+请求头们(格式是name:value)+空行(/r/n)+可选的请求体(GET没有,POST可以有,但是不是必须有)
    • 一个Web资源——对应HTTP请求-响应
    • 资源的URL的格式 协议://服务器地址(ip或者域名):端口(如果是协议标准端口,可以省略)/资源路径(绝对路径vs相对路径)?查询字符字符串(k1=v1&k2=v2),如果非标准准字符需要经URL编码,一般采用UTF-8
    • 请求方法:GETvs POST 语义不同,幂等性不同,其他现象的不同
    • 响应格式:协议版本 状态(状态码+状态描述+响应头们(格式是 name:value)+可选的响应头
    • 请求响应的重要的content-type
    • Cookie和Session机制,将HTTP从无状态到有状态
    • HTTP和HTPPS的不同,就是HTTPS传输是安全的,但是HTTP是不安全的(解决如何证明你是你的问题+如何传输对称加密的密钥+用加密密钥进行传输)

    工具篇 

    • 浏览器开发者的使用 1元素面板:调式HTML结构,CSS样式 2 源代码面板:观察JS代码,Debug JS代码 3 控制台代码:观察JS代码中打印以及网络访问访问错误 4:网络面板:每一条记录都一个HTTP请求-响应,去观察是否每次请求都是正常的(200,302)应用面板:查看和删除Cookie
    • 模拟和发送HTTP请求的工具:ApiPost
    • 后端调试工具的使用,日志的使用

    代码篇

    • 资源从内容生成的角度分成:动态资源vs静态资源
    • SSM项目创建 :spring-web
    • 静态资源的位置:(src/main/resource/static)
    • 动态资源如何书写
    •  一个Web应用是由多个场景组成,每个场景都是由一个个Web资源相关关联组成的
    • 资源直接要尝试相互的关系:HTML的标签(按钮,超链接),JS中的ajax请求,重定向
    • JDBC的使用+用户管理(如何在代码中使用Session)

    其他辅助知识

    • JSON格式:JavaScript,Java中如何进行JSON的序列化和反序列化
    • JS的核心工作(和前后端分离的工作模式下),主要就是通过ajax请求后端的JSON格式格式数据,对JSON进行序列化(parse),根据数据结构,修改DOM结构(设计到DOM结点的查找和修改操作和时间绑定机制),最终影响到用户看到的效果

    当在浏览器输入了一个URL会发生什么 

    应用层角度 

    • DNS+HTTP(最多再加一个HTTPS)

    浏览器的响应动作

    • 符合URL的规则
    • 不符合URL的规则,会按照配置再浏览器的默认搜索引擎,走搜索流程

    符合URL的规则

    • HTTP协议是允许GET缓存的,所以我们检查是否可以应用缓存(GET请求&&浏览器存在对应的缓存&&缓存没有过期&&服务器允许缓存),如果没有对应的缓存,就不需要走网络,直接展示内容

    分析URL的各个部分,得到服务器的地址+端口

    1. 如果是域名,那么需要域名解析的过程如果是IP地址那么就会跳过这一步
    2. 现代浏览器会有自己的域名缓存,先检查缓存的域名
    3. 经过OS提供的方法获取对应域名的IP 1检查是否是固定host(比如etc/host写死的域名信息 127.0.0.1 loacalhost)
    4. 如果都不是,那么久去构建DNS请求,i请求OS中配置好的DNS服务器,由DNS服务器返回IP地址,如果一级DNS不知道,那么则DNS会向上级请求,直到根DNS
    5. 如果就是拿不到IP,浏览器就会报错

          

    浏览器去建立的TCP链接(ip+port HTTP1.0,2.0)

    • 利用端口和IP地址,如果URL中没有端口,使用协议的默认端口(http:80,http443)
    •  当TCP连接之后(三次握手完成),TCP状态变成ESTABLISHED
    • 当浏览器构建工业界HTTP连接请求经过TCP连接发送,方法是GET方法,资源路径是我们输入的,浏览器等待服务器响应
    • 服务器根据不同的资源响应,构建出不同的响应,经过TCP连接,返回给浏览器
    • 浏览器根据响应头中的Content-Type,选择不同的方式处理响应体的内容,如果是text/html,解析HTML结构,构建HTML的标签树,如果涉及link,img,script这样的标签,需要浏览器发起新的请求
    • 最终完成之后,会结合JS的执行(会修改DOM树)+CSS渲染,得到最终想要的效果  

    偏代码层的角度

    纯粹的网络数据传输的的角度

    应用层的数据(HTTP的请求),经过传输层的TCP协议封装

    1. 先将应用层的数据放到TCP的发送缓冲区,等到滑动窗口机制和合适的位置进行发送(并不能保证一次久将TCP Segment就能把所有请求全部发送完)
    2. 发送之前封装:添加了源端口,目标端口+序列号和其他信息+HTTP的信息,把封装的信息发到网络层
    3. 网络层也会对数据进行封装并发送:网络层根基socket绑定的目标ip+网络层维护的路由器表信息,计算下一跳的IP地址,直到我们的目标地址和现在处于的地址同一个LAN的网络内(网络层/数据链路层)通过下一跳IP地址+arp表,得到下一跳的mac地址(一定本LAN的某台主机,路由器的MAC地址),将源IP+目标IP+其他信息+TCP的信息发送给数据链路层
    4. 数据链路层根据下一跳的mac地址,封装源MAC+目标MAC+来自数据链路层的信息,将数据发送给网卡(硬件),触发网卡的引脚进行发送
    5. 数据经过物理介质(网线,电磁波)到达了集线器,交换机
    6. 目标主机的网卡收到是数据之后,会触发硬件中断,通过OS(数据链路层)处理收到的数据,一层层往上传递,不断的拆包,最终到了应用层,变成我们服务器收到客户端的请求数据
    7. TCP不会立即把数据给应用层,1确保我们的数据有序 2发送确认应答给对方主机的传输层TCP
    8. 如果NAT服务器,涉及到数据的源IP和源port的改写问题(把内网IP+POTR改写为外网IP+PORT)

    题目练习+知识总结 

    计算机网络传输体系

      

    • x86系统采用的小端模式,所以低位存储也是数据的低位


    为什么需要网络协议的分层?

    • 分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务)
    • 网络传输的这个问题很复杂,拆解成一个个小问题,分成一个个子问题去解决

    传输层知识 

    • 网络编程可以在同一台主机上进行,但是必须是不同的端口,因为在传输层实现的是进程到进程的通信
    • 并且在一个网络通信的数据上都是会有一个五元组信息,(源端口+目标端口+源IP+目标IP+协议)

    •  涉及到确认应答机制,和序列号的机制

    • 不会立即放弃,会尝试重传,因为TCP是可靠的协议,对方可能没有收到,不可能就直接放弃连接
    • 传送窗口是跟滑动窗口和拥塞控制有关系

     

     

     

    • 重点是理解复用/分用的 

     

     

     

     

     

     

    超时重传机制 

     TCP三次握手(建立连接)

     什么是TCP的三次握手

    • 在网络数据传输中,传输层协议TCP是要建立连接的可靠传输,TCP建立连接的过程,我们称为三次握手。

    三次握手的具体细节

    • 第一次握手:A将标志位SYN置1,随机产生一个初始序列号seq发送给B,A进入SYN_SENT状态;
    • 第二次握手:B收到Client的SYN=1之后,知道A请求建立连接,将自己的SYN置1,ACK置1,产生一个ack=A发的序列号+1(用于回应已经接收到了),并随机产生一个自己的初始序列号seq,发送给A;进入SYN_RCVD状态;
    • 第三次握手:A检查ack是否为序列号+1,ACK是否为1,检查正确之后将自己的ACK置为1,产生一个ack=B发的序列号+1,发送给服务器;进入ESTABLISHED状态;B检查ACK为1和ack为序列号+1之后,也进入ESTABLISHED状态;完成三次握手,连接建立。
    • 1. 客户端向服务端发送SYN
    • 2. 服务端返回SYN,ACK
    • 3. 客户端发送ACK
       

    用现实理解三次握手的具体细节
    三次握手的目的是建立可靠的通信信道,主要的目的就是双方确认自己与对方的发送与接收机能正常。

    • 1. 第一次握手:客户什么都不能确认;服务器确认了对方发送正常
    • 2. 第二次握手:客户确认了:自己发送、接收正常,对方发送、接收正常;服务器确认了:自己接收正常,对方发送正常
    • 3. 第三次握手:客户确认了:自己发送、接收正常,对方发送、接收正常;服务器确认 了:自己发送、接收正常,对方发送接收正常 所以三次握手就能确认双发收发功能都正常,缺一不可。

    第三次握手中,如果客户端的ACK未送达服务器,会怎样?
    Server端:由于Server没有收到ACK确认,因此会每隔 3秒 重发之前的SYN+ACK(默认重发五次,之后自动关闭连接进入CLOSED状态),Client收到后会重新传ACK给Server。
    Client端,会出现两种情况:

    • 1. 在Server进行超时重发的过程中,如果Client向服务器发送数据,数据头部的ACK是为1的,所以服务器收到数据之后会读取 ACK number,进入 establish 状态
    • 2. 在Server进入CLOSED状态之后,如果Client向服务器发送数据,服务器会以RST包答。
       

    初始序列号是什么
    TCP连接的一方A,随机选择一个32位的序列号(Sequence Number)作为发送数据的初始序列号(Initial Sequence Number,ISN),比如为1000,以该序列号为原点,对要传送的数据进行编号:1001、1002...三次握手时,把这个初始序列号传送给另一方B,以便在传输数据时,B可以确认什么样的数据编号是合法的;同时在进行数据传输时,A还可以确认B收到的每一个字节,如果A收到了B的确认编号(acknowledge number)是2001,就说明编号为1001-2000的数据已经被B成功接受。

    四次挥手

    什么是TCP的四次挥手

    • 在网络数据传输中,传输层协议断开连接的过程我们称为四次挥手

    • 第一次挥手:A将FIN置为1,发送一个序列号seq给B;进入FIN_WAIT_1状态;
    • 第二次挥手:B收到FIN之后,发送一个ACK=1,ack=seq+1;进入CLOSE_WAIT状态。此时A已经没有要发送的数据了,但仍可以接受服务器发来的数据。
    •  第三次挥手:B将FIN置1,发送一个序列号给A;进入LAST_ACK状态;
    • 第四次挥手:A收到服务器的FIN后,进入TIME_WAIT状态;接着将ACK置1,发送一个ack=序列号+1给服务器;B收到后,确认ack后,变为CLOSED状态,不再向客户端发送数据。客户端等待2*MSL(报文段最长寿命)时间后,也进入CLOSED状态。完成四次挥手。

    用现实理解三次握手的具体细节TCP的四次挥手
     

    • 1. 客户与服务器交谈结束之后,客户要结束此次会话,就会对服务器说:我要关闭连接了(第一 次挥手)
    • 2. 服务器收到客户的消息后说:好的,你要关闭连接了。(第二次挥手)
    • 3. 然后服务器确定了没有话要和客户说了,服务器就会对客户说,我要关闭连接了。(第三次挥 手)
    • 4. 客户收到服务器要结束连接的消息后说:已收到你要关闭连接的消息。(第四次挥手),才关闭

    为什么挥手需要四次

    • 这是由于TCP的半关闭(half-close)造成的。半关闭是指:TCP提供了连接的一方在结束它的发送后还能接受来自另一端数据的能力。通俗来说,就是不能发送数据,但是还可以接受数据。
    • TCP不允许连接处于半打开状态时,就单向传输数据,因此完成三次握手后才可以传输数据(第三握手可以携带数据)。
    • 当连接处于半关闭状态时,TCP是允许单向传输数据的,也就是说服务器此时仍然可以向客户端发送数据,等服务器不再发送数据时,才会发送FIN报文段,同意现在关闭连接。
    • 这一特性是由于TCP双向通道互相独立所导致的,也使得关闭连接必须经过四次握手。
       

    为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(CLOSE_WAIT状态意义是什
    么)?

    • 因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复ACK,表示接收到了断开连接的请求。等到数据发完之后再发FIN,断开服务器到客户端的数据传送。

    客户端TIME_WAIT状态的意义是什么
    第四次挥手时,客户端发送给服务器的ACK有可能丢失,TIME_WAIT状态就是用来重发可能丢失的ACK报文。如果Server没有收到ACK,就会重发FIN,如果Client在2*MSL的时间内收到了FIN,就会重新发送ACK并再次等待2MSL,防止Server没有收到ACK而不断重发FIN。 MSL(MaximumSegment Lifetime),指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接

    为什么TIME_WAIT等待的时间是2MSL
    MSL(Maximum Segment LifeTime)是报文最大生成时间,它是任何报文在网络上存在的最长时间,超过这个时间的报文将被丢弃。因为TCP协议是基于IP协议(位于IP协议的上一层),IP数据报中有限制其生存时间的TTL字段,是IP数据报可以经过的最大路由器的个数,每经过处理它的路由,TTL就会减一。TTL为 0 时还没有到达目的地的数据报将会被丢弃,同时发送 ICMP 报文通知源主机。MSL的单位为时间,TTL的单位为跳转数。所以MSL应该大于等于TTL变为0的时间,以确保报文已被丢弃。

    • TIME_WAIT等待的2MSL时间,可以理解为数据报一来一回所需要的最大时间。
    • 2MSL时间是从客户端接收到FIN后发送ACK开始计时的。如果在这个时间段内,服务器没有收到ACK应答报文段,会重发FIN报文段,如果客户端收到了FIN报文段,那么2MSL的时间将会被重置。如果在2MSL时间段内,没有收到任何数据报,客户端则会进入CLOSE状态。

    等待2MSL的意义

    • 1.保证客户端最后发送的ACK能够到达服务器,帮助其正常关闭。

    由于这个ACK报文段可能会丢失,使得处于LAST_ACK状态的服务器得不到对已发送FIN报文段的确认,从而会触发超时重传。服务器会重发FIN报文段,客户端能保证在2MSL时间内收到来自服务器的重传FIN报文段,从而客户端重新发送ACK应答报文段,并重置2MSL计数。

    假如客户端不等待2MSL就之间进入CLOSE状态,那么服务器会一直处于LAST_ACK状态。

    当客户端发起建立SYN报文段请求建立新的连接时,服务端会发送RST报文段给客户端,连接建立的过程就会被终止。

    • 2.防止已失效的连接请求报文段出现在本连接中。

    TIME_WAIT等待的2MSL时间,确保本连接内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。

    IP层知识 

     

     

     

     

    ​​​​​

     

      网络层的职能是尽最大的努力传输数据表,差错校验会在数据链路层去实现,IP层不会再进行 

    • ICMP是为了测试网络是否通畅 

     

     

     

     

     

     

     ​​​​​​​

     

     

     

     

     ​​​​​​​

     

    关于静态划分IP地址主机和网络

     动态划分IP地址主机和网络

    特殊的IP地址

    • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
    • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有 主机发送数据包;
    • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输)对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

    ICMP协议详解

    ICMP协议是一个网络层协议。

    • 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。
    • 所以我们就需要一种协议来完成这样的功能–ICMP协议。

    ARP协议

    • ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。其作用是在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
    • 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

    交换机的受到的攻击

    应用层的知识

     

    •  URL是资源定位符,在网络中定位一个资源,跟TCP协议无关

     

    • DNS劫持又称 域名劫持 ,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。

     

     

     

     

     

     

     ​​​​​​​

     

     

     

     

     

    SNMP协议 

    简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议,工作在UDP 161端口,用于监控目标设备的操作系统、硬件设备、服务应用、软硬件配置、网络协议状态、设备性能及资源利用率、设备报错事件信息、应用程序状态等软硬件信息。
    2、SNMP的通信字符串主要包含两类命令:GET命令,SET命令。
    1)GET命令从设备读取数据,这些数据通常是操作参数,例如连接状态、接口名称等。
    2)SET命令允许设置设备的某些参数,这类功能一般有限制,例如关闭某个网络接口、修改路由器参数等功能。
    3)但很显然,GET、SET命令都可能被用于拒绝服务攻击(DoS)和恶意修改网络参数。

    DNS协议

    1. DNS是一整套从域名映射到IP的系统。
    • TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息,于是人们发明了域名,并通过域名系统来映射域名和IP地址。域名是一个字符串,如 www.baidu.com , hr.nowcoder.com

    域名系统为一个树形结构的系统,包含多个根节点。其中

    • 1. 根节点即为根域名服务器,最早IPv4的根域名服务器全球只有13台,IPv6在此基础上扩充了数量。
    • 2. 子节点主要由各级DNS服务器,或DNS缓存构成。DNS域名服务器,即提供域名转换为IP地址的服务器。浏览器、主机系统、路由器中都保存有DNS缓存。Windows系统的DNS缓存在 C:\Windows\System32\drivers\etc\hosts 文件中,Mac/Linux系统的DNS缓存在 /etc/hosts 文件中。
    • 网络通信发送数据时,如果使用目的主机的域名,需要先通过域名解析查找到对应的IP地址:域名解析的过程,可以简单的理解为:发送端主机作为域名系统树形结构的一个子节点,通过域名信息,从下到上查找对应IP地址的过程。如果到根节点(根域名服务器)还找不到,即找不到该主机。

    域名解析使用DNS协议来传输数据。DNS协议是应用层协议,基于传输层UDP或TCP协议来实现

    DHCP是什么意思

    很多朋友并不是很了解,DHCP(Dynamic Host Configuration Protocol),动态主机配置协议:计算机用来获得配置信息的协议。DHCP容许给某一计算机赋以IP地址而不需要管理者在服务器数据中配置有关该计算机信息。DHCP作用就是给PC分配一个IP。在一个局域网里面,你的路由有这个功能的话,那它就会把PC的MC地址记住,然后给这个PC分配一个IP地址,然后这个MC地址的PC以后就用这个IP地址上网作用就是可以防止外来PC上网,和避免IP地址重复使用造成的错误。下面就来具体介绍一下DHCP是什么意思。

    ​​​​​​​

    什么是NAT (Network Address Translation, 网络地址转换)?

    • 用于解决内网中的主机要和因特网上的主机通信。由NAT路由器将主机的本地IP地址转换为全球IP地址,分为静态转换(转换得到的全球IP地址固定不变)和动态NAT转换


    什么是http的请求格式

    • HTTP请求体是我们请求数据时先发送给服务器的数据,毕竟我向服务器那数据,先要表明我要什么吧
    • HTTP请求体由:请求行 、请求头(name:value格式)、空行、请求体组成的
    • 注意:GIT请求是没有请求体的,也就是请求数据

    请求头的内容 

    http的响应报文有哪些

    • http的响应报是服务器返回给我们的数据,必须先有请求体再有响应报文
    • 响应报文包含三部分 响应行、响应头、空行,响应内容实体实现

     
    一次完整的HTTP请求所经历几个步骤

    • 1. 建立TCP连接

    怎么建立连接的,看上面的三次捂手

    • 2. Web浏览器向Web服务器发送请求行

    一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET /sample/hello.jsp HTTP/1.1。

    • 3. Web浏览器发送请求头

    浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

    • 4. Web服务器应答

    客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。

    • 5. Web服务器发送应答头

    正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

    • 6. Web服务器向浏览器发送数据

    Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

    • 7. Web服务器关闭TCP连接

    HTTP状态码

    • 1xx表示还处于一定的流程,没传送到
    • 2xx表示连接正常  200
    • 3xx表示重定向   301 302 303 307 
    • 4xx客户端导致的失败 400 404 405 
    • 5xx表示服务器导致的失败

    GET方法与POST方法的区别

    • 区别一: get重点在从服务器上获取资源,post重点在向服务器发送数据;
    • 区别二: Get传输的数据量小,因为受URL长度限制,但效率较高; Post可以传输大量数据,所以上传文件时只能用Post方式;
    • 区别三: get是不安全的,因为get请求发送数据是在URL上,是可见的,可能会泄露私密信息,如密码等; post是放在请求头部的,是相对安全的
    • GET会有缓存,但是POST没有缓存
       

    http版本的对比
    HTTP1.0版本的特性:

    • 早先1.0的HTTP版本,是一种无状态、无连接的应用层协议。HTTP1.0规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

    HTTP1.1版本新特性

    • 默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应断点续传原理

    HTTP2.0版本的特性

    • 二进制分帧(采用二进制格式的编码将其封装)
    • 首部压缩(设置了专门的首部压缩设计的HPACK算法。)
    • 流量控制(设置了接收某个数据流的多少字节一些流量控制)
    • 多路复用(可以在共享TCP链接的基础上同时发送请求和响应)
    • 请求优先级(可以通过优化这些帧的交错和传输顺序进一步优化性能)
    • 服务器推送(就是服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资 源无
    • 需客户端明确的请求。(重大更新))
       

    数据链路层

    • 正因为下层提供的是不可靠的,所以我们TCP做了一系列的实现可靠的行为

    Socket套接字

     

     

     

    什么是Socket
    网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个
    Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。但是,Socket所支持的协议种类也不光TCP/IP、UDP,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
    socket连接就是所谓的长连接,客户端和服务器需要互相连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉的,但是有时候网络波动还是有可能的Socket偏向于底层。一般很少直接使用Socket来编程,框架底层使用Socket比较多,

    Socket通讯的过程

    • 基于TCP:服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
    • 基于UDP:UDP 协议是用户数据报协议的简称,也用于网络数据的传输。虽然 UDP 协议是一种不太可靠的协议,但有时在需要较快地接收数据并且可以忍受较小错误的情况下,UDP 就会表现出更大的优势。我客户端只需要发送,服务端能不能接收的到我不管
       
  • 相关阅读:
    Css 美化滚动条
    CSS通用样式3——表格
    STC - 同时外挂扩展RAM和12864时, C库函数失效的问题
    卫星遥感·格物致知丨卫星遥感的力量——自然灾害监测的太空之眼—洪涝灾害监测
    百度智能云千帆大模型平台再升级,SDK版本开源发布!
    OpenTelemetry agent 对 Spring Boot 应用的影响:一次 SPI 失效的
    3d建模师会因为年龄大而淘汰吗?没有自学能力,入行都是问题!
    基于Java建筑装修图纸管理平台设计实现(源码+lw+部署文档+讲解等)
    C中结构体释放问题
    复习C语言数组的用法
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/126514300