HTTP、TCP网络协议知识整理

git原文不定期更新地址:https://gitee.com/H_david/interview-record/tree/master/src/need_learn/theoretical_knowledge/Http

TCP/IP四层网络模型

TCP/IP简介

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在对各不同网络间实现信息传输的协议簇。
TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个有FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议
最具代表性,所以称为TCP/IP协议。
TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按照不同应用要求与方式将数据传输至传输层
;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中
数据包的传送等;而网络接口层,也叫网络访问层或数据链路层, 主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通讯媒介有关信息细节问题进行有效处理等。TCP-IP协议体系结构

HTTP和TCP有啥关系

协议层关系

TCP/IP4层模型从上至下每一层都依赖其底层协议,HTTP协议处于应用层,依赖于传输层,应用层的协议操作成功的前提是运输层的存在。
HTTP协议的责任是定义数据,在两台计算机相互传输信息时,HTTP规定了每段数据以什么形式表达才能够被另一台计算机理解。
TCP协议规定了数据应该怎么传输才能稳定且高效的传递于计算机之间。

HTTP

HTTP简介

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP返回码

1XX: 请求正在处理
2XX: 请求正常处理完毕
3XX: 重定向(表明服务器需要执行特殊处理)
4XX: 客户端错误(400 bad request:请求报文存在语法错我;401:HTTP认证未通过;402:资源访问被拒绝;404:没找到资源)
5XX: 服务器错误(500:服务器执行请求时发生错误;501服务器不支持当前请求所需要的某个功能;503:服务器暂时处于超负荷或正在停机维护,无法处理请求。

HTTPS与HTTP的区别

1、HTTPS协议需要到CA申请证书,HTTP协议不需要
2、HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的SSL加密传输协议
3、HTTP的连接是无状态的,HTTPS协议是由SSL加HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全
4、HTTP使用80端口,HTTPS 使用443端口

get和POST的区别

1、数据位置,get请求中参数数据被放在url中,可以被用户看到,相对而言post的操作对用户是不可见的,相对安全
2、数据大小限制,get请求的url中数据最多2048字节,post请求没有限制
3、GET请求产生一个TCP数据包;POST请求产生两个TCP数据包
4、浏览器回退刷新时,get无害,post会再次提交请求

TCP&UDP

TCP和UDP都是传输层的传输协议

UDP

优点:简单、传输快

缺点:不可靠、不稳定

TCP

优点:可靠稳定

缺点:传输速度慢、效率低、占用系统资源高

TCP和UDP区别,各自的应用场景

区别

是否基于链接

TCP是面向连接的协议,发送数据之前需要建立连接;而UDP是无连接的协议,即发送数据之前不需要简历连接。

可靠性和有序性区别

TCP提供交付保证,(TCP通过校验和重传控制,序号表示,滑动窗口,确认应答实现可靠传输),无差错,不丢失,不重复,且按续到达,也保证了消息的有序性。
该消息将以从服务端发出的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的,TCP协议将会为你排好序。
UDP不提供审核有序性或许流行的保证。UDP尽最大努力交付,数据包将以任何可能的顺序到达。TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

实时性

UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高要求的通信或广播通信。

协议首部大小

TCP首部开销20字节,UDP首部开销小,只有8个字节。

运行速度

TCP运行速度慢,而UDP速度比较快,因为TCP必须创建链接,以保证消息的可靠交付和有序性,毕竟TCP协议比UDP复杂。

应用

每一条TCP连接只能是点到点的,UDP支持一对一,-对多,多对一和多对多的交互通信。 基于UDP不需要建立连接,所以适合多播的环境中,UDP是大量使用在游戏和娱乐场所。

TCP连接

TCP连接简介

一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段,连接、数据传输、关闭。通过三次握手来建立一个链接
,通过四次挥手来关闭一个连接。当一个链接被建立或被终止时,交换的报文段只包含TCP头部,而没有数据。

TCP连接序号及标志位

1、序号:seq序号,占32位,用来标识从TCP源端向目标端发送的字节流,发送方发送数据时对此进行标记
2、确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1.
3、标志位:共6个,即SYN、FIN、RST、ACK、PSH、URG等具体含义如下:

SYN: 发起一个了连接
FIN:释放一个连接
RST: 重置连接
ACK:确认序号有效
PSH:接收方应尽快将这个报文交给应用层
URG:紧急指针有效
注:不要将确认序号ack与标志位中的ACK搞混了;确认放ack=发起方seq+1,两端配对

TCP三次握手

TCP连接三次握手)

为什么要有三次握手

TCP是面向连接的传输协议,三次握手的本质是双方互相确认对方的收发数据的能力,保证传输正常进行
第一次握手,客户端发给服务器,服务器收到了,服务器知道自己的接受能力和客户端的发送数据的能力没问题
第二次握手,服务端给客户端回信,客户端收到后,可知客户端的收信能力,和服务端的发信能力没有问题
第三次握手,(此时服务端不知道自己的发件能力,和客户端的收件能力)客户端最后反馈一次,如果服务器收到了,服务器便可以确认自己的发件能力和客户端的收件能力没问题。

三次握手详解

1、第一次握手:客户端要向服务端发起连接请求,首先客户端随机生成一个起始蓄力好ISN(比如是100),那客户算向服务端发送的报文段包含SYN标志位(SYN=1),序列号seq=100.
2、第二次握手:服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的起始序号100存起来,并且随机生成一个服务端的其实序列号(比如是300)
然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号=300、确认号ack=101(客户端发送过来的序列号+1)
3、第三次握手:客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已经收到了序列号为100的那段报文;同事发现SYN=1,知道了服务端同意了这次连接,于是就将服务端的序列号300给
存下来。然后客户端再回复一短报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务短序列号+1)、seq=101(第一次握手时发送报文是占据一个序列号的,所以这次seq就从101开始,需要注意的是不携带数据的ACK报文是
不占据序列号的,所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK=1并且ack=301,就知道客户端收到序列号为300的报文了,就这样客户端和服务端都知道了双方收发数据的能力,通过TCP建立了连接。

TCP四次挥手

TCP连接四次挥手

TCP四次挥手详解

四次挥手的目的是关闭一个连接
比如客户端初始化的序列号ISA=100,服务端初始化的序列号ISA=300.TCP连接成功后客户端总共发送了1000个字节的数据,服务端在客户端发FIN报文前总共恢复了2000个字节的数据。
1、第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、
序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常接收数据;另外FIN报文段即使不懈怠数据也要占据一个序列号。
2、第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACL标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号+1)、序列号seq=2300(300+2000)。此时
服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。
3、第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出链接释放保温,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样acl=1103、序列号seq=2350(2300+50)。
4:第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号=1102.注意客户端发出确认报文后不是立马释放TCP连接
,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP链接的时间要比客户端早一些。

常见面试题

浏览器点击一个URL后是经过了哪些过程才能看到查找结果。

1、DNS解析,得到服务器IP地址
2、解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接
3、浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器
4、服务器对浏览器请求做出相应,并把对应的html文本发送给浏览器;
5、释放TCP链接(四次回收断开连接)
6、浏览器将该html文本解析并显示内容

DNS是什么?

DNS是应用层中的一种组织成域层次结构的计算机和网络服务命名系统, 用于TCP/IP网络,所提供的服务是用来将主机名和域名转换成IP地址的工作。

DNS解析过程:

主机查询DNS缓存,如果没有查到就会给本地DNS发送查询请求;
本地的DNS服务器向根域名服务器发送查询请求,根域名服务器返回该域名的一级域名服务器;
本地DNS服务器给该一级域名服务器发送查询请求,然后依次类推知道查询到该域名的IP地址;然后存入本地DNS缓存

浏览器点击一个URL的过程用到哪些协议

域名解析要用到DNS协议;DNS服务器是基于UDP的,因此会用到UDP协议;得到IP地址后,浏览器就要与服务器建立一个http链接,会用到HTTP协议
http生成一个GET请求报文,将该报文传给TCP层处理,所以会用到TCP协议;如果采用https还会使用HTTPS协议先对http数据进行加密;TCP层如果
有需要先将HTTP数据包分片,分片依据路径MTU和MSS,TCP的数据包然后会发送给IP层,用到IP协议;IP层通过路由选择,发送到目的地址;当然在一个网
段内的寻址是通过以太网协议实现(也可以是其他物理岑协议,比如PPP,SLIP),以太网协议需要知道目的IP地址的物理地址,所以需要用到ARP协议。

用到哪些层?每层是干什么的?

应用层的 DNS协议、HTTP协议、HTTPS协议

应用层是体系结构中的最高层。应用层确定进程之间通信的性质以满足用户的需要。这里说到的进程就是指正在运行的程序,应用层不仅要提供应用进程所需要的
信息交换和远程操作,还要作为弧线作用的应用进程的用户带来,来完成一些为进程语义上有意义的信息交换所必须的功能。应用层直接为用户的应用进程提供服务。

传输层 TCP/UDP协议

传输层的任务就是负责之间中两个进程之间的通信。银天然忘得传输层可使用两种不同的协议;即面向连接的传输控制协议TCP,和无连接的用户数据报协议UDP。
面向连接的服务能够提供可靠的交付,他只是”尽最大努力交付“。这两种协议都很有用,各有优缺点。

网络层 IP、ARP协议

网络层负责为分组交换网上的不同主机提供通信能力。在发送数据时,网络层将传输层产生的报文段或用户数据报封装成分组或者包进行传送。在TCP、IP体系中,分组也叫IP数据包,或者简称为数据报。
网络层的另一个任务就是要选择合适的路由,是原著据传输层所传下来的分组能够交付到目的主机。

数据链路层

当发送数据时,数据链路层的任务是将在网络层叫下来的IP数据报组装成帧,在两个相邻节点的链路上传送以帧为单位的数据。每一帧包含数据和必要的控制信息(如同步信息、地址信息、差错控制
以及流量控制等信息)。控制信息是接收端能够知道一个帧从那个比特开始和到那个比特结束。控制信息还使接收端能够检测到所受到的帧中有没有差错。

物理层

物理层的任务就是透明的传输比特流。在物理层上所传输的数据的单位就是比特。传输信息所利用的一些物理媒介,如双绞线、同轴电缆、光缆等,并不是在物理层之内而是在物理层的小面。因此也有人把物理媒体当做第0层。

为什么TCP链接的时候是3次而不是两次?

TCP的可靠连接是靠seq 序列号来达成的,三次握手才可以同步序列号,两次握手不能保证收发双方序列号一致
防止失效的连接请求报文段被服务端接收,从而产生错误
三次握手才可以同步双方的序列号(序列号可以取出重复数据,接收方可以按照数据包的序列号顺序接受数据,可以标识哪些是已被对方接收的数据)
三次握手才可以避免资源浪费

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值