TCP/IP四层模型分为: 应用层,传输层(只关注起点(发送者)和终点(接收者)),网络层(规划出一条或几条路线),数据链路层(关注两个相邻点之间怎么传输)

  协议  
应用层 DNS,URI,HTML,HTTP,SSL,SMTP,POP,IMAPTELNET,SSH,FTP,SNMP 应用程序相关
传输层 TCP,UDP,UDP-Lite,SCTP,DCCP 操作系统内核负责
网络层 ARP,IP,ICMP 操作系统内核负责
数据链路层 网卡层(以太网协议)

设备驱动程序及

网络接口负责


一、应用层:

1、HTTP协议(主要协议):HTTP是超文本传输协议,是当前最流行也是最典型的应用层协议

HTTP还衍生出了封装SSL协议的“安全版”,HTTPS是HTTP协议的安全版,从2015年以后,基本上采用HTTPS,其更为安全,加密

2、HTTP协议的格式

HTTP协议格式又分为其请求和相应模式


请求模式:

1)首行:方法(GET/POST/HEAD/PUT/DELETE/...)+URL+版本号(HTTP1.1为多数场景下)

2) Content-Length 表示body部分的长度(字节)

Content-Type 表示body部分的数据格式

协议头header:请求的属性,每一行都是一个键值对,键和值之间用": "来分割,每组属性之间用\n分隔

User-Agent:表示操作系统和浏览器的型号

  • host 表示客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • Referer表示当前页面是从哪个页面跳转过来的
  • Cookie:用于在客户端存储少量信息. 通常用于实现会话(session)的功能,浏览器存储数据的一种方式(客户端的概念) ,这里面包含身份标识session id内容都是由对应的程序员决定     的,Session是服务器进行描述用户身份信息的方式(服务端的概念)
  • location:搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;

空行:表示header结束的标记

3)body正文:即协议正文,数据种类非常多样了,也可能body为空(GET请求一般为空,POST请求一般有数据)空行后面的内容都是body,body允许为空字符串,如果body存在,则在Header中会有一个


响应模式:

1)首行+状态码(标识这次请求是否失败,以及原因)+状态码描述信息

2)协议头header,每一行是一个冒号分隔的键值对,请求的属性,每组属性之间用\n分隔,遇到空行表示Header结束

3)body:空行后面的内容都是body,body允许为空字符串,如果body存在,则在header中会有一个Content-Length属性会标识Body的长度;

如果服务器返回了一个html页面那么html页面中的内容就是在body中


3、HTTP协议的方法:   

方法 说明 支持的HTTP协议版本
POST 获取资源 1.0,  1.1
GET 传输实体主体 1.0,  1.1
PUT 传输文件 1.0,  1.1
HEAD 获得报文首部 1.0,  1.1
DELETE 删除文件 1.0,  1.1
OPTIONS 询问支持的方法 1.1
TRACE 追踪路径 1.1
CONNECT 要求用隧道协议连接代理 1.1
LINK 建立和资源之间的关系 1.0
UNLICK 断开连接关系 1.0

常用的方法:GET和POST

GET和POST的区别?

GET把数据放在query_string来传输,POST请求通常把数据据通过body来传输

并不是唯一,也可以互放,只是习惯性


4、HTTP的状态码:

  类别 原因短语
1XX Informational(信息性状态码) 接受的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

200 OK 请求成功 2xx表示请求成功

302 重定向                   3xx重定向(呼叫转移)

303 Location:url      重定向到某url

404 not Found表示访问失败(但百度并没有用404而是302)                       4xx都表示客户端开头

403表示没有权限

5xx表示服务器错误

502(服务器挂了)

504超时(服务器响应速度过慢,服务器部署在某云上,带宽过小,卡只是现象,还有cpu,内存问题...cpu占用,带宽占用,内存占用)


cookie和session id的区别:

cookie:存了一个字符串(方便数据永久性存储):客户端里所保存的字符串

session id(大概率放到cookie) 会话id,session对象里面记录某个特定用户的登陆等信息,购买记录,购物车,结算等

会话对象由服务器创建,分配一个session id,再将session id写到浏览器的cookie里面,后续浏览器再访问你相同的网站(区别相同网页,而是网站)的时候,都会带上一个相同的cookie内容,来识别用户信息

(Session是服务器进行描述用户信息的方式(服务器端的概念))

实现Session机制的过程中(程序员手动实现的),通常要把 session id放到cookie中来保存

POST

深入理解TCP/IP应用层的更多相关文章

  1. 【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md

    前言 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API).那TCP/IP又是什么呢?TCP/IP是ISO/OS ...

  2. 结合Wireshark捕获分组深入理解TCP/IP协议栈

    摘要:     本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈.   一.俘获分组 1.1 准 ...

  3. 简单理解TCP/IP协议

    一.什么是TCP/IP TCP/IP是一个协议族,是因为TCP/IP协议包括TCP.IP.UDP.ICMP.RIP.TELNETFTP.SMTP.ARP.TFTP等许多协议,这些协议一起称为TCP/I ...

  4. 深入浅出理解 TCP/IP 协议 (一)

    文章转自:https://www.cnblogs.com/onepixel/p/7092302.html TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入 ...

  5. 理解TCP/IP协议

    TCP/IP协议是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议. 单从TCP/IP协议这个名称看,好多人误 ...

  6. 小故事理解TCP/IP连接时的三次握手

    在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接,示意图如下: 下面通过一个小故事简单理解一下这三次握手的具体含义: 一天,快递员小客(客户端)准备去小服(服务器)家去送快递(准备与服务 ...

  7. 结合Wireshark捕获分组深入理解TCP/IP协议栈之DNS协议

    摘要:     本文简单介绍了DNS协议理论知识,给出URL解析步骤,详细讲述了DNS报文各个字段含义,并从Wireshark俘获分组中选取DNS相关报文进行分析. 一.概述 1.1 DNS      ...

  8. 前端工程师如何理解 TCP/IP 传输层协议?

    网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP/IP网络模型 计算机与网络设备要相 ...

  9. 理解TCP/IP,SOCKET,HTTP,FTP,RMI,RPC,webservic

    TCP/IP:网络宽带,传输数据的基础协议,所有得数据要在网络上传输都是基于TCP/IP协议(或UDP),才能送达到指定的目的地(IP,服务器硬件地址). SOCKET:SOCKET只是面对编程人员的 ...

随机推荐

  1. vue浏览器全屏实现

    1.项目中使用的是sreenfull插件,执行命令安装 npm install --save screenfull 2.安装好后,引入项目,用一个按钮进行控制即可,按钮方法如下: toggleFull ...

  2. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  3. linux内核 mtd分区

    首先 内核配置需要打开MTD选项 Memory Technology Devices (MTD) ---> 如果是NOR Flash,需要选择Common Flash Interface (CF ...

  4. Xcode修改工程文件名字

    http://stackoverflow.com/questions/8262613/renaming-xcode-4-project-and-the-actual-folder

  5. Python用openpyxl读写Excel

    openpyxl是一个用于读写Excel 2010 xlsx文件的python库.openpyxl官方文档:https://openpyxl.readthedocs.io/en/stable/ 一.安 ...

  6. Spark的Monitoring

    一.启动历史页面监控配置: $ vi spark-defaults.conf spark.eventLog.enabled true spark.eventLog.dir hdfs://hadoop0 ...

  7. MongoDB 副本集丢失数据的测试

    在MongoDB副本集的测试中发现了一个丢数据的案例. 1. 概要描述 测试场景为:一主一从一验证 测试案例 step1 :关闭从副本: step 2 :向主副本中插入那条数据: step 3 :关闭 ...

  8. SQL Server阻塞的检查

    1. 阻塞   除了内存.CPU.I/O这些系统资源以外,阻塞和死锁是影响数据库应用性能的另一大因素. 所谓的「阻塞」,是指当一个数据库会话中的事务,正在锁定其他会话事务想要读取或修改的资源,造成这些 ...

  9. UGUI Manual

    以Unity 5.5 的官方文档为例 Canvas UI元素的前后顺序:SetAsFirstSibling, SetAsLastSibling, and SetSiblingIndex BasicLa ...

  10. ACM-ICPC 2018 焦作网络赛

    题目顺序:A F G H I K L 做题链接 A. Magic Mirror 题意:判断 给出的 字符串 是否等于"jessie",需要判断大小写 题解:1.用stl库 tolo ...