输入一个url到浏览器页面展示过程:

  1. 输入网址
  2. 缓存解析
  3. 域名解析
  4. tcp连接,三次握手
  5. 服务器处理请求并返回报文
  6. 页面渲染

TCP传输控制协议/UDP用户数据报协议:

  • TCP面向连接、字节流、全双工的可靠信道,发送端时经过各层时都要附加上相应层的协议头和协议尾(仅数据链路层需要封装协议尾)部分,与原数据大小不同。
  • UDP无连接、报文流、不可靠信道,发送时与原数据大小相同。
  • 接收缓冲区被TCP和UDP用来缓存网络上来的数据,一直保存到应用进程读走为止。对于TCP,如果应用进程一直没有读取,buffer满了之后,发生的动作是:通知对端TCP协议中的窗口关闭。这个便是滑动窗口的实现。保证TCP套接口接收缓冲区不会溢出,从而保证了TCP是可靠传输。因为对方不允许发出超过所通告窗口大小的数据。 这就是TCP的流量控制,如果对方无视窗口大小而发出了超过窗口大小的数据,则接收方TCP将丢弃它。
  • UDP:当套接口接收缓冲区满时,新来的数据报无法进入接收缓冲区,此数据报就被丢弃。UDP是没有流量控制的;快的发送者可以很容易地就淹没慢的接收者,导致接收方的UDP丢弃数据报。

流量控制:

TCP中采用滑动窗口来进行流量控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时,发送方一般不能再发送数据报。

拥塞控制:

拥塞窗口指某一源端数据流在一个RTT内可以最多发送的数据包数。

防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞

  • 慢启动: 网络传输刚开始时,并不知道网络的实际情况,所以采取一种试探的方式控制数据的发送速率。慢启动阶段,数据的发送速率以指数方式增长,即就是拥塞窗口的增长,每次都是收到确认报文段数量的2倍。可以看出慢启动并不慢,拥塞窗口增长的速度很快。所以,为其设置了一个慢启动门限,当达到门限时,就进入到拥塞避免阶段。
  • 拥塞避免: 当拥塞窗口的大小采用慢启动方式增长到慢启动门限时,就进入拥塞避免阶段,拥塞避免阶段不再以指数形式增长拥塞窗口,而是每经过一个往返时间RTT就将发送方的拥塞窗口+1, 使其增长速度减缓。按照线性方式增长。如果发生网络拥塞,比如丢包时,就将慢启动门限设为原来的一半,然后将拥塞窗口设置为1,开始执行慢启动算法。(较低的起点,指数级增长)。
  • 快速重传: 假设发送方发送的报文段分别为: M1,M2,M3,M4,M5,M6 , 当接收方收到M1和M2后,M3报文段丢失,接着收到的M4,M5,M6都不做处理,而是没接收到一个报文段就对M2重复确认,发送方接收到重复的三次确认报文段,就对其后的报文段进行重新发送,而不需要等待超时时间到达。当快速重传后,立即进入到快速恢复阶段。
  • 快速恢复:将慢启动门限设置为原来的一半,然后将拥塞窗口设置为现在的慢启动门限值,不再执行慢启动算法,而是直接进入拥塞避免阶段。使发送窗口成线性方式增大。

TCP连接:

  • ACK:确认序号有效。
  • SYN:发起一个新连接。
  • FIN:释放一个连接。

握手(挥手)过程中必须有SYN(FIN)与ACK在同一次握手(挥手)当中传输,意味着确定打开(关闭)连接了。

TCP的三次握手:

  • ack = 另一端发送的seq + 1
  • seq = 另一端发送的ack
  • 另一端没有发送则建新值

第三次握手原因:

防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

TCP的四次挥手:

挥手需要四次原因:

第二次只发送ACK,但是还不能发送FIN,因为服务端还有数据没发完,所以在CLOSE-WAIT阶段等待剩余数据的发送,发送完数据则发送ACK+FIN跟客户端确定可以关闭连接了,进入LAST-ACK阶段等待最后一次确定状态,客户端再发送一次ACK确定收到关闭连接消息,服务端就进入CLOSED。

客户端在TIME-WAIT等待2MSL原因:

MSL指的是Maximum Segment Lifetime:一段TCP报文在传输过程中的最大生命周期。2MSL即是服务器端发出为FIN报文和客户端发出的ACK确认报文所能保持有效的最大时长。

防止服务端没有收到最后一次ACK,因为服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文。

HTTP协议:

1.请求报文

  • 请求行                    请求方法(Method)、URL字段和HTTP协议版本
  • 请求头                    存放对客户端想给服务端的附加信息
  • 请求体                    真正需要发给服务端的数据

2.响应报文

  1. 响应状态行             状态行是服务端返回给客户端的状态信息,包含HTTP版本号、状态码、状态码对应的英文名称。
  2. 响应头与响应实体

  • HTTP是基于TCP的,客户端往服务端发送一个HTTP请求时第一步就是要建立与服务端的TCP连接,也就是先三次握手
  • socket层只是在TCP/UDP传输层上做的一个抽象接口层,因此一个socket连接可以基于TCP连接,也有可能基于UDP。
  • HTTP采用“请求-响应”机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端。必须满足客户端发送消息在前,服务端回复在后。Socket连接双方类似peer2peer的关系,一方随时可以向另一方喊话。

get和post的区别

功能不同:

  • get是从服务器上获取数据。
  • post是向服务器传送数据。

过程不同:

  • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
  • 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

传送数据量不同

  • get传送的数据量较小,不能大于2KB。
  • post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

安全性不同

  • get安全性非常低。
  • post安全性较高。

对称加密

  • 客户端和服务器共用同一个密钥,该密钥同时用于加密和解密一段内容。
  • 对称加密的优点是加解密效率高,但是在安全性方面可能存在一些问题,因为密钥存放在客户端有被窃取的风险。对称加密的代表算法有:AES、DES等。

非对称加密

  • 将密钥分成了两种:公钥和私钥。
  • 公钥通常存放在客户端,私钥通常存放在服务器。
  • 使用公钥加密的数据只有用私钥才能解密,反过来使用私钥加密的数据也只有用公钥才能解密。
  • 非对称加密的优点是安全性更高,因为客户端发送给服务器的加密信息只有用服务器的私钥才能解密,因此不用担心被别人破解,但缺点是加解密的效率相比于对称加密要差很多。非对称加密的代表算法有:RSA、ElGamal等。

HTTP无状态:

无状态是指,当浏览器给服务器发送请求的时候,服务器响应客户端请求。

但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道他就是刚才的那个浏览器。

简单的说,就是服务器不会去记得你,所以就是http的无状态协议。

保存用户状态的两大机制:

HTTP与HTTPS:

  • HTTP+SSL(Secure Sockets Layer 安全套接字协议),
  • 传统的http方式传输数据时信息都是明文的,数据很容易被监听和窃取。传输的数据还有可能被一些别有用心的人篡改,导致浏览器与网站收发的内容不一致。
  • HTTPS采用对称加密+非对称加密的方式

SSL协议的握手过程

  1. 网页给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
  2. 网站确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
  3. 网页确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给网站。
  4. 网站使用自己的私钥,获取网页发来的随机数(即Premaster secret)。
  5. 网页和网站根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

浏览HTTPS网站过程:

浏览器随机生成密钥,然后用CA机构发的公钥加密一层,传输到网站后,网站获得密钥。网站收到了浏览器随机生成的密钥之后,双方就可以都使用对称加密来进行通信了。

浏览器获取网站的公钥,以及保证公钥的安全性由CA机构保证。

  • CA机构则会使用网站管理员提交的公钥,再加上一系列其他的信息,如网站域名、有效时长等,制作证书。
  • 有浏览器请求网站时,首先会将这段加密数据返回给浏览器,此时浏览器会用CA机构的公钥来对这段数据解密。
  • 如果能解密成功,就可以得到CA机构给我们网站颁发的证书了,其中包括了网站的公钥。

单向认证、双向认证

单向认证指的是只有一个对象校验对端的证书合法性。通常都是client来校验服务器的合法性。那么client需要一个ca.crt,服器需要server.crt,server.key
双向认证指的是相互校验,服务器需要校验每个client,client也需要校验服务器。server 需要 server.key 、server.crt 、ca.crt。client 需要 client.key 、client.crt 、ca.crt。

Java—TCP与HTTP连接相关推荐

  1. java tcp 三次握手_用Java代码分析TCP的三次握手四次挥手过程

    (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志.因此它表示对刚才客户 ...

  2. Java TCP 编程简介

    一.TCP 协议简介 http://blog.csdn.net/nvd11/article/details/40954043 之前的博文简单介绍了网络编程中的UDP协议 其实更常用的网络协议是TCP协 ...

  3. Java TCP/IP Socket 编程 笔记

    http://jimmee.iteye.com/blog/617110 http://jimmee.iteye.com/category/93740 Java TCP/IP Socket 编程 笔记( ...

  4. java tcp发消息给硬件_java – TCP客户端/服务器通信只发送第一条消息?

    我在java中设置一个简单的TCP客户端服务器交互. 服务器: 服务器是用Java编写的桌面客户端: import java.io.BufferedReader; import java.io.Dat ...

  5. java tcp 编程实例_Java实现基于TCP的通讯程序实例解析

    Java中的TCP通信程序 TCP可以实现两台计算机之间的数据交互通信的两端,要严格区分客户端与服务端 两端通信时的步骤: 1.服务端程序,需要事先启动,等待客户端连接 2.客户端主动连接服务器端,才 ...

  6. tcp网络通信教程 java_基于java TCP网络通信的实例详解

    JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数 ...

  7. Java TCP/UDP编程

    java TCP & UDP编程 UDP编程 TCP编程 UDP编程 UPD: User Datagram Protocol.面向无连接,不安全. UDP中,发送方无需知道接收方是否接受,只考 ...

  8. java tcp 阻塞等待应答_面试常问!TCP 的三次握手与四次挥手理解

    来源:青柚_ blog.csdn.net/qq_38950316/article/details/81087809 三次握手过程理解 四次挥手过程理解 常见面试题 先来张图! 序列号seq: 占4个字 ...

  9. Java TCP实现高仿版QQ聊天(一)

    前言 ​ 记录一下这套简陋的系统说明,把所遇到的问题和难点以及操作说明在这篇文档中说明清楚,当个回顾吧,万一以后那一天查看也能及时找到问题.这套系统是在本人大三时期完成的,从GitHub上借鉴了很多经 ...

最新文章

  1. 基于SSH框架实际开发时遇到的问题及解决办法
  2. 开源一个上架App Store的相机App
  3. 写代码如坐禅:你是哪一类程序员?
  4. 支付宝WAP支付接口开发
  5. 分享一个SQL文件的合并的小程序
  6. Git和SourcesTree的安装
  7. 小学奥数 地球人口承载力估计
  8. 【渝粤教育】国家开放大学2018年春季 0554-22T立体构成(一) 参考试题
  9. FreeSwitch给会议室人员增加标识
  10. CAD转GIS工具软件下载
  11. ibm服务器远程管理口 口令,IBM X系列服务器|IMM2设置远程管理口|默认IP
  12. Nebula Graph - 基于Docker 安装 及 Studio
  13. Mysql 当前月每天累计统计,Mysql 本月第一天
  14. 【注意力机制集锦2】BAMSGEDAN原文、结构、源码详解
  15. Vue-basic 19.单文件组件
  16. 领英不能加人怎么办?
  17. ICP许可证怎么申请?
  18. 卡西欧计算机亮度,卡西欧怎么调3秒灯
  19. windows小技巧---复制百度文库vip内容/解决微信文件过大
  20. 小技巧: 掀开 Metacity 的同化殊效

热门文章

  1. 打了断点为直接运行完_黑社会行为?男子驾校身亡,家属看现场被保安围殴,手臂被打断...
  2. flink sql udf jar包_Java动态加载Jar实例解析
  3. 用户关系表 存储_如何解决oracle 19c中创建用户报错的故障
  4. 「第四篇」电赛控制题可以准备一些什么?
  5. 电源开关上的 | 和 O 究竟代表了什么?
  6. 40岁“老程序员”的“辛酸”自述:
  7. java负数转换二进制表示_Java中的负数的在计算机中的二进制表示,以及与十进制的相互转换...
  8. kernelbasedll下载_kernel32.dll
  9. 服务器放n个网站,服务器放n个网站
  10. 安卓键盘加上数字_Android自定义键盘的实现(数字键盘和字母键盘)