tcp连接相关知识
-
Java面试-TCP连接及其优化作为一个后端程序员,网络连接这块是一个绕不过的砍,当你在做服务器优化的时候,网络优化也是其中一环,那么作为网络连接中最基础的部分-TCP连接你了解吗?今天我们来仔细看看这个部分。 <!-- more --> TCP建立连接-三次握手 详解 客户端和服务器还未建立连接,但服务器一般处于listen状态 客户端主动建立连接,向服务器发送SYN报文,客户端变为SYN_SENT状态 服务器收到客户端发送的报文,也回了一个SYN报文,包含了一个ack。此时,服务器变为SYN_RCVD状态 客户端收到了服务器发送的SY
-
灵魂一问:一个TCP连接可以发多少个HTTP请求?一道经典的面试题是从 URL 在浏览器被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。 但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢? 要搞懂这个问题,我们需要先解决下面五个问题: 1.现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开? 2.一个 TCP 连接可以对应几个 HTTP 请求? 3.
-
面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...曾经有这么一道经典面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢? 要搞懂这个问题,我们需要先解决下面五个问题: 1.现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开? 2.一个 TCP 连接可以对应几个 HTTP 请求? 3.一个 TCP 连接
-
TCP连接TCP三次握手第一次握手: 客户端发送一个数据SYN给服务端收到SYN,客户端的状态变为SYN-SEND状态第二次握手:服务端收到SYN后,发送SYN+ACK给客户端,服务端的状态变为SYN-RCVD状态第三次握手:客户端收到服务端发送的SYN+ACK后,客户端发送ACK到服务端,客户端的状态变为ESTABLISED,服务端收到客户端发送的ACK后,状态变为ESTABLISED,与此同时,客户端与服务端建立连接,开始相互传递数据。TCP四次断开:第一次断开:开始客户端的连接状态为ESTABLISED,发送一个FIN到服务端,客户端的状态由establisd转变为FIN-WAIT-1第二次断开:服务端收到客户端发送的请求FIN,此时服务端的状态还是ESTABLISED状态,在服务端收到FIN后开始发送ACK给客户端,服务端的连接诶状态由ESTABLISED转变为CLOSE-WAIT,第三次断开:当客户端收到服务端发送的ACK数据后,客户端会进入FIN-WAIT-2状态,紧接着当客户端转变为CLOSE-WAIT
tcp连接相关课程
tcp连接相关教程
- 1.1 监听连接 浏览器每发起一次请求都需要跟服务端建立连接,服务端要时刻监听有没有客户端连接。传输层协议有 TCP/UDP 两种,实现起来并没有强制说用哪一种,下面是官方文档对 Http 连接的说明:HTTP communication usually takes place over TCP/IP connections. The default port is TCP 80 .文档中指明了连接通常用的是 TCP, TCP 不用考虑数据包乱序,丢失这些问题,实现起来更简单,高效。在代码层我们可以用 Socket 来实现我们的 TCP 传输服务。
- 2.2 建立 TCP 连接 在经过 DNS 解析之后,浏览器已经获取了对应网站的 IP 地址,通过三次握手连接到网站服务器,这个步骤中,我们可以给面试官画出简化后的三次握手过程:TCP三次握手(1)客户端发送一个带有 SYN 标记位的数据包(syn=J)到服务器,然后进入 SYN_SENT 状态;(2)服务器收到 SYN 包,需要确认客户端的 SYN(赋值ack=J+1),然后自己也发送一个 SYN 包(syn=K),服务器进入 SYN_RCVD 状态;(3)客户端收到服务器的 SYN+ACK 包,向服务器端发送确认包,即ack=K+1,发送完成之后,两边都进入 ESTABLISHED 建立连接状态。
- 1.5 无连接 连接是又控制层控制的,无连接并不是指 HTTP 不需要控制层的连接,而是指每次连接指处理一次请求,请求结束,即端口连接。这样设计的目的,是减少开销,提高效率。因为,TCP 控制层的连接会消耗大量的系统资源。
- 2. 连接方式 我们知道 TCP 数据发送前要建立连接,UDP 不需要,而 Socket 的连接又有如下区分:
- 2. 左连接、右连接、全连接 面试官: 请阐述下 MySQL 中左连接、右连接、全连接的定义和区别?题目解析:① 定义:MySQL 的连接表示多表(一般就是两张表)之间联合查询的操作。② 分类:根据操作性质的不同,分为内连接和外连接,外连接又可以细分为左外连接和右外连接。除此之外,还有一种全连接操作,不过 MySQL 数据库并不支持。定义解释比较抽象,下面我们通过实战来讲解这几种连接的区别,首先进入 MySQL 终端,首先创建一个测试数据库:CREATE DATABASE mooc_demo;创建一张测试表 test_a:DROP TABLE IF EXISTS `test_a`;CREATE TABLE `test_a` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '数据库主键', `name` varchar(32) DEFAULT NULL COMMENT '姓名', `part` varchar(32) DEFAULT NULL COMMENT '部门') ENGINE=InnoDB DEFAULT CHARSET=utf8;然后插入一些测试数据:insert into test_a (`name`, `part`) values ('小明','文艺部');insert into test_a (`name`, `part`) values ('小红','学习部');insert into test_a (`name`, `part`) values ('小王','体育部');继续创建另外一张测试表 test_b:DROP TABLE IF EXISTS `test_b`;CREATE TABLE `test_b` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '数据库主键', `name` varchar(32) DEFAULT NULL COMMENT '姓名', `group` varchar(32) DEFAULT NULL COMMENT '小组') ENGINE=InnoDB DEFAULT CHARSET=utf8;插入一些测试数据:insert into test_b (`name`, `group`) values ('小明', '1号小组');insert into test_b (`name`, `group`) values ('小红', '2号小组');insert into test_b (`name`, `group`) values ('小李', '3号小组');执行完成之后,两张表的数据如下:两张表数据
- 2.1 TCP 和 UDP 面试官提问: TCP 协议和 UDP 协议有什么区别?有什么共同点?题目解析:相同点:两个协议最大的共同点是都位于 TCP/IP 网络模型的传输层。不同点:我们通过表格的形式对比不同。TCP(Transmission Control Protocol,传输控制协议)UDP(User Datagram Protocol,用户数据报协议)是否连接面向连接无连接传输方式面向字节流:直接以字节流形式传输面向报文:对于应用程序交付的数据,添加首部之后就交付给 IP 层首部格式 20 个字节的固定首部只有 8 个字节是否可靠可靠传输,依靠流量控制和拥塞控制不可靠传输连接对象个数一对一连接支持一对一(点到点),一对多以及多对多传输适用场景要求可靠传输的场景,例如发送邮件和传输文件对可靠性要求低,效率要求高的场景,例如 QQ 的视频通话根据表格中的特点对比我们可以总结得到:TCP 协议面向连接并且可靠,UDP 协议无连接并且不可靠;虽然 UDP 协议不可靠,但是在对数据完整性要求低,对传输速度要求高的场景,可以适用 UDP 协议。
tcp连接相关搜索
-
tab
table
tableau
tablelayout
table样式
taif
tail
talk
tamcat
tan
target属性
task
tbody
tcl tk
TCP IP
tcp ip协议
tcpdump
tcpip
tcpip协议
tcp连接