赞
踩
大学我们都学过计算机网络和计算机组成原理,个人大学时并不是很注重这方面的知识,以前傻傻的觉得计算机组成原理这些东西不太重要,在工作过程中才发现越是计算机组成原理这玩意,越重要。这里个人回忆和学习的章节一些题外编程知识,主要章节如下(备注:这里是收集资料和学习工作思考笔记,按理说大部分借鉴,如有版权问题,请联系我删除);
个人这里简单使用nginx代理查看nginx的debuger日志来学习报文结构数据,首先配置nginx的debuger模式
server {
listen 8888;
server_name localhost;
error_log /Users/error.log debug;
location / {
proxy_set_header Host yqylfdyhg1gi-test.cn-north-1.jdcloud-api.net;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yqylfdyhg1gi-test.cn-north-1.jdcloud-api.net;
}
}
配置完后测试请求,发送 http://localhost:8888/order/popOrderSearch 请求后,请求参数
{
"test":"张三",
"age":241111
}
查看nginx日志/Users/error.log
http process request header line http header: "Content-Type: application/json" http header: "User-Agent: PostmanRuntime/7.26.8" http header: "Accept: */*" http header: "Cache-Control: no-cache" http header: "Postman-Token: 501c36d1-75b2-4cd4-aa80-0a29fcebd486" http header: "Host: localhost:8888" http header: "Accept-Encoding: gzip, deflate, br" http header: "Connection: keep-alive" http header: "Content-Length: 41" http header done generic phase: 0 rewrite phase: 1 test location: "/" using configuration "/" http cl:41 max:1048576 rewrite phase: 3 post rewrite phase: 4 generic phase: 5 generic phase: 6 generic phase: 7 generic phase: 8 access phase: 9 access phase: 10 access phase: 11 post access phase: 12 generic phase: 13 generic phase: 14 http client request body preread 41 http request body content length filter http body new buf t:1 f:0 00007FAA4680D72B, pos 00007FAA4680D72B, size: 41 file: 0, size: 0 http init upstream, client timer: 0 http script copy: "Host" http script copy: "yqylfdyhg1gi-test.cn-north-1.jdcloud-api.net" http script copy: "X-Real-IP" http script var: "127.0.0.1" http script copy: "REMOTE-HOST" http script var: "127.0.0.1" http script copy: "X-Forwarded-For" http script var: "127.0.0.1" http script copy: "Connection" http script copy: "close" http script copy: "Content-Length" http script var: "41" http script copy: "" http proxy header: "Content-Type: application/json" http proxy header: "User-Agent: PostmanRuntime/7.26.8" http proxy header: "Accept: */*" http proxy header: "Cache-Control: no-cache" http proxy header: "Postman-Token: 501c36d1-75b2-4cd4-aa80-0a29fcebd486" http proxy header: "Accept-Encoding: gzip, deflate, br" http proxy header: "POST /order/popOrderSearch HTTP/1.0^M Host: yqylfdyhg1gi-test.cn-north-1.jdcloud-api.net^M X-Real-IP: 127.0.0.1^M REMOTE-HOST: 127.0.0.1^M X-Forwarded-For: 127.0.0.1^M Connection: close^M Content-Length: 41^M Content-Type: application/json^M User-Agent: PostmanRuntime/7.26.8^M Accept: '*/*' Cache-Control: no-cache^M Postman-Token: 501c36d1-75b2-4cd4-aa80-0a29fcebd486^M Accept-Encoding: gzip, deflate, br^M ^M " http cleanup add: 00007FAA4680ED90 get rr peer, try: 1 stream socket 4 connect to 101.124.18.198:80, fd:4 #23 kevent set event: 4: ft:-1 fl:0025 kevent set event: 4: ft:-2 fl:0025 http upstream connect: -2 posix_memalign: 00007FAA45C05680:128 @16 event timer add: 4: 60000:259302474 http finalize request: -4, "/order/popOrderSearch?" a:1, c:2 http request count:2 blk:0 http upstream request: "/order/popOrderSearch?" http upstream send request handler http upstream send request http upstream send request body chain writer buf fl:0 s:398 chain writer buf fl:1 s:41 chain writer in: 00007FAA4680EDF0 writev: 439 of 439 chain writer out: 0000000000000000 event timer del: 4: 259302474 event timer add: 4: 60000:259302564 http upstream request: "/order/popOrderSearch?" http upstream dummy handler http upstream request: "/order/popOrderSearch?" http upstream process header malloc: 00007FAA48015C00:4096 recv: eof:1, avail:377, err:0 recv: fd:4 377 of 4096 http proxy status 401 "401 Unauthorized" http proxy header: "Date: Thu, 11 Mar 2021 11:58:26 GMT" http proxy header: "Content-Type: application/json; charset=utf-8" http proxy header: "Connection: close" http proxy header: "x-jdcloud-request-id: c150bpgmqwr218ur1oe60vsg2ome1qgn" http proxy header: "Server: jfe" http proxy header done posix_memalign: 00007FAA48017200:4096 @16 HTTP/1.1 401 Unauthorized^M Server: nginx/1.19.6^M Date: Thu, 11 Mar 2021 12:00:01 GMT^M Content-Type: application/json; charset=utf-8^M Transfer-Encoding: chunked^M Connection: keep-alive^M x-jdcloud-request-id: c150cg912cgphbkph7eeutuoqtb3944o^M write new buf t:1 f:0 00007FAA48017220, pos 00007FAA48017220, size: 243 file: 0, size: 0 http write filter: l:0 f:0 s:243 http cacheable: 0 http proxy filter init s:401 h:0 c:0 l:-1 http upstream process upstream pipe read upstream: 1 pipe preread: 176 pipe buf free s:0 t:1 f:0 00007FAA48015C00, pos 00007FAA48015CC9, size: 176 file: 0, size: 0 pipe length: -1 input buf #0 pipe write downstream: 1 pipe write downstream flush in http output filter "/order/popOrderSearch?" http copy filter: "/order/popOrderSearch?" http postpone filter "/order/popOrderSearch?" 00007FAA4680EE00 http chunk: 176 write old buf t:1 f:0 00007FAA48017220, pos 00007FAA48017220, size: 243 file: 0, size: 0 write new buf t:1 f:0 00007FAA480174B8, pos 00007FAA480174B8, size: 4 file: 0, size: 0 write new buf t:1 f:0 00007FAA48015C00, pos 00007FAA48015CC9, size: 176 file: 0, size: 0 write new buf t:0 f:0 0000000000000000, pos 0000000105B29148, size: 2 file: 0, size: 0 http write filter: l:0 f:0 s:425 http copy filter: 0 "/order/popOrderSearch?" pipe write downstream done event timer: 4, old: 259302564, new: 259302612 http upstream exit: 0000000000000000 finalize http upstream request: 0 finalize http proxy request free rr peer 1 0 close http upstream connection: 4 free: 00007FAA45C05680, unused: 48 event timer del: 4: 259302564 reusable connection: 0 http upstream temp fd: -1 http output filter "/order/popOrderSearch?" http copy filter: "/order/popOrderSearch?" http postpone filter "/order/popOrderSearch?" 00007FFEEA1AAFF0 http chunk: 0 write old buf t:1 f:0 00007FAA48017220, pos 00007FAA48017220, size: 243 file: 0, size: 0 write old buf t:1 f:0 00007FAA480174B8, pos 00007FAA480174B8, size: 4 file: 0, size: 0 write old buf t:1 f:0 00007FAA48015C00, pos 00007FAA48015CC9, size: 176 file: 0, size: 0 write old buf t:0 f:0 0000000000000000, pos 0000000105B29148, size: 2 file: 0, size: 0 write new buf t:0 f:0 0000000000000000, pos 0000000105B298D4, size: 5 file: 0, size: 0 http write filter: l:1 f:0 s:430 http write filter limit 0 writev: 430 of 430 http write filter 0000000000000000 http copy filter: 0 "/order/popOrderSearch?" http finalize request: 0, "/order/popOrderSearch?" a:1, c:1 set http keepalive handler http close request http log handler free: 00007FAA48015C00 free: 00007FAA4680F200, unused: 0 free: 00007FAA4680E200, unused: 8 free: 00007FAA48017200, unused: 2889 free: 00007FAA4680D600 hc free: 0000000000000000 hc busy: 0000000000000000 0 reusable connection: 1 event timer add: 3: 65000:259307612 http empty handler event timer del: 3: 259307612 http keepalive handler close http connection: 3 reusable connection: 0 free: 0000000000000000 free: 00007FAA472045C0, unused: 136
自己来分析一下报文结构:
"POST /order/popOrderSearch HTTP/1.0^M
Host: yqylfdyhg1gi-test.cn-north-1.jdcloud-api.net^M
X-Real-IP: 127.0.0.1^M
REMOTE-HOST: 127.0.0.1^M
X-Forwarded-For: 127.0.0.1^M
Connection: close^M
Content-Length: 41^M
Content-Type: application/json^M
User-Agent: PostmanRuntime/7.26.8^M
Accept: *\/*^M
Cache-Control: no-cache^M
Postman-Token: 5c574468-1bf1-47ea-9cd9-0d88b245090c^M
Accept-Encoding: gzip, deflate, br^M
^M
"
1、进程处理中的请求行request header line
请求行主要由三部分组成: 请求方法(POST)、资源路径(/order/popOrderSearch或加文件名,若是get请求,请求报文会在后面拼接)、协议版本(HTTP/1.0)
POST /order/popOrderSearch HTTP/1.0
2、请求头http header
请求头主要包括验证签名数据,协议,版本,数据传输类型,host,接收数据类型,cookie等等,保证安全行访问有一篇文章https://infosec.mozilla.org/guidelines/web_security#x-xss-protection
3、空行
可能这里设计读取报文方式,个人没再查找资料
3、请求报文体 request body,由于stream,nginx没打印
如nginx代理数据:
http body new buf t:1 f:0 00007FAA4680D72B, pos 00007FAA4680D72B, size: 41 file: 0, size: 0
HTTP/1.1 401 Unauthorized^M
Server: nginx/1.19.6^M
Date: Thu, 11 Mar 2021 12:00:01 GMT^M
Content-Type: application/json; charset=utf-8^M
Transfer-Encoding: chunked^M
Connection: keep-alive^M
x-jdcloud-request-id: c150cg912cgphbkph7eeutuoqtb3944o^M
1、响应状态行
协议、状态码、信息,如 HTTP/1.1 401 Unauthorized
2、响应头
报文响应头,和请求头类似
erver: nginx/1.19.6^M
Date: Thu, 11 Mar 2021 12:00:01 GMT^M
Content-Type: application/json; charset=utf-8^M
Transfer-Encoding: chunked^M
Connection: keep-alive^M
3、空行
4、返回体
返回的数据结构体,是stream流
这里参考别人文献图 https://blog.csdn.net/tryheart/article/details/107471119
更多网络拓扑基本信息可参考 https://blog.csdn.net/tryheart/article/details/107471119
个人这里总结几点:
我们可以利用抓包脚本抓包或者安装抓包工具(wireshark,fidder)
因为公网IP是不可伪造,可以利用防火墙强制设置出口和入口的就近公网IP
1、终端计算机
终端计算机非常关键,防止终端计算机中毒,电量不足等
2、出口防控
出口防控主要端口限制,更加安全操作有定向访问IP和端口,更加强制安全要求是访问网关,网关安全出口数据格式。在出口数据主要上报安全数据,指定的报文结构数据。端口防火墙开发等各种技术手段防控,防止一些木马程序导致数据安全丢失和不正当的操作导致数据丢失
3、入口防控
入口数据,访问数据授权,防止恶意窃取数据。这里防控主要IP白名单和和名单准入,以及端口开发转入,更多是上报数据报文格式操作。
4、公司对外发布服务的DMZ服务器
DMZ也就是“隔离区”,可地区隔离,局域网隔离,时间隔离,端口隔离等等
5、VPN和类似远程连接设备。
VPN专用虚拟网通道,就是创建一个专用IP通道进行通讯。更多可设计VPC虚拟物理隔离网
【1】HTTP报文的结构
【2】认识网络、几种常用的网络拓扑图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。