TCP/IP 协议分层模型

  • 物理层将二进制的0和1和电压高低,光的闪灭和电波的强弱信号进行转换
  • 链路层代表驱动
  • 网络层
    • 使用 IP 协议,IP 协议基于 IP 转发分包数据
    • IP 协议是个不可靠协议,不会重发
    • IP 协议发送失败会使用ICMP 协议通知失败
    • ARP 解析 IP 中的 MAC 地址,MAC 地址由网卡出厂提供
    • IP 还隐含链路层的功能,不管双方底层的链路层是啥,都能通信
  • 传输层
    • 通用的 TCP 和 UDP 协议

      • TCP 协议面向有连接,能正确处理丢包,传输顺序错乱的问题,但是为了建立与断开连接,需要至少7次的发包收包,资源浪费
      • UDP 面向无连接,不管对方有没有收到,如果要得到通知,需要通过应用层
  • 会话层以上分层
    • TCP/IP 分层中,会话层,表示层,应用层集中在一起
    • 网络管理通过 SNMP 协议

TCP三次握手和四次挥手

三次握手:

  • 客户端–发送带有SYN标志的数据包–一次握手–服务端
  • 服务端–发送带有SYN/ACK标志的数据包–二次握手–客户端
  • 客户端–发送带有带有ACK标志的数据包–三次握手–服务端

四次挥手:

  • 客户端-发送一个FIN,用来关闭客户端到服务器的数据传送
  • 服务器-收到这个FIN,它发回一个ACK,确认序号为收到的序号加1 。和SYN一样,一个FIN将占用一个序号
  • 服务器-关闭与客户端的连接,发送一个FIN给客户端
  • 客户端-发回ACK报文确认,并将确认序号设置为收到序号加1

HTTP(HyperText Transfer Protocol)

Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。

所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。

http传输流

发送端在层与层间传输数据时,没经过一层都会被加上首部信息,接收端每经过一层都会删除一条首部

状态码

2XX 成功

  • 200 OK,表示从客户端发来的请求在服务器端被正确处理
  • 204 No content,表示请求成功,但响应报文不含实体的主体部分
  • 206 Partial Content,进行范围请求

3XX 重定向

  • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
  • 302 found,临时性重定向,表示资源临时被分配了新的 URL
  • 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
  • 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
  • 307 temporary redirect,临时重定向,和302含义相同

4XX 客户端错误

  • 400 bad request,请求报文存在语法错误
  • 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
  • 403 forbidden,表示对请求资源的访问被服务器拒绝
  • 404 not found,表示在服务器上没有找到请求的资源

5XX 服务器错误

  • 500 internal sever error,表示服务器端在执行请求时发生了错误
  • 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

HTTP协议格式?

HTTP的请求和响应的消息协议是一样的,分为三个部分,起始行、消息头和消息体。这三个部分以CRLF作为分隔符。最后一个消息头有两个CRLF,用来表示消息头部的结束。

HTTP请求的起始行称为请求行,形如GET /index.html HTTP/1.1

HTTP响应的起始行称为状态行,形如200 ok

消息头部有很多键值对组成,多个键值对之间使用CRLF作为分隔符,也可以完全没有键值对。形如Content-Encoding: gzip 消息体是一个字符串,字符串的长度是由消息头部的Content-Length键指定的。如果没有Content-Length字段说明没有消息体,譬如GET请求就是没有消息体的,POST请求的消息体一般用来放置表单数据。GET请求的响应返回的页面内容也是放在消息体里面的。我们平时调用API返回的JSON内容都是放在消息体里面的。

HTTP的无状态性?

所谓HTTP协议的无状态性是指服务器的协议层无需为不同的请求之间建立任何相关关系,它特指的是协议层的无状态性。但是这并不代表建立在HTTP协议之上的应用程序就无法维持状态。应用层可以通过会话Session来跟踪用户请求之间的相关性,服务器会为每个会话对象绑定一个唯一的会话ID,浏览器可以将会话ID记录在本地缓存LocalStorage或者Cookie,在后续的请求都带上这个会话ID,服务器就可以为每个请求找到相应的会话状态。

输入url到页面加载都发生了什么事情?

  • 输入地址
  • 浏览器查找域名的 IP 地址 这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存...
  • 浏览器向 web 服务器发送一个 HTTP 请求
  • 服务器的永久重定向响应(从 http://example.com 到 http://www.example.com)
  • 浏览器跟踪重定向地址
  • 服务器处理请求
  • 服务器返回一个 HTTP 响应
  • 浏览器显示 HTML
  • 浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)
  • . 浏览器发送异步请求

转载于:https://www.cnblogs.com/anly95/p/9218088.html

关于tcp、http可能你想知道的那些事相关推荐

  1. 老板要先想明白三件事

    老板要先想明白三件事:我们想做什么?我们可做什么?我们能做什么?   想做什么:就是你的使命.愿景和价值观,与客户需求结合之后的结果.想做什么主要取决于你为用户创造了什么价值,你能改变什么样的现状. ...

  2. tcp协议用来提供什么服务器,关于TCP协议,我想你应该懂了!

    TCP是什么?程序员 TCP(Transmission Control Protocol 传输控制协议)是一种面向链接(链接导向)的.可靠的. 基于IP的传输层协议.TCP在IP报文的协议号是6.TC ...

  3. TCP/IP网络创想

    很想深入理解TCP/IP,想阅读内核源码,但是不知道阅读源代码有什么用? 如果真的只是开发,可能搞清楚API或许就好了,为什么要阅读源代码呢? 若要想排查问题的时候有帮助,熟悉机制就好,为什么要阅读源 ...

  4. SAP License:SAP ECC6安装系列三:关于SAP你也许想知道的一些事

    前段时间刚好赶上 Windows 10 预览版发布,折腾了几天,这一系列写的慢了,现在继续,争取尽快写完. 好了,现在我们准备好开始安装 SAP 软件了. 这货真是一个很大的软件 首先不得不说的是,对 ...

  5. Google Alerts 使用指南 | 这个服务,帮你知道互联网上你想知道的各种事

    每个人都有信息收集的需求,每天互联网上都会产生海量的信息,如何快速.即时.高效的获取这些信息成为了问题. 核心需求是「快速」.「即时」.「高效」 今天,我想为你介绍一款来自 Google 的工具,帮助 ...

  6. 一个研三女人想告诉后辈的事!

    [序] 两年零五个月前的一天,也就是2008年4月22日,研究生入学考试的复试完毕,站在外国语学院的公告栏前,看到录取名单里写着的第一个名字--是我的名字,再一遍遍地确认公告的题头是录取名单没错,于是 ...

  7. 25岁的年轻人,要想清两件事

    从清华毕业,我只拿到了微软研究院的offer,便去那里上班了.我的老板是贝尔实验室来的科学家宋老师,从第一天起,他就告诉我:某个工程问题快速进展的关键,是清晰地定义了目标函数.当时,我对这句话一知半解 ...

  8. 淘宝二面,面试官居然把TCP三次握手问的这么详细

    TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...

  9. 下列哪个不是目前python里的内置模块-不吹不擂,你想要的Python面试都在这里了【315+道题】...

    有缘人如果看到这些题,不妨留言一下答案,来证明下你到底有多水,哈哈哈哈哈哈哈哈哈哈哈 第一部分 Python基础篇(80题) 1.为什么学习Python? 2.通过什么途径学习的Python? 3.P ...

最新文章

  1. 从数据类型 nvarchar 转换为 bigint 时出错_JavaScript数据类型的一些细节点
  2. Nature:将光计算与AI推理整合,实现高速高带宽低功耗AI计算
  3. windows 注册表讲解
  4. UITableView中发现的小技巧(不断更新)
  5. 规格上下限和控制上下限计算_涡街流量计选型时对测量上下限的考虑
  6. Android系统服务
  7. java邮件发送api文件,JavaMail API 发送一个HTML电子邮件
  8. [ZJOI2012]数列
  9. 苹果之父乔布斯:我是如何东山再起的
  10. u盘虚拟启动cd linux,[CDLinux]制作U盘CDLinux系统启动盘
  11. java sqrt函数源码_Java sqrt源码解析
  12. 百度、谷歌高德等网络地图经纬度偏差纠正以及相关坐标系问题
  13. android 仿QQ表情,长按查看动图,移动手指可切换图片
  14. 3 Linux虚拟机创建修改删除文件和文件夹
  15. 使用c#建立奥运奖牌榜
  16. 2022.1.9 力扣-周赛-统计追加字母可以获得的单词数
  17. 京东商品数据数据爬取
  18. Java的链式编程(支持lombok)
  19. python回车换行怎么不行_python回车不能换行怎么办
  20. python写音乐播放器_AJ Kipper:用Python写一个简易的MP3播放器

热门文章

  1. I00031 Look-and-say sequence
  2. Java算法试题--猜字母/杀人游戏
  3. Poj 2887-Big String Splay
  4. office365为新建账号发送欢迎邮件
  5. myeclipse8.6安装svn
  6. 首款移动社交购物平台“商宝”上线发布
  7. 防止IFRAME页被嵌套
  8. wxPython的API下载
  9. 配置MOSS的FBA步骤与问题(发现设置权限策略的里选人不好用,选不到Provider的人)...
  10. Linux(Contos7.5)环境搭建之Gitblit安装(三)