赞
踩
①TCP采用发送应答机制+序列号,即发送端发送的每个TCP报文段都必须得到接收方的应答后 才认为TCP报文段传输成功。TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
②TCP还具有超时重传机制,当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
③ TCP还提供流量控制和拥塞控制,防止过多的数据注入到网路中,缓解压力。
流量控制
就是让发送方的发送速率不要过快,好让接收方有能力进行接收。利用TCP报文段中的窗口大小字段可以控制发送方的发送窗口不大于接收方的接受窗口进而实现流量控制。
TCP连接的每一方都有固定大小的缓冲空间,接收端只允发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率。TCP使用的流量控制协议是可变大小的滑动窗口协议。接收方有即时窗口(滑动窗口),随ACK报文发送。
拥塞控制
防止过多的数据注入网络,造成网络拥塞。
发送方有拥塞窗口,发送数据前比对接收方发过来的即时窗口,取小
算法: 慢启动、拥塞避免、快速重传、快速恢复
因为UDP是无连接的协议,所以在传输层上无法保证可靠传输,要想实现可靠传输,只能从应用层实现。需要实现seq/ack机制,重传机制和窗口确认机制。
要求接收方收到UDP之后回复个确认包,发送方有个机制,收不到确认包就要重新发送,每个包有递增的序号,接收方发现中间丢了包就要发重传请求,当网络太差时候频繁丢包,防止越丢包越重传的恶性循环,要有个发送窗口的限制,发送窗口的大小根据网络传输情况调整。
三次握手
第一次握手:首先客户端给服务器发送连接请求报文,在这个报文中,包含了标志位SYN=1,确认位ACK=0,客户端的初始化序列号值seq = 任意值x,发送之后客户端进入SYN-SENT(同步已发送)状态,等待服务器确认,这是第一次握手
第二次握手:服务器收到数据包后,由标志位SYN = 1知道这是客户端请求建立连接,服务器如果确认连接就会发送确认报文,这个报文中标志位SYN和ACK都为 1,确认号ack为 x +1,服务器产生一个自己的初始化序列号值Seq = y 此时服务器进入SYN-RCVD(同步已接受)状态,这是第二次握手
第三次握手:客户端收到服务器发来的确认报文,里面的确认号ack是x +1,这时他知道了服务器收到了消息,也给服务器回一个ACK报文,报文中同样包含了ACK=1,同时呢,还包括了客户端ack = y + 1这样的字段,这样三次握手之后,连接就建立了,客户端进入established(已建立连接)状态
四次挥手断开连接:
TCP断开连接通常是由一方主动,一方被动的,这里我们假设客户端主动,服务端被动
第一次挥手:当客户端没有数据要发送给服务端了,他会给服务端发送一个FIN报文,告诉服务端:“我已经没有数据要发给你了,但是你还可以继续给我发数据,不过你得告诉我你收到我的关闭信息了”,这是第一次挥手,挥手之后客户端进入FIN_WAIT_1的第一阶段
第二次挥手:当服务端收到FIN报文后,给客户端返回一个ACK信息,告诉客户端:“我收到你的FIN消息了,但是你等我发完”,并且呢ack = seq + 1,这是第二次挥手,挥手之后呢服务端进入CLOSE_WAIT阶段,而客户端收到之后进入FIN_WAIT_2第二阶段
第三次挥手:当服务端发完所有数据时,它会给客户端发送一个FIN报文,告诉客户端说“我传完数据了,现在要关闭连接了”,然后呢服务端变成LAST_ACK状态,等着客户端最后的ACK确认,这是第三次挥手
第四次挥手:当客户端收到这个FIN报文时,会给服务端发ACK信息,但是它不相信网络,怕服务端收不到信息,它会进入TIME_WAIT状态,万一服务端没收到ACK消息它可以重传,而当服务端收到这个ACK信息后,就进入CLOSED状态,正式关闭了tcp连接。而客户端等待了2倍的最大段生存期(2MSL)后还没收到服务端发送的请求的话,客户端也进入CLOSED状态。这是第四次挥手,至此tcp连接全部断开。
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开多个无效连接。
虽然按道理,四个报文都发送完毕,可以直接进入CLOSE状态了,但是我们必须假想网络是不可靠的,最后一个ACK信息可能会丢失。站在服务器的角度看来,我已经发送了FIN报文请求断开连接,客户端却没有给我回应,应该是我发送的报文它没有收到,于是服务器又会重新发送一次,所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
建立TCP服务器连接的过程中主要通过以下系统调用序列来获取某些函数,这些系统调用主要包括:
socket() 创建套接字
bind() 绑定本机端口
connect() 建立连接 (TCP三次握手在调用这个函数时进行)
listen() 监听端口
accept() 接受连接
recv(), read() 数据接收
send(), write() 数据发送
close(), shutdown() 关闭套接字
使用close()时,只有当套接字的引用计数为0的时候才会终止连接,而用shutdown()就可以直接关闭连接
因为在链路层中帧的大小通常都有限制,比如在以太网中帧的最大大小(MTU)就是1500字节。如果IP数据包加上头部后大小超过1500字节,就需要分片。
接收方会在每个ACK数据包中附带自己当前的接受窗口(滑动窗口)的大小,方便发送方进行控制。
拥塞控制是为了防止过多的数据注入到网络中,造成网络拥塞。发送端拥有一个拥塞窗口,在发送数据前会对比接收方的滑动窗口大小,取较小值。
拥塞控制有四种算法,慢启动、拥塞避免,快速重传和快速恢复
(1)慢启动:主机先以比较小的拥塞窗口进行数据发送,然后前期每次翻倍,由小到大逐渐增加拥塞窗口的大小,而这个大小最终是指数增长的。为了防止拥塞窗口cwnd增长过快,还要设置一个慢启动阈值,当拥塞窗口的大小超过慢启动阈值时(cwnd > ssthresh 时),停止使用慢启动算法而改用拥塞避免算法。
(2)拥塞避免:算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。
(3)快速重传+快速恢复:当发送端连续收到三个重复的ack时,表示该数据段已经丢失,需要重发。进入快速恢复状态,此时慢启动阈值变为原来一半,拥塞窗口cwnd变为ssth+3,随后再根据拥塞窗口大小+1 +1的发。
普通的恢复方式:当超过设定的时间没有收到某个报文段的ack时,表示网络拥塞。此时,慢启动阈值ssth变为原来一半,拥塞窗口大小直接cwnd=1,进入慢启动阶段。
因为TCP是无边界的流传输,所以接收端可能一次接受多个包。粘包就是若干个数据包到达接收方的时候粘成了一个包。
导致TCP粘包的原因有三方面:
避免粘包的措施:
因为TCP是无边界的流传输,需要进行封包和拆包,来确保收发的数据不粘连。
联系:
区别:
HTTP的请求方法包括GET,POST,PUT,DELETE四种基本方法。(四种方法中只有POST不是操作幂等性的)
get和post的区别:
域名解析
发起TCP的3次握手
建立TCP连接后发起http请求
服务器响应http请求,
浏览器得到html代码
浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
浏览器对页面进行渲染呈现给用户。
什么是超文本
什么是传输
什么是协议
那么网络协议是什么呢?
网络协议就是网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。
没有网络协议的互联网是混乱的,就和人类社会一样,人不能想怎么样就怎么样,你的行为约束是受到法律的约束的;那么互联网中的端系统也不能自己想发什么发什么,也是需要受到通信协议约束的。
那么我们就可以总结一下,什么是 HTTP?可以用下面这个经典的总结回答一下:
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
HTTP 请求特征(优点)
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
灵活:HTTP 允许传输任意类型的数据对象。
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
无状态:无状态其实既是优点又是缺点,无状态是指协议对于事务处理没有记忆能力。
因为服务器没有记忆能力,所以就不需要额外的资源来记录状态信息,不仅实现上会简单一些,而且还能减轻服务器的负担。
HTTP 缺点
无状态:
既然服务器没有记忆能力,它就无法支持需要连续多个步骤的事务操作。每次都得问一遍身份信息,不仅麻烦,而且还增加了不必要的数据传输量。由此出现了 Cookie /Session技术。
明文
HTTP 协议里还有一把优缺点一体的双刃剑,就是明文传输。明文意思就是协议里的报文(准确地说是 header 部分)不使用二进制数据,而是用简单可阅读的文本形式。
它的优点显而易见,不需要借助任何外部工具,用浏览器、Wireshark抓包后,直接用肉眼就可以很容易地查看或者修改,为开发调试工作带来极大的便利。
当然缺点也是显而易见的,就是不安全,可以被监听和被窥探。因为无法判断通信双方的身份,不能判断报文是否被更改过。
HTTP 一般是明文传输,很容易被攻击者窃取重要信息,鉴于此,HTTPS 应运而生。
HTTPS 是以面向安全的超文本传输协议,HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说 HTTPS = HTTP + SSL。
HTTPS在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。
它主要解决的是通信双方寻址的问题。寻址与路由以及 IP 分包与组包(分片)
传输层进行握手和传输数据的时候,如何找到对方的就得靠网络层, IP协议的作用就是规划数据可以走哪条路到达服务器,并把数据给服务器,规划的前提是知道服务器的IP地址和服务器的MAC地址,IP地址是指上网设备在网络世界中被分配到的地址,MAC地址是指上网设备(手机、电脑)中网卡的编号。
IP地址已经在应用层通过DNS服务解析出来了,现在就差服务器的MAC地址,有了服务器的IP地址和MAC地址以后,就可以查找到服务器了。可以采用ARP地址解析协议,将IP地址转为对应的MAC地址。
Cookie和Session都是为了解决无状态问题进而进行的会话跟踪(跟踪浏览器用户身份)
1.存储的位置不同:
2.安全性不同:
3.存储的数据大不同 :
4.生命周期
举例:
每个人都有一个身份证,去政部门办事的时候都需要出示身份证,工作人员会对你的身份进行核验,确认真伪后才会给你办理业务,这个过程和session验证身份的过程很像。
你: 浏览器的cookie
身份证: Session ID
政府部门:后台接口
待办业务:接口请求
进行身份证核验:比对Session ID
应用层()
应用层是网络应用程序和网络协议存放的分层,专门针对某些应用提供服务,应用层包括许多协议,
如 HTTP,电子邮件传送协议 SMTP、端系统文件上传协议 FTP、域名解析的 DNS 。
一个端系统应用程序与另外一个端系统应用程序交换信息分组,应用层的信息分组称为 报文(message)。
传输层(报文段)
传输层的任务是负责为两个主机中进程之间的通信提供通用的数据传输服务,在这一层主要有两种传输协议 TCP和 UDP,利用这两者中的任何一个都能够传输报文,不过这两种协议有巨大的不同。
网络层(数据报:分组:包)
因特网的网络层负责将数据报(datagram) 从一台主机移动到另一台主机。网络层一个非常重要的协议是 IP 协议,所有具有网络层的因特网组件都必须运行 IP 协议
网络层的协议:IP协议,ARP(地址解析协议:IP地址转MAC地址),ICMP(网际控制报文协议:可以报告IP数据包传递时发生的错误,确认ip包成功到达目标地址),路由协议(IGP,EGP),NAT
链路层 (数据帧)
现在我们有应用程序通信的协议,有了给应用程序提供运输的协议,还有了用于约定发送位置的 IP 协议,那么如何才能真正的发送数据呢?为了将分组从一个节点(主机或路由器)运输到另一个节点,网络层必须依靠链路层提供服务。
将源计算机网络层传来的数据可靠的传输到相邻节点的目标计算机的网络层
我们把链路层的分组称为 帧(frame)
PPP,IEEE802.3 ,以太网等
物理层(比特流)
虽然链路层的作用是将帧从一个端系统运输到另一个端系统,而物理层的作用是将帧中的一个个 比特 从一个节点运输到另一个节点,
例如,以太网有很多物理层协议:双绞铜线、同轴电缆、光纤等等。
多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,能互相分担负载。
;
ping是使用ICMP协议来进行工作的。 ICMP:网络控制报文协议
目的主机接收到数据帧后,就会检查包上的mac地址与本机mac是否相符,如果相符,就接收并把其中的信息提取出来交给IP协议,IP协议就会将其中的信息提取出来交给ICMP协议。然后构建一个ICMP应答包,用相同的过程发送回去。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。