
一、HTTP请求消息request
Request请求协议,是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后服务器通过request对象的相关方法来获取这些数据。request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。
Request常用方法介绍:
A. 获取请求消息:
Request.getRequestURL:浏览器发出请求时的完整URL,协议,主机名,端口。
Request.getRequestURI:浏览器发出请求资源名,去掉协议和主机名
Request.getQuerySting:请求行中的参数部分,只能显示get方式发出的参数,post方式看不到。
Request.getRemoteAddr:浏览器器所处于的客户机的ip地址
Request.getRemoteHost:浏览器所处于的客户机的主机名。
Request.getRemotePort:浏览器所处于的客户机使用的网络端口。
Request.getLocalAddr:服务器的ip地址。
Request.getLocalName:服务器的主机名。
Request.getMethod:得到客户机请求方式一般是get或者post。
B. 获取参数
Request.getParameter:用于获取单值参数
Request.getParameterValues:用于获取具有多值的参数。
Request.getParameterMap:用于遍历所有的参数,返回Map类型。
C. 获取头部消息
Request.getHeader:获取浏览器传递过来的头信息。
Request.getHeaderNames:获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息。
二、Response响应协议
Response代表响应,用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应。Response对象只提供了一个数据集合cookie,它用于在客户端写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。结果返回给客户端浏览器。可通过该对象分别设置HTTP响应:响应行,响应头,响应体。
转发和重定向的区别:
A. 转发是服务器内部,路径,可以省略项目名;重定向既可以是服务器内部,也可以是服务器外部。
B. 转发的地址栏和窗体内容不一致;重定向的地址栏和窗体是一致的。
C. 转发的客户端请求次数是一次,和一次响应;重定向是多次客户端请求和响应。
Response常用方法介绍:
1、setContentType 告知浏览器数据类型
2、setCharacterEncoding设置Response的编码方式
3、setHeader设置消息头
4、setStatus设置状态码
5、addCookie添加Cookie
6、sendRedirect重定向
7、getOutputstream获取通向浏览器的字节流
8、getWriter获取通向浏览器的字符流。
三、HTTP状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求,状态码表示网页服务器超文本传输协议响应状态。
HTTP常见状态码:
1、消息类:
2、成功类:
3、重定向:
4、请求错误:
5、服务器错误:
2019-07-23

在我们了解HTTP之前,先来看一下HTTP的发展历程简图:
HTTP(Hyper Text Transfer Protocol超文本传输协议)是互联网数据通信的基础。它作为一个简单的请求-响应协议,通常运行在TCP之上。
HTTP永远是客户端发起请求,服务器端给予响应,客户端表明想要访问的信息和请求动作,服务端收到请求动作后根据相应的指令访问服务器资源,最后发送HTTP响应把结果传递给客户端。
HTTP特点:
1、简单快捷。由于HTTP协议简单,所以HTTP服务器程序规模小,通信速度快。并且客户端向服务器端请求时候,只需要传送请求方法和路径。(常用的请求方法有HEAD、POST、GET)
2、无状态。HTTP对于事务处理没有记忆力,如果需要前面的信息,只能重传,这就增加了数据的传输量
3、无连接。服务器端响应完成并且收到客户端的应答后就断开连接,这种方式可以节约传输时间
4、HTTP支持B/S及C/S模式
5、灵活。通过HTTP协议,客户端可以传输任意类型的数据。
URL和URI的区别
统一资源标识符URI(Uniform Resource Identifiers)被HTTP协议用来传输数据和建立连接,而URL是一种特殊的URI。
万维网上每种可用的资源,例如图像、视频、程序、HTML文档等,都是一个URI来定位的,URI一般由访问资源命名机制、存放资源主机名、资源自身的名称组成。
而URL(uniform resource locator统一资源定位器)不仅可以用来标识一个资源,还指明了如何定位它,URL一般由协议、存有该资源的主机IP地址(有时也包括端口号)、主机具体的资源地址三部分组成。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、目录和服务器的地址等。
URN(uniform resource name,统一资源命名)则通过名字来标识资源。
URI以一种高层次且抽象的概念来定义统一资源标识,URL和URN则是具体资源标识。简单来说,每一个URL都是URI,但不是每一个URI都是URL。
2019-07-22

C/S架构
C/S架构是典型的两层架构,全称Client/Sever,即客户端服务器端架构。
第一层用户表示层(客户端)
第二层数据库层(服务器端)
在C/S架构中,客户端与服务器端直接连接,由两部分组成架构,并分别承担重要角色:
第一层客户机除了输入输出、运算能力以外,还可以处理一些计算、数据存储等方面的业务逻辑事务。
第二层服务器主要承担事务逻辑的处理,由于客户机能够分担部分逻辑事务,因此减轻服务器的负担。
B/S架构
B/S架构是三层架构,全称Browser/Sever,即浏览器/服务器架构。随着IT网络的发展,C/S架构无法满足当前需求,进而衍生的B/S架构,它主要是利用WWW浏览器技术实现,将系统功能实现的核心部分集合到服务器上,客户机仅需安装浏览器即可。
第一层浏览器(客户端)
第二层WEB服务器
第三层数据库服务器
第一层是浏览器,即客户端,只有简单的输入输出功能,处理极少部分的事务逻辑。
第二层是WEB服务器,职能为信息传递,即用户访问数据库前,使用SQL语句向WEB服务器发送请求。
第三层是数据库服务器,存放大量数据。在收到WEB服务器请求后,对SQL语句进行处理,并将结果发送给WEB服务器,WEB服务器将收到的数据结果转换为HTML文本形式发送给浏览器。
C/S架构与B/S架构的比较
2019-07-19

拥塞控制
拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。这种现象跟公路网中经常所见的交通拥挤一样,当节假日公路网中车辆大量增加时,各种走向的车流相互干扰,使每辆车到达目的地的时间都相对增加(即延迟增加),甚至有时在某段公路上车辆因堵塞而无法开动。
造成拥塞的原因
1、主要原因是通信量导致的,多个输入对应多个输出,多条流入线路有分组到达,并需要同一输出线路,此时,如果路由器没有足够的内存来存放所有这些分组,那么有的分组就会丢失。
2、路由器的慢带处理器的缘故,以至于难以完成必要的处理工作,如缓冲区排队、更新路由表等。
防止拥塞的方法
1、在传输层可采用:重传策略、乱序缓存策略、确认策略、流控制策略和确定超时策略。
2、在网络层可采用:子网内部的虚电路与数据报策略、分组排队和服务策略、分组丢弃策略、路由算法和分组生存管理。
3、在数据链路层可采用:重传策略、乱序缓存策略、确认策略和流控制策略。
控制方法
1、缓冲区分配法:此方法使用于虚电路的分组交换网络中,在网络中建立虚拟的节点为虚拟电路预先分配一个或多个数据缓冲区。若某个节点缓冲器已被占满,则呼叫请求分组另择路由,或者返回一个"忙"信号给呼叫者。
2、分组丢弃法:该法不必预先保留缓冲区,当缓冲区占满时,将到来的分组丢弃。若通信子网提供的是数据报服务,则用分组丢弃法来防止拥塞发生不会引起大的影响。但若通信子网提供的是虚电路服务,则必须在某处保存被丢弃分组的备份,以便拥塞解决后能重新传送。有两种解决被丢弃分组重发的方法,一种是让发送被丢弃分组的节点超时,并重新发送分组直至分组被收到;另一种是让发送被丢弃分组的节点在尝试一定次数后放弃发送,并迫使数据源节点超时而重新开始发送。
3、定额控制法:这种方法在通信子网中设置适当数量的称做"许可证"的特殊信息,一部分许可证在通信子网开始工作前预先以某种策略分配给各个源节点,另一部分则在子网开始工作后在网中四处环游。当源节点要发送来自源端系统的分组时,它必须首先拥有许可证,并且每发送一个分组注销一张许可证。目的节点方则每收到一个分组并将其递交给目的端系统后,便生成一张许可证。
2019-07-17

TCP在不可靠的网络上实现可靠的传输,必然会有丢包。TCP是一个“流”协议,一个详细的包将会被TCP拆分为好几个包上传,也是将会把小的封裝成大的上传,这就是说TCP粘包和拆包难题。
但是许多人有不同的理解。TCP协议本身确保传输的数据不会丢失完整性。如果在传输过程中发现数据丢失或数据包丢失,最大的可能性是在发送或接收程序的过程中出现问题。
例如,服务器向客户端发送大量数据,并且发送频率非常高,因此发送链接中很可能会出现错误(1、程序处理逻辑错误;2、多线程同步问题;3、缓冲区溢出等)如果发送失败得不到处理,那么客户端收到得数据将少于理论数据,这将导致数据丢失与数据包丢失。这种现象,其实本质上来说不是丢包,也不是丢数据,只是因为程序处理有错误,导致有些数据没有成功地被socket发送出去。
关于send函数的问题:
首先必须明确send函数做了什么。 他是将数据传递给本地TCP层,还是将数据传递给应用层,确认接收方TCP层后再返回。在后者的情况下,你说的没错,其实不然。 那是由于nagle算法不能使用了,即该算法将send函数接收的小数据汇总成大数据包发送。
即使send函数能进行数据发送,对方也不一定被接受。 TCP协议只是在传输层履行义务,send函数只是应用层起到向TCP层传递数据的作用,除此之外与TCP层没有任何关系。
常见的解决方案包括拆包、添加包头和发送组合包。如果服务器或客户端断开连接,一般会使用心跳测试。
心跳测试:每隔一段时间向服务器发送数据包。为了节省资源,通常会发送空数据包。如果发送失败表明套接字已断开,此时需要根据特定条件释放资源并重新连接。
TCP传输可以保证数据交换的可靠性,这意味着一台主机将数据正确地传输到目标计算机,目标计算机的协议栈有一定的限制,如果不及时处理在目标计算机上接收到的数据,堆栈就会溢出。
这种溢出不是由TCP协议本身引起的,而是由系统的IP协议栈的缓冲区溢出引起的!
2019-07-16tcp传输

TCP是一种面向连接的、可靠的基于字节流服务。“面向连接”意味着使用TCP协议的应用在建立联系之前,彼此需要先建立TCP联系;而TCP协议确保传输过程中数据的顺序性则体现其“可靠”的特性,具体如下:
TCP协议将数据切分为多个小片段(数据被划分为合理长度),小片段由头部(header)和数据(payload)组成,为了确保抵达数据的顺序,TCP协议给每个片段的头部(header)都分配了序列号,方便后期按照序列号排序。
1、当某个片段按照顺序发送后,发送方会将已发送的数据片段暂时保存在缓冲区内,并为每个已发送的数据设置一个时间区间。
2、当接收方收到正确的符合顺序的数据片段后,会优先对数据片段做完整检验,如确认无误,再把数据片段交给上层协议,并给发送方一个TCP片段反馈信息用来告知(ACK acknowledge)发送方:我已经接收到这个片段了。这个TCP片段被称为ACK回复。举个例子:发送的第一个片段序列号为T,其对应的ACK回复则为T+1,也就是接收方要接收的下一个发送片段的序列号。
假设在规定的时间区间之内发送方收到接收方的TCP片段反馈信息,则发送方可以释放缓冲区的数据,如若超时未收到应答,发送方则重新发送数据,直到收到应答,或者重发数据次数达到上限为止。
TCP协议的种种机制保证了数据传输的顺序,然而TCP报文段作为IP数据来传输,在IP数据报的到达可能会失序,因此TCP报文段的到达也存在失序的可能。特殊情况下,TCP将对收到的数据进行重新排列,确保顺序正确后再交给应用层。
2019-07-15

TCP协议是面向连接的传输层协议,TCP的传输特点具有可靠性,它具有面向连接服务来确保可靠稳定传输,而确认重传机制是TCP协议保证可靠稳定传输最重要的机制,他包括累计确认、超时时间计算、快速重传等几个方面。
确认重传机制
在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。
1、累计确认
累计确认就是TCP协议的确认方法,TCP使用可变长度报文段来发送数据,重传时,报文段数据可能会比原报文段数据包含更多的数据,因此对数据报和报文段无法进行简单的确认。TCP使用流序号对流中的一个位置进行确认,即序号和确认号一一对应,接收方使用序号将报文段重新排序,且以正确接收到的流的最长连续前缀进行确认。
2、超时时间计算
超时时间计算是开启定时器的设定时间,从而保证网络资源利用率,避免因定时器的时间(RTO)不确定而影响网络传输效率。
即发送方连续发送三个数据包,第二个数据包丢失,接收方未接收到,无法返回ACK。每当发送一个数据包时,就启动一个定时器, 而定时器溢出了,发送方还没接收到接收方返回的ACK时,确定重传。
3、快速重传
快速重传机制是发送方在接收端的反馈信息后引发重传,而不是定时器超时重传。快速重传机制要求当接收到失序报文段时,TCP需要立即生成确认信息(重复ACK),并且失序情况表明在后续数据到达前出现了丢包,发送端的工作即为尽快填补丢包带来的数据段空缺。
2019-07-12

TCP协议
TCP,是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。
一、TCP协议报头
TCP指传输控制协议,其报头格式如下:
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元( 1 MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体 1 的TCP层。
TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
TCP协议中的六个标志分别是,URG、ACK、PSH、RST、SYN、FIN。
URG:(Urgent Pointer field significant)紧急指针。用到的时候值为1,用来处理避免TCP数据流中断。
ACK:(Acknowledgment fieldsignificant)置1时表示确认号(AcknowledgmentNumber)为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。
PSH:(Push Function),PUSH标志的数据,置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
RST:(Reset the connection)用于复位因某种原因引起出现的错误连接,也用来拒绝非法数据和请求。如果接收到RST位时候,通常发生了某些错误。
SYN:(Synchronize sequence numbers)用来建立连接,在连接请求中,SYN=1,ACK=0,连接响应时,SYN=1,ACK=1。即,SYN和ACK来区分Connection Request和Connection Accepted。
FIN:(No more data from sender)用来释放连接,表明发送方已经没有数据发送了。
滑动窗口:控制报文流量,用来告诉对方目前接收端缓冲器大小。当为0时标识缓冲器已满,需要停止发包,单位为byte。
二、TCP协议连接方式
TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:
第一次握手:客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。握手完成后,两台主机开始传输数据了。
简单的说就是:
第一次握手是客户端向服务端发送一个建立连接的请求;
第二次握手是服务端向客服端回复建立连接的请求的确认;
第三次握手是客服端对服务端确认连接的确认。
为什么建立连接需要经过三次“握手”?
如果只有一次握手,客户端不能确定与服务器的单向连接,更加不能确定服务器与客户端的单向连接;
如果只有两次握手,客户端确定与服务器的单向连接,但是服务器不能确定与客户端的单向连接;
只有三次握手,客户端与服务器才能相互确认双向连接,实现双工数据传输。
断开TCP连接需要经历“四次挥手”:
第一次挥手:客户端发送一个FIN,用来关闭客户端到Server的数据传送,客户端进入FIN_WAIT_1状态。
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
第三次挥手:服务器发送一个FIN,用来关闭Server到客户端的数据传送,服务器进入LAST_ACK状态
第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。
简单的说就是:
第一次握手:主机A告诉主机B,我没有数据要发送了,请求关闭。
第二次握手:主机B回复主机A,你的请求我收到了,但是我还没准备好,你等我消息。
第三次握手:主机B向主机A请求关闭连接(注意,第二次握手是主机B 同意 主机A的关闭连接的请求)。
第四次握手:主机A向主机B发送确认断开连接请求,B收到后就关闭连接请求,A等待2MSL(两个最大段生命周期,2 Maximum Segment Lifetime)后依然没有收到回复,则证明B已经正常断开,A也关闭连接。
三、TCP协议特点
1、面向连接
面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。
2. 仅支持单播传输
每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。
3.面向字节流
TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。
4.可靠性
对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认;如果发送端实体在合理的往返时延内未收到确认,那么对应的数据(假设丢失了)将会被重传
5. 提供拥塞控制
当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞
6. TCP提供全双工通信
TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)。
2019-07-11
热搜关键词
udp传输大数据|服务器数据迁移|高速文件传输解决方案|FTP传输|aspera替代方案|跨境传输|传输系统|传输数据|远程传输|数据迁移|大文件传输解决方案|大数据传输|跨国文件传输|远程大文件传输|高速传输|加速传输|文件共享传输|文件数据|文件共享|传输大文件|数据传输软件|TLS|媒体行业|传输文件|跨境数据传输|文件传输|影视传输|文件传输系统|数据同步|同步传输|小文件传输|安全文件传输|发送大文件|共享文件|mft|sftp|ftps|aes|数据管理|文件直传|快速文件传输|电子邮件文件传输|传输解决方案|超大文件传输|文件传输软件|文件同步|文件同步软件|大数据传输|文件传输工具|文件传输协议|安全文件同步|高速文件传输|高速传输软件|传输软件|SD-WAN|极速传输|远程办公|外贸行业|文件管理|云计算|云存储|安全传输|网络|高速缓存|SOCKS5|断点续传|aspera|高速传输协议|传输加密|高可用|跨国传输|文件同步传输|高速数据传输|企业级文件传输软件|大文件传输软件|tcp传输|传输协议|AD域|LDAP|数据传输|镭速传输|镭速云传|文件传输|大文件传输|文件管理平台|镭速软件|镭速|镭速云|文件传输解决方案|跨境文件传输|点对点传输|数据交换|企业网盘私有化部署|UDP文件传输工具|文件分享|企业大文件传输|海量文件传输|内网文件传输工具|私有化部署|ftp传输替代方案|跨网文件交换|替代FTP|文件传输校验|远距离传输大型文件|快速传输大文件|文档安全外发|局域网文件传输工具|内外网文件交换