01套按字及http基础知识

简介:

01套按字及http基础知识

                                                                                                    ——以下内容摘自马哥教育课堂


OSI参考模型

资源子网(3)+通信子网(4)

应用层细节  通信细节

用户空间    内核空间


每种用户空间程序有自己的通信协议



进程之间通信如何标记?


MAC设备到设备通信地址

IP主机到主机通信地址


传输层提供进程地址

进程地址通过端口号来提供


tcp传输控制协议,面向连接的协议,通信之前需要建立虚拟链路,通信完成后拆除链路,提供可靠数据流通信协议

udp用户数据报协议,无连接协议


进程如何使用端口号这种地址?

进程要向内核注册申请端口号

dns:udp+tcp

ssh:tcp

http:tcp


内核如何标记一个跨主机通信的进程?通过套接字来标记

套接字是socket,IPC的一种实现机制(还有信号),允许位于不同主机、同一主机上的不同进程之间进行通信,从而完成数据交换


SOCKET API库调用接口——1983年出现在4.2 BSD版本中,后被广泛移植到各种linux版本中


tcp端口号0-65535

udp端口号0-65535(qq通信)

由IANA进行分配

0-1023:特权端口,管理员启动进程才可使用,永久分配给固定的应用使用,22/tcp(ssh),80/tcp(http),443/tcp(https)


1024-41951: 特权端口,亦为注册端口,但要求不严格,比如memcache使用11211/tcp,11211/udp,mysql使用3306/tcp,但如果一个服务器没有启动mysql服务,其他服务占用了3306端口也未尝不可


41952+:客户端程序随机使用的端口。比如浏览器使用随机端口连接web服务80端口,ssh连接服务器端sshd22也是使用随机端口的。其范围的定义:/proc/sys/net/ipv4/ip_local_port_range



用户空间的进程向外通信时,需要向内核注册使用一个TCP端口或者UDP端口或者直接调用IP地址封装报文进行通信。第三种称为裸套接字

SOCK_STREAM:tcp套接字

SOCK_DGRAM:udp套接字

SOCK_RAW:裸套接字


OSI七层模型的思想——模块化设计


ip层:将数据切割成ip报文来通信

ip协议是不可靠,无连接的,但基于TCP协议可以实现可靠传输


MTU最大传输单元——1500字节,是LAN层的封装,所以会包括IP,MAC等封装

而老版本的路由器最多支持500字节的MTU,这样就需要再分片


ipv4分类:

  A:1-127

  B:128-191

  C:192-223

  D:224-239

  E:240-254

  

私有地址

  A:10.0.0.0/8

  B:172.16.0.0/16-172.31.0.0./16

  C:192.168.0.0/24-192.168.255.0/24

  

节点之间通信

发送缓冲---->接收缓冲

接收缓冲<----发送缓冲

内核生成数据比网卡发送数据的速度快,所以需要缓冲



TCP协议特性

①三次握手建立连接

②将数据打包成段并使用CRC-32算法计算出校验和附加到后面

③确认、重传和超时机制

④数据打包成段后需要排序

⑤流量控制,通过滑动窗口算法

⑥拥塞控制:快发慢收会把接受方压垮,所以发送方需要做拥塞控制,采用慢启动方式,拥塞避免算法


socket domain(socket分类)

根据其所用的地址分类

AF_INET:address family ipv4

AF_INET6:IPV6

AF_UNIX:同一主机上不同进程通信,比基于tcp/ip通信效率更高,直接通过内核进行通信而无需封装ip,拆解ip

上述三类每类套接字至少提供了两种socket:流,数据报

流是可靠的传递,面向连接,无报文边界

数据报:不可靠传递、无连接、有报文边界(有边界理解:开始报告,over,请指示这类话称为边界术语)



与套接字相关的系统调用,C程序:

socket():创建socket,向内核申请套接字

bind():进程和套接字绑定

listen():进程监听套接字

accept():接收请求

connect():客户端请求连接建立

write():向一个套接字文件写数据,实现发送数据

read():从一个套接字文件读数据,实现数据接收

  read(),recv(),sendto(),recvfrom()


上面的系统调用如果没有被实现就会阻塞(开party听敲门)





http协议:超文本传输协议


html超文本标记语言开发的文本成为超文本

超文本标记语言格式

<html>

  <head>

    <title>TITLE</title>

  </head>

  <body>

    <h1></h1>

      <p>abcd<a href="http://www.abc.com/logo.jpg">abc</a></p>

    <h2></h2>

  </body>

</html>


CSS:级联样式表

cascading style sheet

js:javascript,浏览器执行的脚本

  网站优化:多个js合并成一个,因为js执行是串行的



HTTP引入MIME才支持图片,mp3,mp4,实现了基于文本传输协议发送非文本数据

MIME:多用途邮件扩展,把非文本编码成文本,并能够还原回来


http监听tcp80端口,基于流式数据完成数据交换

http工作原理:

http实现的主要功能:跨主机发送文档

服务器端存放有一些超文本在磁盘上,客户端使用浏览器可以向服务器申请获取某一文档,这个文档有唯一的标记地址。当服务端收到请求时,先送到内核分析其请求的端口号为80,将其转交给监听此端口的应用程序。web进程收到以后,分析其请求的应用层URL,也就是请求哪个超文本文件。如果存在此文件,则从磁盘上加载此文件,将其封装为html的响应报文通过网络发回客户端。这就是一次http协议通信过程。


http的工作机制:

一个http请求对应一个http响应


服务器上可以被请求称为web资源,web资源有静态资源和动态资源,静态资源有超文本文档,文本文件,图片,jpg,gif,html,txt,js,css,mp3,avi都是静态资源;

动态资源有php页面,jsp页面等,动态资源是不能直接发给客户端,而是应该在服务器端运行以后把运行结果发还给客户端。

比如把"free -m"这行文本直接发给客户端称为静态资源。而把"free -m"的执行结果发给客户端称为动态资源。比如php,jsp。


超文本中媒体资源支持的类型成为MIME类型

主类型/次类型

text/html

text/plain

image/jpeg

image/gif

video/avi


一个网页文件、一张图片都是一个资源,所以一个请求中其实包含了多个资源。例如请求一个网站首页会引用许许多多的资源。一个页面资源可以链接本地资源,也可以链接站外资源。而如果一个页面未经授权就链接了一个站外资源称为盗链,经过授权的称为跨站引用。


如何标记资源——通过URL

URL是URI的子集

URI:统一资源标识符,可以标识互联网上的任意资源

URL: 统一资源定位符,用于描述某服务器上某特定资源的位置

URL的组成部分:

Scheme://server_address:port/path/to/resource

http://www.magedu.com:80/images/logo.jpg


[URN:统一资源命名符]




浏览器F12,进入开发者界面



http协议版本:

HTTP/0.9:原型版本,只支持文本交互,不支持多媒体

HTTP/1.0:第一个被广泛使用的http版本,支持MIME机制

HTTP/1.1:增强了缓存功能

谷歌研发了spdy协议

HTTP/2.0:2002年研发完成,但并没有大规模广泛协议,谷歌也将大力支持,所以不久以后将会流行








本文转自 zhuhc1988 51CTO博客,原文链接:http://blog.51cto.com/changeflyhigh/1890224,如需转载请自行联系原作者
目录
相关文章
|
网络协议
深入理解HTTP的基础知识:请求-响应过程解析
在当今数字化的世界中,理解HTTP协议的基础知识变得至关重要。本文将带您深入探索HTTP的核心概念和请求-响应的过程。HTTP是一种用于在计算机之间传输超文本数据的协议,它不仅定义了数据交换的规则和格式,还为不同的应用程序提供了通信和交换信息的能力。通过深入了解HTTP的请求-响应过程,我们将更好地理解网络通信的基本原理,为构建和优化网络应用打下坚实的基础。
919 2
|
7月前
|
JSON 网络协议 安全
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
【2月更文挑战第3天】《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
152 0
|
5月前
|
JSON 网络协议 安全
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
【7月更文挑战第16天】本文介绍了HTTP和HTTPS协议的基本概念与作用,强调了理解HTTP协议对使用抓包工具Fiddler的重要性。HTTP是用于Web浏览器与服务器间信息传输的协议,不加密,易被截取,不适合传输敏感信息。HTTPS是HTTP的安全版,通过SSL/TLS提供加密和服务器身份验证,确保数据安全。HTTP请求包括请求行、请求头、空行和可选的请求主体,响应则有响应行、响应头、空行和响应主体。HTTP协议无状态,而HTTPS解决了安全性问题,但也带来了额外的计算开销。Fiddler作为一个强大的抓包工具,可以帮助开发者和测试人员分析HTTP/HTTPS通信,理解请求和响应的结构。
89 4
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
|
6月前
|
缓存 网络协议 安全
【常见开源库的二次开发】HTTP之libcurl库——基础知识扫盲(一)
【常见开源库的二次开发】HTTP之libcurl库——基础知识扫盲(一)
103 1
|
7月前
|
安全 网络协议 网络安全
HTTPS基础知识
【5月更文挑战第7天】HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
|
7月前
|
Web App开发 存储 物联网
一文了解 HTTP 基础知识
HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于在网络上传输数据的一种协议,对于网络开发人员来说,理解这一协议是至关重要的。由于其广泛的应用,除了在网页应用传输数据之外,它还被应用于物联网(IoT)中的数据和命令传输。
|
存储 缓存 前端开发
【计算机网络】HTTP/HTTPS协议基础知识汇总
【计算机网络】HTTP/HTTPS协议基础知识汇总
328 1
|
域名解析 Web App开发 存储
HTTP的基础知识和DNS的解析过程
我们都知道现在大部分的B/S 系统。其核心的通讯协议还是 TCP/IP 协议,应用层的话就是HTTP 协议,我们最常的打交到的就是HTTP协议了。所以了解HTTP协议的相关知识显得尤为重要。
2135 0
HTTP的基础知识和DNS的解析过程
|
域名解析 网络协议 大数据
小白必须掌握的几点HTTP协议的基础知识,建议收藏
1.TCP/IP的分层管理 TCP/IP协议族里重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层 应用层: 应用层决定了向用户提供应用服务时通信的活动。 TCP/IP协议族内预存了各类通用的应用服务。比如,FTP(文件传输协议)和DNS(域名系统)服务就是其中两类。HTTP协议也处于该层。
152 1
小白必须掌握的几点HTTP协议的基础知识,建议收藏
|
JSON 前端开发 JavaScript
JavaScript基础知识之脚本化HTTP
JavaScript------脚本化HTTP
131 0