tcp

计算机网络面试题(三)

假如想象 提交于 2020-03-30 13:42:41
计算机网络之传输层 ● 请你说明一下,TCP协议的4次握手。 考察点:TCP协议 参考回答: 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。 (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。 ● 谈一下,为什么tcp为什么要建立连接? 考察点:TCP 参考回答: 保证可靠传输。 ● 请你解释一下TCP为什么可靠一些 考察点:TCP 参考回答: 三次握手,超时重传,滑动窗口,拥塞控制。 ● 请说明一下哪种应用场景会使用TCP协议,使用它的意义 考察点:TCP协议 参考回答:

一次 Web 请求到底发生了什么

蓝咒 提交于 2020-03-30 13:42:09
一次 Web 请求到底发生了什么 一、从输入一个网址开始 当我们在浏览器输入一个网址,然后按下回车,接下来浏览器显示了页面。网速好的话这之间可能就一秒,但在这一秒内到底发生了什么? 本文主要内容是试图记录一个完整 Web 请求的详细过程,从用户在浏览器中输入 URL 地址说起,然后浏览器如何找到服务器地址的过程,并发起请求;分析请求在达反向代理服务器内部处理过程;最后到请求在服务器端处理完成后,浏览器渲染响应页面过程。 大致过程如下: Web请求的工作原理可以简单地归纳为: 浏览器通过 DNS 把域名解析成对应的IP地址; 根据这个 IP 地址在互联网上找到对应的服务器,建立 Socket 连接; 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档; 在服务器端,实际上还有复杂的业务逻辑:服务器可能有多台,到底指定哪台服务器处理请求,这需要一个负载均衡设备来平均分配所有用户的请求; 还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里; 当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如:css,js或者图片)时又会发起另外的请求,而这些请求可能会在CDN上,那么CDN服务器又会处理这个用户的请求。 客户端与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。 一个 HTTP 事务就是这样实现的,看起来很简单,原理其实是挺负责的

Java网络编程三--基于TCP协议的网络编程

让人想犯罪 __ 提交于 2020-03-30 12:07:48
ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状体   Socket accept():如果接收到客户端的连接请求,该方法返回一个与客户端对应Socket对象,否则该方法将一直处于等待状态,线程也被阻塞   提供了三个构造器:     ServerSocket(int port):监听port端口(端口号指定大于1024)     ServerSocket(int port , int backblog):????????????backlog有啥用还没查???????????     ServerSocket(int port , int backblog, InetAddress localAddr):将serversocket绑定到指定IP的地址(当机器存在多个IP地址时) Socket   Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, int localPort):创建连接到远程主机,端口的连接,并制定本机的IP地址和端口(适用于本机有多个IP地址)   Socket(InetAddress/String remoteAddress, int port):创建连接到远程主机,端口好的Socket,使用本机默认的ip地址

服务器socket

强颜欢笑 提交于 2020-03-30 07:04:27
做了一个web项目,放在服务器上运行一段时间就报错了。 java.net.SocketException: No buffer space available (maximum connections reached?): connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl

TCP/IP 之网络层

回眸只為那壹抹淺笑 提交于 2020-03-30 06:48:33
视因特网为一个暗箱 视因特网为一个组合 数据报无序到达,然后组装成完整的报文 有个流标号flow label 这个标记指引数据报的行走路径,统一的到达目的地(这是我自己的理解) 请求分组 确认分组(当所有路由器都为特定的虚电路创建了各自的路由表之后,属于同一个报文的所有网络层分组就可以一个接一个地发送出去。) 一个具体的发邮件的例子(爱丽丝向鲍勃发邮件) 网络层,源计算机提供的服务(网络层收到来自于上层的几个信息:数据、数据长度、逻辑地址、协议ID以及服务类型。网络层对这些信息进行处理后生成了一组数据报片以及下一跳的MAC地址,并将它们一起交付给数据链路层。) 路由器上网络层的处理过程 目的计算机网络层,重组数据报片 来源: https://www.cnblogs.com/jiqing9006/archive/2013/05/30/3108588.html

TCP的长连接与短连接

被刻印的时光 ゝ 提交于 2020-03-30 04:02:14
1.TCP连接 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图所示: (1)第一次握手:建立连接,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认. (2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态. (3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。 图1.TCP三次握手建立连接 2.TCP断开连接 由于TCP连接时全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送 (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号。 (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A. (4

TCP/IP协议(4):网络层

家住魔仙堡 提交于 2020-03-30 02:37:55
网络层上有IP、ICMP、IGMP等协议。 1、IP地址 在OSI模型中,三层网络层负责IP地址,IP数据报帧头中的源地址和目的地址就是指IP地址。IPV4类型IP地址为32位4个字节,IPV6类型IP地址为128位16个字节,公网IP是全球唯一的。32位的IPV4 IP地址通常用4个十进制的整数来表示,每个整数对应一个字节,如"106.10.21.206",这种表示方法称为“点分十进制表示法”。 IPV4类IP地址分为五类,如下图为他们各自的地址格式和地址范围: A类IP地址第一个字节为网络地址,剩余三个字节为主机地址,默认子网掩码为255.0.0.0,可用的A类网络有126个(全0和全1的网络地址用作特殊用途,故为128-2),每个网络能容纳1亿多个主机。A类地址适用于具有大量主机(直接个人用户)而局域网络个数较少的大型网络。需要注意的是A类IP地址中以127开头的地址表示本地环回地址。 B类IP地址前两个字节为网络地址,后两个字节为主机地址,默认子网掩码为255.255.0.0,可用的B类网络有16382个,每个网络能容纳6万多个主机 。 C类IP地址前三个字节为网络地址,后一个字节为主机地址,默认子网掩码为255.255.255.0,C类网络可达209万余个,每个网络能容纳254个主机。 D类IP地址被用在多点广播(Multicast)中。 E类IP地址范为将来使用保留。

helm部署redis主从和哨兵模式

不想你离开。 提交于 2020-03-29 18:45:18
原文地址: 点这里 1. helm部署redis主从节点 1.1.确认仓库里有chart,redis chart版本号为10.5.7 1.2.部署redis一主二从节点 2. 部署redis 高可用哨兵模式 2.1.确认仓库里有chart,redis chart版本号为10.5.7 2.2. 部署redis 高可用 2.3.如果需要暴露给外部使用则需要再部署一个 NodePort Service 1. helm部署redis主从节点 1.1. helm部署redis条件 a. 准备storageClass服务作为永久存储,名称为nfs b. helm Client:"v2.13.1", Server:"v2.13.1" c. 仓库源为http://mirror.azure.cn/kubernetes/charts/ d. 确认仓库里有chart,redis chart版本号为10.5.7 [root@ops1 redis]# helm version Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.13.1",

深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1

*爱你&永不变心* 提交于 2020-03-29 17:29:19
【ASP.NET Core】EF Core - “影子属性” 有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点。 老周觉得,视频直播可能会好一些,虽然我的水平一般,不过直播时,老周可以现场演示,可能会比看博客效果要好(因为现场演示,有时候会有失误,没办法,水平有限)。还有一个,就是.NET 的资料其实很多,毕竟也发展了十几年了,有些东西如果别人都写过了,那我也不好意思重复了。.NET Core 尽管是跨平台版本,但核心依然是.net 基础,我们不需要全新去学习,只要掌握一些新的变化就可以了。目前比较期待 .NET Core 3 的正式发布,等正式上线了,老周再挑一些有意义的内容写一下。 此外,老周也可能会写一写其他方面的博客,比如 Python、GO、Ruby、Typescript 等。老周并不是只会玩.NET ,只不过老周是主攻 .NET,在接触 .NET 之前,老周就学过很多东西,比如古老的 QBasic、Pascal ,老周在上初中时就学过。后来向 VB、C、C++ 进攻,顺便把 Ruby、Python、PB 也调戏一下,后来有一段时间,Delphi 和 E 语言也挺流行的,所以顺便也玩了两把。 再后来,学过 Java 和 PHP,抛 Java 而投 .NET 是因为 Java 太复杂,效率不高

LINUX 内核的优化

旧时模样 提交于 2020-03-28 07:57:06
PS:在服务器硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题。要提高 Linux 系统下的负载能力,可以使用 nginx 等原生并发处理能力就很强的web服务器,如果使用Apache的可以启用其Worker模式,来提高其并发处理能力。除此之外,在考虑节省成本的情况下,可以修改 Linux 的内核相关TCP参数,来最大的提高服务器性能。当然,最基础的提高负载问题,还是升级服务器硬件了,这是最根本的。 Linux系统下,TCP连接断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源。这个时候我们可以优化TCP的内核参数,来及时将TIME_WAIT状态的端口清理掉。 本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效,如果不是这种情况下,效果可能不明显。可以使用netstat命令去查TIME_WAIT状态的连接状态,输入下面的组合命令,查看当前TCP连接的状态和对应的连接数量: #netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ 这个命令会输出类似下面的结果: LAST_ACK 16 SYN