TCP的三次握手
四次挥手
应用层协议 – DNS域名解析
在浏览器键入URL后执行的全过程
TCP头和UDP头
TCP和UDP的区别
SYN攻击)">如何防止TCP泛洪攻击?(大量的半连接状态,特别是源IP地址是随机的->SYN攻击)
ping是通过什么协议实现的?
如何实现UDP的可靠传输?
HTTP响应报文格式
HTTP方法
HTTP状态码
长连接与短连接
HTTPS是如何建立连接的?其间交互了什么?
Session的工作原理
流量控制:
TCP可靠传输的实现
五层模型
TCP的三次握手
假设A为客户端,B为服务器端。
- 首先B处于LISTEN(监听)状态, 等待客户的连接请求。
- 第一次握手:A向B发送连接请求报文,SYN=1,选择一个初始的序号x,并进入SYN_SENT(同步已发送)状态,等待服务器确认。SYN:同步序列编号。
- 第二次握手:B收到连接请求报文,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1,确认号(ack)为x+1,同时也选择一个初始的序号y。此时服务器进入SYN_RECV(同步接收)状态。
- 第三次握手:A收到B的连接确认报文后,还要向B发出确认,确认号为y+1,序列号为x+1。B收到A的确认后,连接建立,客户端和服务器进入ESTAB_LISHED(已建立连接)状态。
三次握手的原因
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
四次挥手TCP连接的释放一共需要四步,因此称为『四次挥手』。
我们知道,TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。
第一次挥手
若A认为数据发送完成,则它需要向B发送连接释放请求。该请求只有报文头,头中携带的主要参数为:
FIN=1,序列号seq=u。此时,A将进入FIN-WAIT-1状态。
第二次挥手
B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放。此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含:
ACK=1,seq=v,ack=u+1。
- PS1:ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
- PS2:seq=v,v-1是B向A发送的最后一个字节的序号。
- PS3:ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节。
A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求。
第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。
第三次挥手
当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。B便进入LAST-ACK状态。
第四次挥手
A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB。
为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态?
为了保证B能收到A的确认应答。
若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。
应用层协议 – DNS域名解析面试汇总(四):计算机网络常见面试总结(二)_Oliverfly1的博客-CSDN博客
域名解析过程:
(1)浏览器搜索自己的DNS缓存,缓存中维护了一张域名和IP地址的对应表
(2)若没有则搜索 *** 作系统的DNS缓存
(3)若没有则 *** 作系统将域名发送到本地域名服务器,本地域名服务器在自己的DNS缓存查找(递归查询)
(4)若没有则通过以下方式查找(递归查询/迭代查询)
- 本地域名服务器向根域名服务器发送请求,根域名服务器返回某一顶级服务器(如.com、.cn、.org)域名地址
- 本地域名服务器向com域顶级域名发送请求,com域顶级域名服务器返回权限域名服务器地址
- 本地域名服务器向权限域名服务器发送请求,得到IP地址
(5)本地域名将得到的IP地址返回 *** 作系统,同时自己也将IP地址缓存起来
(6) *** 作系统得到IP地址返回给浏览器,同时自己也将IP地址缓存起来
(7)浏览器得到IP地址
在浏览器键入URL后执行的全过程- 解析DNS
浏览器根据url查询对应的IP地址,分别查询浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存,查到即直接返回
- TCP连接
与服务器进行三次握手,建立tcp连接
- 发送HTTP请求
浏览器发送http请求给服务器
- 服务器处理请求并返回HTTP响应报文
- 浏览器解析渲染页面
- 连接结束
四次挥手,浏览器释放tcp连接
说法二:
(1)应用层,通过DNS进行域名解析出IP地址,并发送HTTP请求
(2)传输层,为了传输方便,传输层选择协议(TCP协议或者UDP协议)对从应用层收到的数据(HTTP请求报文)进行封装(对收到的数据进行分割,并在各个报文上打上标记序号及端口号)后转发给网络层。
(3)网络层,通过IP协议将IP地址封装为IP数据报,此时会使用ARP协议主机发送信息时会将包含目标IP地址信息ARP请求广播到网络上所有的主机,并接受返回消息,以此确定目标的物理地址,找到目的的MAC地址
(4)把网络层交下来的IP数据添加首部和尾部,封装为MAC帧,根据目的MAC地址建立TCP连接(三次握手)
(5)物理层,数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
说法三:
面试汇总(四):计算机网络常见面试总结(二)_Oliverfly1的博客-CSDN博客
浏览器中输入URL: 浏览器要将URL解析为IP地址,解析域名就要用到DNS协议,首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议。
得到IP地址后,浏览器就要与服务器建立一个http连接。因此要用到http协议,http协议报文格式上面已经提到。http生成一个get请求报文,将该报文传给TCP层处理,所以还会用到TCP协议。如果采用https还会使用https协议先对http数据进行加密。TCP层如果有需要先将HTTP数据包分片,分片依据路径MTU和MSS。TCP的数据包然后会发送给IP层,用到IP协议。IP层通过路由选路,一跳一跳发送到目的地址。当然在一个网段内的寻址是通过以太网协议实现(也可以是其他物理层协议,比如PPP,SLIP),以太网协议需要直到目的IP地址的物理地址,又需要ARP协议。
作用:
- 应用层是体系结构中的最高层。
- 传输层的任务就是负责主机中两个进程之间的通信。
- 网络层负责为分组交换网上的不同主机提供通信。
- 数据链路层的任务是将在网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送以帧为单位的数据。
- 物理层的任务就是透明地传送比特流。
- TCP头(定长20字节)
- 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;
- 32位序号/32位确认号: 不一定从0开始(作用:保证确认应答;保证数据按序到达;去重)
- 4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP报头最大长度是15 * 4 = 60 字节
- 6位标志位:
URG: 紧急指针是否有效
ACK: 确认号是否有效
PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
- 16位窗口大小: 接收缓冲区剩余的空间大小
- 16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP 首部, 也包含TCP数据部分.
- 16位紧急指针: 标识哪部分数据是紧急数据;
2.UDP头(8字节)
- 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度;
- 如果校验和出错,就会直接丢弃。
TCP(Transmission Control Protocol,传输控制协议)
UDP(User Data Protocol,用户数据报协议)
- TCP是面向连接的,UDP是无连接的;
- TCP可靠服务。通过TCP连接传送的数据、无差错、不丢失、不重复且按序到达->适合大数据量的交换,UDP尽最大努力交付。即不保证可靠传输交付;
- TCP面向字节流,UDP面向报文。并且网络出现拥塞不会使得发送速率降低(因此会出现丢包对实时的应用比如IP电话和视频会议等);
- TCP只能是点对点的,UDP支持1对1,1对多;
- TCP的首部较大,为20字节,UDP只有8字节;
- TCP保证数据顺序,UDP不保证数据顺序;
- TCP对系统资源的要求比较多,UDP资源少,处理快。
防范措施:
- 降低SYN-timeout时间,使得主机尽快释放半连接状态
- 采用SYN cookie设置,如果短时间内收到某个IP的重复SYN请求,则认为收到了该IP的攻击,丢弃来自该IP的后续请求报文
- 在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由
ICMP
如何实现UDP的可靠传输?- 传输层无法保证数据的可靠传输,只能通过应用层(超时重传、滑动窗口)来实现
- 开源程序:RUDP、RTP、UDP
http的优缺点:优点:无状态、明文传输
缺点:不安全
HTTP响应报文格式 HTTP方法
- GET:获取资源,在网络请求中,绝大部分使用的是GET方法
- HEAD:获取报文首部,主要用于确认URL的有效性以及资源更新的日期等。
- POST:传输实体主体,POST主要用于传输数据,而GET主要用于获取数据
- PUT:上传文件,由于自身布袋验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用此方法。
- DELETE:删除文件,与PUT功能相反,并且同样不带验证机制。
- CONNECT:要求与代理服务器通信时建立隧道,使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
- 100:表明响应正常,客户端应继续执行后续 *** 作。
- 200:正常处理请求并相应
- 3XX:重定向,资源位置发生变动,需要客户端重新发送请求。
- 301:永久性重定向,请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。
- 302:临时性重定向,与301类似。但资源只是临时被移动。客户端应继续使用原有URI
- 304:未修改。表示请求的资源为修改,应该直接从浏览器缓存中取数据。
- 4XX:客户端错误
- 400:请求报文中存在语法错误
- 403:请求被拒绝
- 404:Not Found,不存在页面
- 5XX:服务器错误
- 500:服务器内部错误
- 503:服务器暂时出于超负荷或正在进行停机维护,现在无法处理请求
长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。
- 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;
- 在 HTTP/1.0 默认是短连接的,如果需要使用长连接,则使用 Connection : Keep-Alive。
HTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使得它能够处理大量事务。HTTP/1.1 引入 cookie 来保存状态信息。
cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。
用途
- 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
- 个性化设置(如用户自定义设置、主题等)
- 浏览器行为跟踪(如跟踪分析用户行为等)
- 首先建立TCP连接:三次握手
- 然后建立SSL/TLS连接
- 发送HTTP请求
- 写入Session列表
- 服务器生成并发送cookie
- 客户端接收并发送cookie
- 从Session列表中查找
cookie作用于客户端,Session作用于服务器端
cookie包含键 Session包含session id
流量控制:- 停止等待协议(超时重传)
- 滑动窗口协议(位于发送窗口内的分组都可连续发送出去,而不需等待对方的确认)
- 累积确认:序号、窗口大小、序号累加索引不同
- 以字节为单位的滑动窗口
- 超时重传的选择
- 选择确认SACK
拥塞控制:
- 慢开始 、拥塞避免、快重传、快恢复
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)