网络编程基础

数据包

在这里插入图片描述

http协议
HTTP的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了。
在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。

在这里插入图片描述

websocket协议
当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端。解决了上面同步有延迟的问题。我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(php等)来处理,(换句话说我们有一个非常快速的 接线员(Nginx) ,他负责把问题转交给相应的客服(Handler))。Websocket 建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员再统一转交给客户。
由于Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员解析HTTP协议,还要查看identity info的信息。

在这里插入图片描述

TCP三次握手

在这里插入图片描述

TCP四次挥手

在这里插入图片描述

三次握手和四次挥手的实例
SYN(synchronization)同步:[S]
ACK(acknowledge)响应:[.]
PAC(pakage)数据:[P.]
FIN(finish)关闭:[F.]

在这里插入图片描述

TCP流量控制

在这里插入图片描述

TCP拥塞控制

慢开始

在这里插入图片描述
在这里插入图片描述

TCP拥塞控制

快速重传和快速恢复

在这里插入图片描述

TCP数据传输流程

在这里插入图片描述

TCP粘包和拆包的原因

  1. 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包
  2. 应用程序写入数据小于套结字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包
  3. 进行MSS(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>MSS的时候将发生拆包
  4. 接收方法不及时读取套接字缓冲区数据,这将发生粘包

获取完整数据

  1. 使用带消息头的协议,头部写入包的长度,然后再读取包的内容
  2. 设置定长消息,每次读取定长内容,长度不够时空位补固定字符
  3. 设置消息边界,服务端从网络流中按消息边界分离出消息内容,一般使用‘\n’
  4. 更为复杂的协议,json、protobuf

套接字(socket)为通信的端点,每个套接字由一个 IP 地址和一个端口号组成。通过网络通信的每对进程需要使用一对套接字,即每个进程各有一个。

Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

netstat  -anp  |grep   端口号

curl是一个综合传输工具,既可以用来上传文件,也可以用来下载文件,在日常使用过程中,它通常都是以下载工具的角色出现,常用来检验一个网址是否可以访问。与curl命令相似的,还有wget命令,二者在功能上具有很多类似的地方,但curl由于可自定义各种请求参数所以在模拟web请求方面更擅长;wget由于支持ftp和Recursive所以在下载文件方面更擅长

//打印连接过程或者结果
curl -v '网址或者ip'
/*
$ curl -h
-o, --output <file> 写入到文件,而不是输出到stdout
-O 写入到文件,文件名和远程文件一样
-L 跟随网站的跳转
-x, --proxy [protocol://][user:pwd@]host[:port] 使用代理
-v 打印过程
--trace <file> debug写入到文件,很详细包括二进制数据交换,file使用 - 表示打印到stdout
-c <file> 将服务器设置的cookie写入到文件
-b <data> 发送cookie,从 string/file 获取
-A <name> 发送 User-Agent <name> 到服务器
-e <url> 指定 Referer : <url> , 仿造referer,服务器会以为你是从 url 点击某个链接过来的
-H <header/@file> 将自定义标头传递到服务器
-X <command> 指定请求方法,不带任何参数的请求默认get方法
-s Silent mode 无声模式
-S Show error even when -s is used 即使使用 -s 也打印错误
-i 打印服务器回应的http标头
-I 只打印标头
-k 使用ssl时,允许不安全的服务器连接。跳过ssl检测
-d <data> http post data,使用post方法发送表单,自动添加标头Content-Type : application/x-www-form-urlencoded
-F <name=content> 指定 multipart MIME data , 可以上传二进制文件,自动添加Content-Type: multipart/form-data
-G 把 post data 放进 url 并使用 get 请求,与-d配合
-u <user:password> 指定服务器用户和密码
-T <file> 上传文件,使用 put 请求
*/

http连接池处理请求流程(transport )

在这里插入图片描述

连接池配置设置

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值