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. python基础(12):函数(二)

    1. 函数参数 之前我们说过了传参,如果我们需要给⼀个函数传参,⽽参数⼜是不确定的,或者我给⼀个函数传很多参数,我的形参就要写很多,很⿇烦,怎么办呢,我们可以考虑使⽤动态参数. 形参的第三种: 动态参 ...

  2. Linux软件安装——服务管理

    Linux软件安装——服务管理 摘要:本文主要学习了Linux中有关服务管理的知识. 什么是服务 服务一般是放置在后台运行的一个或多个进分程,为用户或系统提供某项特定的服务,有些是系统服务,有些则是独 ...

  3. jQuery的选择器总结

    jQuery的选择器 不会返回undefined或null 基本选择器 id选择器:$('#id') element选择器:$('elem') class选择器:$('.class') 通配符选择器: ...

  4. querySelectorAll和getElementsByClassName获取元素的区别

    querySelectorAll()方法是HTML5新增的方法,通过传入一个css选择符,返回所有匹配的元素而不仅仅是一个元素.这个方法返回的是一个NodeList的实例.那么它和通过getEleme ...

  5. 彻底解决Python3写爬虫或网站时的乱码问题

    第一次写贴子,试试水 很多玩Python3的都会遇到编码问题,如果直接去处理未知编码的网页,不是Python内部编码格式utf8会出现乱码,下面介绍一种将未知编码的字串转换为utf8来避免乱码的方法, ...

  6. 【LeetCode】437. 路径总和 III

    437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...

  7. Hive优化面试题

    对待像我这种2年开发经验的同学 一般都会被问到. 在面试中,我们只要简短的介绍就好了. 首先低调一波,我可能懂的比你少,我就简单说说 1.在排序中,我们使用的是sortBy,它是基于索引,效率高于or ...

  8. linux用户管理-用户的基本操作

    目录 linux用户管理-用户的基本操作 用户相关的命令 linux用户管理-用户的基本操作 什么是用户 用户指能够正常登录linux或windows系统 区别 本质都是登录系统的,只不过Linux支 ...

  9. centos7中启动tomcat提示bash: tomcat8.0.39/bin/startup.sh: 权限不够

    问题描述: centos7中启动tomcat提示bash: tomcat8.0.39/bin/startup.sh: 权限不够 解决方案:先进入bin目录 [root@localhost/]# cd ...

  10. postman---postman自动发博客

    前面写了一篇如何通过Cookies值去登录博客园,今天我们来通过登录博客园之后,我们进行通过Postman自动写博客 自动写博客 1.打开Postman.填写博客园对应的Cookies: 2.抓取编写 ...