网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
但是有大量的time_wait状态,会很占用资源影响资源。
Tcp协议的可靠性体现在哪些方面?
有超时重传、校验码、序列号、流量控制。
- 为了防止信息包丢失,当tcp发出一个报文段后,会启动一个定时器,等待目的端收到这个报文段,如果没有及时收到一个确认,将重新发这个报文段。(超时重传)
- 为了防止数据在传输过程中被损坏,每个信息包都包含一个校验码,这个校验码就是用来保证这个信息包在传输过程中没有被修改的一个代码。当信息到达目的地时,接收端会比较这个校验码和信息包中收到的数据,如果校验码不对则会舍弃这个信息包。(校验码)
< 发送之前会根据数据计算一下校验码,收到的时候还会再根据数据计算校验码,如果数据发送改变则校验码对不上,就会丢弃这个包。>
- 为了防止信息包重复或者顺序错误,tcp每传送一个信息包都会发送一个序列号,接收端会检查这个序列号,并返回确认,把全部信息包按照序列号重新合并,如果接收端检查到一个已接收的序号,那么这个信息包就会被丢弃。(按序到达)
- Tcp还提供流量控制,tcp连接的每一方都有固定大小的缓冲空间。Tcp的接收端只接受另一端发送接收端所能接纳的数据,这个将防止较快主机致使较慢主机的缓冲区溢出。(滑动窗口来进行流量控制)
如何让UDP协议变得可靠?
UDP的报头一共只有8个字节,分别为:源端口号、目的端口号、数据报长度以及校验和,其中每个域各占用2个字节。
可以对原有UDP增加一些控制机制,如丢包重发、错序重排等。增加UDP的头信息:2个字节的数据包标识,2个字节的发送序号,2个字节的文件指针定位和2个字节的数据包中数据大小信息。
< 数据包标志指明该数据包为文件数据包、确认包或者其它控制包,发送序号用来指明数据包的顺序信息,指针定位字节数据用来指明该数据包中数据被填写到文件的哪个位置,最后的大小信息也是用来向文件中读写数据时使用。>
这里面有三个机制使得udp变得可靠,一是确认机制、二是错序重排机制、三是重发机制。
具体过程:
- 首先发送端发送一个文件信息报文,这个报文就是最简单的UDP报文,但是里面的信息很重要,记录着文件的大小,被分隔成的报文数,文件序号数。发完这个信息包,发送端阻塞,等待接收端的回复报文才能继续。
- 然后接收端收到报文给发送端发一个确认号,发送端收到这个确认号的话,就会把这个文件的整组数据报全部发送过去。(不像TCP每个报文都要确认才能收发下一个报文)
- 接收端在接收这组报文的时候将遵守错序重排机制,来对收到的这组报文进行按序号排序,期间可能序号不连续不过没关系,接受过程只要保证序号从小到大即可。发送端发送完所有数据包之后再发一个结束报文,接收端收到结束报文之后再按照一开始的文件信息包的信息和序列号做对比,把没有收到的序列号报文信息传回发送端,要求重发。
发送端重发,最后直到接收端全部接收完毕,就给发送端发回一个接收完毕的报文。这样这个文件传输就结束了,接收端就可以开始下一个文件传输。
画出tcp包的头
源端口(2字节) | 目的端口(2字节) |
序号(4字节) | |
确认号(4字节) | |
Dataoffset4位 、保留字段、标志位各6位 | 窗口字段(2字节) |
校验和(2字节) | 紧急指针(2字节) |
一共20个字节。Udp的头只有第一行和最后一行。
序号是包的序号,用来解决网络包乱序的问题。
确认号是ack,指的是下一个期待的字节,用于确认收到,用来解决丢包问题。(收到接收方发送的ACK是5就表示他下一次希望收到的数据是5,发送方就知道我刚才发送的2个数据对方收了,这个时候开始发送第5个数据)
窗口就是指滑动窗口,用来解决流量控制的问题。
标志位,就是包的类型,URG、ACK、PSH、RST、SYN、FIN,用来把握tcp的状态。
tcp的滑动窗口机制
TCP是通过滑动窗口来进行流量控制。
在TCP头部里有一个字段叫 窗口大小。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据,于是发送端就可以根据这个窗口大小来发送数据。这样就控制了发送端的数据发送,进行流量控制。
如果接收端处理缓慢,导致滑动窗口变为0了,怎么办?
这时发送端就不发数据了,但发送端会发ZWP(即Zero Window Probe技术)的包给接收方,让接收方回ack更新窗口大小,一般这个值会设置3次,每次大约30-60秒。如果3次过后还是0的话,有的TCP实现就会发RST把连接断了。
tcp的拥塞控制机制
拥塞是指:对资源的请求超过了可用资源的大小,若网络中许多资源同时供应不足,网络的性能就会明显变坏。
拥塞控制机制:就是采用一些方法,防止过多的数据注入到网络中,使网络能够承受现有的网络负荷。
拥塞控制方法:
慢开始、拥塞避免、快重传、快恢复。
慢开始:是指由小到大的增大发送窗口,将拥塞窗口cwnd一开始设为1,然后再逐渐增大cwnd,每经过一个往返时间RTT,就将cwnd加倍,还需要设置一个慢开始门限状态变量,防止cwnd增长过快而导致网络拥塞。
拥塞避免:让拥塞窗口cwnd更加缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
快重传:
< 快重传要求接收方只要收到失序的报文段就立即发出重复确认。>
接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。显然,接收方不能确认M4,因为M4是收到的失序报文段。根据可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了接收方的四个对M2的确认,其中后三个都是重复确认。快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必继续等待M3设置的重传计时器到期。
快恢复:
当发送方连续收到三个重复确认,把慢开始门限ssthresh减半,用来预防网络发生拥塞。慢开始门限ssthresh减半之后,执行拥塞避免算法。
tcp协议的缺陷?如何应对?
引起泛洪效应。SYN- Flood攻击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,它就是利用了TCP协议实现上的一个缺陷,通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。
原理:攻击者首先伪造地址,对服务器发起SYN请求,服务器回应(SYN+ACK)包,而真实的IP会认为,我没有发送请求,不作回应。服务器没有收到回应,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries)。这样的话,对于服务器的内存,带宽都有很大的消耗。
应对方法:
- 拆除掉掉半开连接和不活动连接,释放系统资源。
- 延缓TCB资源分配(两种方法:a.收到SYN时不急着分配TCB,而是回应一个ACK报文,直到收到对方正确的ACK再分配TCB;b.收到对方的ACK报文之后,重新计算一下,看是否与记录的sequence number-1(上一个泛洪序列号)相同,从而决定是否分配TCB资源)。
防火墙验证。
Tcp协议和Udp协议有什么区别?各自什么场合使用
tcp面向连接,而udp是无连接的。
tcp提供可靠的服务,通过tcp连接传送的数据,尽可能无差错,不丢失,不重复,且按序到达。udp不保证可靠交付。
udp没有拥塞机制,因此网络出现拥塞不会使主机发送速率降低。这就对实时应用很有用,如ip电话、实时视频会议等。(丢包就丢包,发还是照常发)
每一条tcp连接都是一对一的,而udp支持一对一、一对多、多对一、多对多的交互通信。
tcp对系统资源的要求更多,udp对系统资源的要求较少。
像远程视频,qq大部分都是用的udp协议,而传收文件,一般都是用tcp协议。
为什么 TCP 叫数据流模式? UDP 叫数据报模式?
数据流模式是指TCP发送端发送几次数据和接收端接收几次数据是没有必然联系的。<这是因为TCP是面向连接的,一个 socket 中收到的数据都是由同一台主机发出,且有序地到达,所以每次读取多少数据都可以。>
数据报模式是指发送端发送了几次数据,那么接收端就得接收几次数据,每次最多只能读取一次报文。
< 这是因为UDP是无连接的,只要知道接收端的 IP 和端口,任何主机都可以向接收端发送数据。 这时候,如果一次能读取超过一个报文的数据, 则会乱套。因为可能上一个报文是a主机的,而下一个报文是b主机的。 >
tcp和udp的编程区别
socket()的参数不同 ;UDP Server不需要调用listen和accept ;UDP收发数据用sendto/recvfrom函数 ;TCP:地址信息在connect/accept时确定 ; UDP:在sendto/recvfrom函数中每次均需指定地址信息 ;UDP:shutdown函数无效。
TCP通信中:socket(PF_INET, SOCK_STREAM, 0),这表示建立一个socket用于流式网络通讯。
UDP中,socket(PF_INET, SOCK_DGRAM, 0),任何一方建立一个socket以后就可以用sendto发送数据,也可以用recvfrom接收数据。
udp的单播、广播和多播
单播是两个主机之间的端对端通信,广播是一个主机对整个局域网上所有主机上的数据通信,而多播是一个主机对一组特定主机的数据通信。
- 广播地址255.255.255.255,广播只允许在局域网中,本地广播信息是不会被路由器转发,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。广播还是要指明接收者的端口号。
- 单播和多播都允许在广域网上进行传输,多播的应用主要有网上视频、网上会议等。
多播服务器的总带宽不受客户端带宽的限制。由于组播协议由接收者的需求来确定是否进行数据流的转发,所以服务器端的带宽是常量,与客户端的数量无关。多播的ip地址范围是224.0.0.0至239.255.255.255之间的IP地址。
Ps:访问一个web服务器,就是访问它的80端口。
tcp如果发一万个包,对方只能接收一百个怎么办?
在接收端和发送端的链路中间加一个中继器,由中继器将一万个包组成一百个包,再传给接收端。
或者接收端告诉发送端自己的窗口大小,进行流量控制,让发送端将一万个包拆分成一百个用一百次发过来。
DNS域名解析协议
一个域名只能对应一个ip,但是一个ip可以对应多个域名。
DNS就是把域名和ip地址映射起来的分布式数据库。
- 一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
- 如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器。
- 查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
- 根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。这种过程是迭代的过程。
- 域服务器也不直接返回ip地址与域名的对应关系,而是告诉本地DNS服务器,能解析这个域名的服务器的地址。
最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
DNS使用什么协议?
DNS是应用层的协议,使用了TCP和UDP协议。
arp协议
arp协议是网络层的协议,是映射ip地址和mac地址的一个表,可以根据ip地址找mac地址。
ping发生在网络模型的哪一层?
网络层,ping是为了检测网络是否通畅,基于icmp协议。
ping + 域名
简述一下ping的原理
ping就是给目标IP地址发送一个 ICMP 回显请求,并要求对方返回一个 ICMP 回显应答来确定两台网络机器是否连通,时延是多少。
在 ICMP 逐层封装的过程中,需要知道源IP、源MAC地址、目的IP、目的MAC地址,前三者是已知的,只需要获取目的MAC地址即可,通过arp协议来获得目的MAC地址:
< 若在同一网段,只需要发送ARP广播;
若不在同一网段,发送ARP广播给交换机,交换机若没有缓存目的IP对应的MAC地址,它会再转发该ARP广播包。>
列举几个应用层的协议,他们分别用了什么传输层协议
http ftp dns(域名解析协议,通过域名来找到对应的IP地址)
<http面向网页,ftp面向文件>
http用到了tcp协议,dns用到了tcp和udp协议。
ip报文传输的过程
主机将数据包发送到默认网关,再由路由器在路由表中发现目标网络,传到下一个更接近目标的路由器,再到下一个路由器,最终由目的mac地址传到目标主机。
ip报文传输过程包括:
-
Host sends packet to default gateway(主机将数据包发送到默认网关)
-
Packet placed in frame(数据包被封装入帧)
-
Router receives frame(路由器接到帧)
-
Router finds destination network in route table(路由器在路由表中发现目标网络)
-
Router chooses next hop toward destination(路由器选择一个更接近目标的下一跳)
-
MAC address of next hop determined(下一跳的MAC地址被确定)
-
Packet placed in frame(数据包被封装入帧)
-
Repeats steps 2 through 7 as necessary(如果需要的话,重复步骤2~7)
-
Router receives frame(路由器接到帧)
-
Router finds network directly connected(路由器发现直连网络)
-
MAC address of end host determined(最终主机的MAC地址被确定)
-
Packet placed in frame to final destination(帧中的数据包被发送到最终主机)
ip数据包在传输的过程当中哪些数据会发生改变?
源物理地址和目的物理地址会发生改变,源ip地址应该不会改变。比如经过好几个路由器。
tcp/ip协议与http协议的区别
tcp/ip协议是传输层的协议,主要解决的是数据如何在网络中传输,只关注传输。http是应用层协议,主要解决如何包装数据,定义传输数据内容的规范。
实际应用中,我们访问一个网页,首先就要跟服务器建立tcp/ip连接,建立tcp连接之后,才能用http协议来传送数据,给服务器发http请求。
“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
http协议和https协议的区别
http不安全 很容易被监测,https更安全,用了一套密钥交换机制,实现了加密通信,基于ssl协议。
http访问一个网页的完整过程
域名解析查找ip地址–> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器显示出来当输入一个网址,
在应用层中,客户端浏览器先通过DNS域名解析协议将URL解析为ip地址,(通过这个地址来寻找客户端到服务端的路径)然后发起一个http会话,交给传输层处理。
在传输层中,浏览器会向服务器发起tcp连接,三次握手连接上之后发起http请求。将http会话请求分为tcp报文段,再添加上源端口和目的端口,交给网络层。
在网络层中,通过查找路由表来确定如何到达服务器。
在数据链路层,包通过链路层发送到路由器,通过arp协议查找给定ip地址的mac地址。
经过这些步骤,最后把http请求发送到服务器这里。
http报文格式
http报文是由状态行、响应头、响应正文组成的。
状态行中包括了请求方法、URL、版本。用来说明请求的目的。
响应头包含的是客户端的各种关于内容格式、语言类型等的请求。
响应正文就是就是报文的具体数据。
http协议
http协议:超文本传输协议,HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP协议工作于客户端-服务端(C/S)架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
主要特点:
1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
Http的无状态、无连接代表什么意思
无状态代表http对事务没有记忆能力。
比如:A购买了一件商品放入购物车内,当再次购买商品时,服务器已经无法判断该购买行为属于用户A还是用户B的会话了,要想跟踪会话,必须引入一种机制。
无连接是指限制每次连接只能处理一个请求。
什么是cookie机制
Cookie是存储在用户本地终端上的数据。
由于http是无状态协议,服务器单从网络连接上无从得知客户身份,就给客户端颁发一个通行证吧,每人一个,无论访问什么都必须携带自己的通行证。这样服务器就能从通行证确认客户身份了,并把这个通行证所进行的所有操作都归为一个会话。Cookie对象使用key-value属性对的形式保存用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。Cookie是不可跨域名的,比如Google和baidu各自只能操作自己的Cookie,而不能操作对方的Cookie。
****像保存登陆信息自动登陆,********是把登录信息如账号、密码等保存在Cookie中,并控制Cookie的有效期,下次访问时再验证Cookie中的登录信息即可。****验证的时候一般是把密码加密后保存到Cookie中,下次访问时解密并与数据库比较,要查询数据库。
什么是session机制
Cookie和Session机制都是服务器用来记录客户端状态的一种机制。
Session方法上比Cookie简单一些,相应的也增加了服务器的存储压力。Cookie是保存在客户端中,而Session是保存在服务器上。Session相当于在服务器中存储了一份客户档案,客户端浏览器访问的时候只需要查询这个档案就行。为了更高的存取速度,服务器一般把Session存放在内存里,每个用户都会有一个独立的Session,用户第一次访问的时候会自动创建Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。Session随着用户的访问会越来越多,所以服务器会把长时间没有活跃的Session从内存中剔除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
Session是通过Cookie来识别是否是同一用户的,但是绝大多数的手机浏览器都是不支持cookie的,这样就得用URL重写来跟踪用户会话。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,这个session id将被在本次响应中返回给客户端保存,保存这个session id的方式可以采用cookie,也可以用URL重写,就是把session id直接附加在URL路径的后面。
什么是session机制
Cookie和Session机制都是服务器用来记录客户端状态的一种机制。
Session方法上比Cookie简单一些,相应的也增加了服务器的存储压力。Cookie是保存在客户端中,而Session是保存在服务器上。Session相当于在服务器中存储了一份客户档案,客户端浏览器访问的时候只需要查询这个档案就行。为了更高的存取速度,服务器一般把Session存放在内存里,每个用户都会有一个独立的Session,用户第一次访问的时候会自动创建Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。Session随着用户的访问会越来越多,所以服务器会把长时间没有活跃的Session从内存中剔除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
Session是通过Cookie来识别是否是同一用户的,但是绝大多数的手机浏览器都是不支持cookie的,这样就得用URL重写来跟踪用户会话。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,这个session id将被在本次响应中返回给客户端保存,保存这个session id的方式可以采用cookie,也可以用URL重写,就是把session id直接附加在URL路径的后面。
URL和URI
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息(不仅可以标识,而且可以定位资源)
URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址,除了标识资源的位置,还提供一种定位该资源的主要访问机制。
http状态码404
状态代码由三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
get 和post区别
向服务器提交文件、表单、数据、输入账号密码,基本上都是用post。
访问一个浏览网页,可以用get。
get通过url传递,post放在request body(请求体)中。
get请求在url中传递的参数是有长度限制的,而post没有。
get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
get请求只能进行url编码,而post支持多种编码方式
get请求会浏览器主动cache,而post支持多种编码方式。
get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
get和post本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
get产生一个TCP数据包;post产生两个TCP数据包。
对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
http: 源地址发起请求得到目的地址,确定是哪两个进程间相互通信。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
。
get和post本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
get产生一个TCP数据包;post产生两个TCP数据包。
对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
http: 源地址发起请求得到目的地址,确定是哪两个进程间相互通信。
[外链图片转存中…(img-vfFDHLmJ-1715499758787)]
[外链图片转存中…(img-Nlm0KczO-1715499758788)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新