java面经之网络

1.三次握手和四次挥手的过程?每次发送的包的内容,客户端和服务端的状态?

三次握手
1.客户端向服务器发送 syn =1 seq = x 发送完毕 客户端进入 syn_send状态
​ 2.服务器接收到数据包 回复一个syn =1 ack=1 seq=y,acknum = x+1 发送完毕 服务端进入 syn_rcvd状态

​ 3. 客户端收到以后回复一个 ack=1 acknum = y+1 发送完毕后客户端进入 established状态 ,当服务器接收到> > 这个包 也进入established状态
四次挥手
​ 1.客户端向服务器发送 FIN = 1 seq = a 发送完毕 客户端进入一个 FIN_WAITE_1状态
​ 2. 服务器收到这个包以后 回复客户端 ACK=1 ACKnum = a+1 发送完毕 服务器进入Close_waite状态 ,客户端> 收到这个包进入 FIN_WAITE_2状态
​ 3.服务器向客户端发送FIN 报文 服务器进入LAST_ACK状态
​ 4. 客户端收到来自服务器的FIN后,回复一个ACK 包 并且进入一个Time_wait状态,等待两个MSL以后就进入> 关闭状态 服务器收到这个ACK 就进入了关闭状态。
2. TCP如何保证可靠性?

TCP的头部必须加上一个校验和字段,用于计算发送方发送的数据在其中手法被发生了篡改,如果发生了篡改就直接丢弃。

TCP还将每个字节的数据都进行了编号,称作序列号,然后用序列号来保可靠性,因为 如果少了某个序号就马上知道了,还保证了数据的按序到达,和去除重复数据。

TCP还有确认应答和超时传输的机制: 在TCP的首部中有一个标志ACK ,代表确认号是否有效,接收方对于按序到达的数据进行去人,当标志位ACK=1的时候确认首部的确认字段有效,确认字段保证了数据都是按序到达,防止丢包的情况。如果某一个数据还没有收到确认报文 就会启动重传机制。

TCP还有一个流量控制的机制 来保证了 不会因为缓冲区满了而造成丢包的情况: TCP会根据接收端的处理能力来决定端的发送速度。

TCP还拥有一个拥塞控制机制,来保证了在网络拥堵的情况产生的丢包问题。

tcp使用慢启动的机制,先发出少量数据,来摸清当前网络的拥堵状态后,在决定按照多大的数据传输数据。在启动的初期是以指数的方式增长的,如果达到一个阈值就停止指数整张,按照线性增长的方式,如果线性增增长发生了网络拥塞就立刻乘法减小,拥塞窗口重新设置为1重新慢启动,同时 新一轮的阈值变成原来的一半。

  1. 如何实现UDP的可靠传输?

    UDP要想可靠,就要接收方收到UDP之后回复个确认包,发送方有个机制,收不到确认包就要重新发送,每个包有递增的序号,接收方发现中间丢了包就要发重传请求,当网络太差时候频繁丢包,防止越丢包越重传的恶性循环,要有个发送窗口的限制,发送窗口的大小根据网络传输情况调整,调整算法要有一定自适应性

  2. https的请求过程?

    1. 客户端向服务器发起https的请求,然后连接到服务器的443端口
    2. 服务器将非对称加密的公钥传递给客户端,以证书的形式回传给客户端
    3. 客户端接收到该公钥的验证,就是验证那个证书,如果证书有问题,则HTTPS请求就无法继续,如果没有问题,在(第一次https请求的时候) 客户端就会随机生成一个私钥,客户端私钥,用于对称加密,然后用证书中的服务器公钥来进行非对称加密。
    4. 进行第二次https请求,将加密后的客户端私钥传递给服务器
    5. 服务器使用自己的私钥解密,然后得到客户端私钥,然后使用客户端私钥进行对数据记性加密。
    6. 将对称加密的数据传递给客户端,客户端使用对称解密 得到服务器发送的数据完成第二次HTTS请求。
  3. 在浏览器中输入一个url,敲下回车之后发生的事情

第一步: 浏览器从DNS 服务器查找对应 域名的IP : 最开始是从缓存中拿,如果缓存没有就是系统缓存中找 ,然后从路由器缓存中,如果没有就从域名服务器拿了

第二步 浏览器与目标服务器建立TCP链接

第三步 浏览器通过HTTP协议发送请求

第四部 浏览器处理请求然后返回一个响应

第五步 释放TCP链接

第六步 浏览器显示页面

第七步 浏览器发送获取嵌入在HTML中的其他内容。

  1. 服务端出现大量timewait是什么原因导致的?

    产生原因:

    ​ 在高并发短连接的TCP服务器上,当服务器处理完请求后立刻主动正常关闭连接。这个场景下会出现大量socket处于TIME_WAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。

    解决方案

    编辑内核文件/etc/sysctl.conf,加入以下内容:然后执行 /sbin/sysctl -p 让参数生效.

    net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
    net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
    net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
    net.ipv4.tcp_fin_timeout 修改系默认的 TIMEOUT 时间

  2. http的报文结构?

    • 请求行,用来说明请求类型、要访问的资源以及所使用的HTTP版本。例如 GET /books/java.html HTTP/1.1
    • 请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息,第二行起为请求头部。
    • 空行,请求头部后面的空行是必须的。
    • 请求数据,也叫主体,可以添加任意的其他数据。
  3. http 和https 的区别

(1)HTTPS是密文传输,HTTP是明文传输;

(2)默认连接的端口号是不同的,HTTPS是443端口,而HTTP是80端口;

(3)HTTPS请求的过程需要CA证书要验证身份以保证客户端请求到服务器端之后,传回的响应是来自于服务器端,而HTTP则不需要CA证书;

(4)HTTPS=HTTP+加密+认证+完整性保护。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值